diff --git a/Jenkinsfile b/Jenkinsfile index d10cdcb..c09614e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -3,6 +3,7 @@ pipeline { environment { DOCKER_HUB_CREDENTIAL = credentials('dockerHub') + GITHUB_CREDENTIAL = credentials('github') } tools { @@ -18,6 +19,12 @@ pipeline { stages { stage('Compile') { steps { + sh ''' + cat > .npmrc << EOF + @linagora:registry=https://npm.pkg.github.com/ + //npm.pkg.github.com/:_authToken=${GITHUB_CREDENTIAL_PSW} + EOF + ''' sh 'npm install' } } diff --git a/__test__/components/Calendar.test.tsx b/__test__/components/Calendar.test.tsx index 6fff6bf..135ba6e 100644 --- a/__test__/components/Calendar.test.tsx +++ b/__test__/components/Calendar.test.tsx @@ -443,11 +443,14 @@ describe("calendar Availability search", () => { screen.getByRole("button", { name: "event.createEvent" }) ); }); - await waitFor(() => { - expect(screen.getAllByText("event.createEvent")).toHaveLength(2); - expect(screen.getAllByText(/New User/i)).toHaveLength(2); - }); - }); + await waitFor( + () => { + expect(screen.getAllByText("event.createEvent")).toHaveLength(2); + expect(screen.getAllByText(/New User/i)).toHaveLength(2); + }, + { timeout: 10000 } + ); + }, 15000); it("open window with attendees filled after temp search on enter in temp input", async () => { const spy = jest @@ -482,11 +485,14 @@ describe("calendar Availability search", () => { fireEvent.keyDown(input, { key: "Enter" }); }); - await waitFor(() => { - expect(screen.getAllByText("event.createEvent")).toHaveLength(2); - expect(screen.getAllByText(/New User/i)).toHaveLength(2); - }); - }); + await waitFor( + () => { + expect(screen.getAllByText("event.createEvent")).toHaveLength(2); + expect(screen.getAllByText(/New User/i)).toHaveLength(2); + }, + { timeout: 10000 } + ); + }, 15000); it("BUGFIX: can untoggle all calendar.personal", async () => { await act(async () => diff --git a/__test__/components/EventErrorHandling.test.tsx b/__test__/components/EventErrorHandling.test.tsx index f08e8d1..098e881 100644 --- a/__test__/components/EventErrorHandling.test.tsx +++ b/__test__/components/EventErrorHandling.test.tsx @@ -69,10 +69,13 @@ describe("Event Error Handling", () => { renderWithProviders(, erroredState) ); - await waitFor(() => { - expect(screen.getByText("Test Event")); - expect(screen.getByRole("alert")).toBeInTheDocument(); - }); + await waitFor( + () => { + expect(screen.getByText("Test Event")); + expect(screen.getByRole("alert")).toBeInTheDocument(); + }, + { timeout: 10000 } + ); const closeButton = screen.queryByRole("button", { name: "common.ok" }); if (closeButton) { @@ -82,9 +85,12 @@ describe("Event Error Handling", () => { fireEvent.click(closeButton); }); - await waitFor(() => { - expect(screen.queryByRole("alert")).not.toBeInTheDocument(); - }); + await waitFor( + () => { + expect(screen.queryByRole("alert")).not.toBeInTheDocument(); + }, + { timeout: 5000 } + ); const afterCloseWarnCount = consoleWarnSpy.mock.calls.length; diff --git a/__test__/components/RepeatEvent.test.tsx b/__test__/components/RepeatEvent.test.tsx index 934d973..299215b 100644 --- a/__test__/components/RepeatEvent.test.tsx +++ b/__test__/components/RepeatEvent.test.tsx @@ -199,6 +199,8 @@ describe("RepeatEvent Component", () => { }); describe("Repeat Event Integration Tests", () => { + // Increase timeout for all tests in this describe block + jest.setTimeout(30000); beforeEach(() => { jest.clearAllMocks(); jest.restoreAllMocks(); diff --git a/__test__/components/ResponsiveDialog.test.tsx b/__test__/components/ResponsiveDialog.test.tsx index 54d2b37..c5f8315 100644 --- a/__test__/components/ResponsiveDialog.test.tsx +++ b/__test__/components/ResponsiveDialog.test.tsx @@ -1,19 +1,24 @@ import { fireEvent, render, screen } from "@testing-library/react"; import React from "react"; import { ResponsiveDialog } from "../../src/components/Dialog"; -import { Button, TextField } from "@mui/material"; +import { Button, TextField } from "@linagora/twake-mui"; +import { TwakeMuiThemeProvider } from "@linagora/twake-mui"; describe("ResponsiveDialog", () => { const mockOnClose = jest.fn(); const mockOnExpandToggle = jest.fn(); + const renderWithTheme = (ui: React.ReactElement) => { + return render({ui}); + }; + beforeEach(() => { mockOnClose.mockClear(); mockOnExpandToggle.mockClear(); }); it("renders in normal mode by default", () => { - render( + renderWithTheme( @@ -24,7 +29,7 @@ describe("ResponsiveDialog", () => { }); it("renders title in normal mode", () => { - render( + renderWithTheme( { }); it("renders back arrow in extended mode", () => { - render( + renderWithTheme( { }); it("calls onExpandToggle when back arrow is clicked", () => { - render( + renderWithTheme( { }); it("renders actions when provided", () => { - render( + renderWithTheme( { }); it("does not render actions when not provided", () => { - const { container } = render( + const { container } = renderWithTheme(
Content
@@ -102,7 +107,7 @@ describe("ResponsiveDialog", () => { }); it("calls onClose when backdrop is clicked", () => { - render( + renderWithTheme(
Content
@@ -117,7 +122,7 @@ describe("ResponsiveDialog", () => { }); it("applies custom normalMaxWidth", () => { - render( + renderWithTheme( { }); it("wraps children in Stack component", () => { - render( + renderWithTheme( @@ -144,7 +149,7 @@ describe("ResponsiveDialog", () => { }); it("uses correct spacing in normal mode", () => { - render( + renderWithTheme( { }); it("uses correct spacing in extended mode", () => { - render( + renderWithTheme( { }); it("applies contentSx custom styles", () => { - render( + renderWithTheme( { }); it("applies titleSx custom styles", () => { - const { container } = render( + const { container } = renderWithTheme( { }); it("shows dividers when dividers prop is true", () => { - render( + renderWithTheme( { }); it("does not show back arrow when onExpandToggle is not provided", () => { - render( + renderWithTheme( { }); it("accepts custom headerHeight", () => { - render( + renderWithTheme( { }); it("renders with custom expandedContentMaxWidth", () => { - render( + renderWithTheme( { }); it("does not render dialog content when open is false", () => { - render( + renderWithTheme(
Test Content
@@ -280,7 +285,7 @@ describe("ResponsiveDialog", () => { }); it("renders correctly in extended mode", () => { - render( + renderWithTheme( { }); it("renders expand and close icons in normal mode when showHeaderActions is true", () => { - render( + renderWithTheme( { }); it("does not render header icons when showHeaderActions is false", () => { - render( + renderWithTheme( { }); it("calls onClose when close icon is clicked", () => { - render( + renderWithTheme( { }); it("calls onExpandToggle when expand icon is clicked", () => { - render( + renderWithTheme( { preloadedState.calendars.list["667037022b752d0026472254/cal1"].events[ "event1" ]; - const expectedUrl = `test/mailto/?uri=mailto:john@test.com?subject=Test Event`; + const expectedUrl = `test/mailto/?uri=mailto:john@test.com?subject=Test%20Event`; + + expect(mockOpen).toHaveBeenCalledWith(expectedUrl); + }); + + it("message button encodes special characters in event title correctly", () => { + (window as any).MAIL_SPA_URL = "test"; + const mockOpen = jest.fn(); + window.open = mockOpen; + + const specialCharState = { + ...preloadedState, + calendars: { + ...preloadedState.calendars, + list: { + ...preloadedState.calendars.list, + "667037022b752d0026472254/cal1": { + ...preloadedState.calendars.list["667037022b752d0026472254/cal1"], + events: { + ...preloadedState.calendars.list["667037022b752d0026472254/cal1"] + .events, + eventWithSpecialChars: { + uid: "eventWithSpecialChars", + title: "Meeting & Discussion? #Important", + calId: "667037022b752d0026472254/cal1", + start: day.toISOString(), + end: day.toISOString(), + organizer: { cn: "test", cal_address: "test@test.com" }, + attendee: [ + { + cn: "test", + cal_address: "test@test.com", + partstat: "NEEDS-ACTION", + rsvp: "TRUE", + role: "REQ-PARTICIPANT", + cutype: "INDIVIDUAL", + }, + { + cn: "John", + cal_address: "john@test.com", + partstat: "NEEDS-ACTION", + rsvp: "TRUE", + role: "REQ-PARTICIPANT", + cutype: "INDIVIDUAL", + }, + ], + }, + }, + }, + }, + }, + }; + + renderWithProviders( + , + specialCharState + ); + + fireEvent.click(screen.getByTestId("MoreVertIcon")); + const emailButton = screen.getByRole("menuitem", { + name: "eventPreview.emailAttendees", + }); + expect(emailButton).toBeInTheDocument(); + + fireEvent.click(emailButton); + + const expectedUrl = `test/mailto/?uri=mailto:john@test.com?subject=Meeting%20%26%20Discussion%3F%20%23Important`; expect(mockOpen).toHaveBeenCalledWith(expectedUrl); }); @@ -1957,7 +2028,8 @@ describe("Helper functions", () => { it("stringAvatar returns correct props", () => { const result = stringAvatar("Alice"); expect(result.children).toBe("A"); - expect(result.style.backgroundColor).toMatch(/^#/); + expect(result.color).toBeDefined(); + expect(typeof result.color).toBe("string"); }); it("InfoRow renders text and link if url is valid", () => { diff --git a/__test__/features/Events/EventRepetition.test.tsx b/__test__/features/Events/EventRepetition.test.tsx index 22592e2..a9f6cef 100644 --- a/__test__/features/Events/EventRepetition.test.tsx +++ b/__test__/features/Events/EventRepetition.test.tsx @@ -296,7 +296,7 @@ describe("EventPreviewModal - Recurring Event Interactions", () => { await waitFor(() => { expect( - screen.getByText("editModeDialog.updateRecurrentEvent") + screen.getByText("editModeDialog.deleteRecurrentEvent") ).toBeInTheDocument(); }); }); @@ -381,7 +381,7 @@ describe("EventPreviewModal - Recurring Event Interactions", () => { }); expect( - screen.queryByText("editModeDialog.updateRecurrentEvent") + screen.queryByText("editModeDialog.deleteRecurrentEvent") ).not.toBeInTheDocument(); }); }); @@ -416,7 +416,7 @@ describe("Delete Recurring Event Instance", () => { await waitFor(() => { expect( - screen.getByText("editModeDialog.updateRecurrentEvent") + screen.getByText("editModeDialog.deleteRecurrentEvent") ).toBeInTheDocument(); }); @@ -463,7 +463,7 @@ describe("Delete Recurring Event Instance", () => { await waitFor(() => { expect( - screen.getByText("editModeDialog.updateRecurrentEvent") + screen.getByText("editModeDialog.deleteRecurrentEvent") ).toBeInTheDocument(); }); diff --git a/__test__/utils/Renderwithproviders.tsx b/__test__/utils/Renderwithproviders.tsx index 7d07c9b..fb13eb3 100644 --- a/__test__/utils/Renderwithproviders.tsx +++ b/__test__/utils/Renderwithproviders.tsx @@ -4,6 +4,7 @@ import React, { PropsWithChildren } from "react"; import { Provider } from "react-redux"; import { MemoryRouter } from "react-router-dom"; import { I18nContext } from "twake-i18n"; +import { TwakeMuiThemeProvider } from "@linagora/twake-mui"; import type { AppStore, RootState } from "../../src/app/store"; import { setupStore } from "../../src/app/store"; interface ExtendedRenderOptions extends Omit { @@ -21,28 +22,30 @@ export function renderWithProviders( const Wrapper = ({ children }: PropsWithChildren) => { return ( - ) => { - if (key === "locale") { - return "en"; - } - if (vars) { - const params = Object.entries(vars) - .map(([k, v]) => `${k}=${v}`) - .join(","); - return `${key}(${params})`; - } - return key; - }, - f: (date: Date, formatStr: string) => date.toString(), - lang: "en", - }} - > - - {children} - - + + ) => { + if (key === "locale") { + return "en"; + } + if (vars) { + const params = Object.entries(vars) + .map(([k, v]) => `${k}=${v}`) + .join(","); + return `${key}(${params})`; + } + return key; + }, + f: (date: Date, formatStr: string) => date.toString(), + lang: "en", + }} + > + + {children} + + + ); }; diff --git a/jest.config.ts b/jest.config.ts index ccc83c1..f8c2024 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -23,6 +23,7 @@ const config: Config = { ], testEnvironment: "jsdom", testMatch: ["**/*.test.tsx"], + testTimeout: 15000, transform: { "^.+\\.tsx?$": ["ts-jest", { tsconfig: "tsconfig.json" }], "^.+\\.(js|jsx|mjs)$": "babel-jest", @@ -37,7 +38,11 @@ const config: Config = { "/node_modules/(?!(preact|@fullcalendar|react-calendar|get-user-locale|memoize|mimic-function|@wojtekmaj|ky|cozy-ui)/)", ], - moduleNameMapper: { "^preact(/(.*)|$)": "preact$1" }, + moduleNameMapper: { + "^preact(/(.*)|$)": "preact$1", + "^react$": "/node_modules/react", + "^react-dom$": "/node_modules/react-dom", + }, setupFilesAfterEnv: ["/src/setupTests.ts"], }, { @@ -55,6 +60,7 @@ const config: Config = { ], testEnvironment: "node", testMatch: ["**/*.test.ts"], + testTimeout: 15000, transform: { "^.+\\.tsx?$": ["ts-jest", { tsconfig: "tsconfig.json" }], "^.+\\.(js|jsx|mjs)$": "babel-jest", diff --git a/package-lock.json b/package-lock.json index 8052938..4380626 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "@fullcalendar/moment-timezone": "^6.1.19", "@fullcalendar/react": "^6.1.17", "@fullcalendar/timegrid": "^6.1.17", + "@linagora/twake-mui": "1.1.1", "@mui/icons-material": "^7.1.2", "@mui/material": "^7.1.2", "@mui/x-date-pickers": "^8.14.0", @@ -71,12 +72,45 @@ "jest-preview": "^0.3.1", "prettier": "^3.6.2", "ts-jest": "^29.4.6", + "ts-node": "^10.9.2", "typescript": "^4.9.5" }, "engines": { "node": "24.x" } }, + "../twake-ui/packages/twake-mui": { + "name": "@linagora/twake-mui", + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.3.26", + "@types/react-dom": "^18.3.7", + "typescript": "^4.9.5" + }, + "engines": { + "node": "24.x" + }, + "peerDependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.1", + "@mui/material": "^7.1.2", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": false + }, + "react-dom": { + "optional": false + } + } + }, "node_modules/@adobe/css-tools": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", @@ -135,7 +169,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -1958,6 +1991,28 @@ "dev": true, "license": "MIT" }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@csstools/color-helpers": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", @@ -2046,7 +2101,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -2070,7 +2124,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -2173,7 +2226,6 @@ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -2217,7 +2269,6 @@ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -2449,9 +2500,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", "dev": true, "license": "MIT", "engines": { @@ -2486,73 +2537,72 @@ } }, "node_modules/@fullcalendar/core": { - "version": "6.1.19", - "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.19.tgz", - "integrity": "sha512-z0aVlO5e4Wah6p6mouM0UEqtRf1MZZPt4mwzEyU6kusaNL+dlWQgAasF2cK23hwT4cmxkEmr4inULXgpyeExdQ==", + "version": "6.1.20", + "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.20.tgz", + "integrity": "sha512-1cukXLlePFiJ8YKXn/4tMKsy0etxYLCkXk8nUCFi11nRONF2Ba2CD5b21/ovtOO2tL6afTJfwmc1ed3HG7eB1g==", "license": "MIT", - "peer": true, "dependencies": { "preact": "~10.12.1" } }, "node_modules/@fullcalendar/daygrid": { - "version": "6.1.19", - "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.19.tgz", - "integrity": "sha512-IAAfnMICnVWPjpT4zi87i3FEw0xxSza0avqY/HedKEz+l5MTBYvCDPOWDATpzXoLut3aACsjktIyw9thvIcRYQ==", + "version": "6.1.20", + "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.20.tgz", + "integrity": "sha512-AO9vqhkLP77EesmJzuU+IGXgxNulsA8mgQHynclJ8U70vSwAVnbcLG9qftiTAFSlZjiY/NvhE7sflve6cJelyQ==", "license": "MIT", "peerDependencies": { - "@fullcalendar/core": "~6.1.19" + "@fullcalendar/core": "~6.1.20" } }, "node_modules/@fullcalendar/interaction": { - "version": "6.1.19", - "resolved": "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-6.1.19.tgz", - "integrity": "sha512-GOciy79xe8JMVp+1evAU3ytdwN/7tv35t5i1vFkifiuWcQMLC/JnLg/RA2s4sYmQwoYhTw/p4GLcP0gO5B3X5w==", + "version": "6.1.20", + "resolved": "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-6.1.20.tgz", + "integrity": "sha512-p6txmc5txL0bMiPaJxe2ip6o0T384TyoD2KGdsU6UjZ5yoBlaY+dg7kxfnYKpYMzEJLG58n+URrHr2PgNL2fyA==", "license": "MIT", "peerDependencies": { - "@fullcalendar/core": "~6.1.19" + "@fullcalendar/core": "~6.1.20" } }, "node_modules/@fullcalendar/list": { - "version": "6.1.19", - "resolved": "https://registry.npmjs.org/@fullcalendar/list/-/list-6.1.19.tgz", - "integrity": "sha512-knZHpAVF0LbzZpSJSUmLUUzF0XlU/MRGK+Py2s0/mP93bCtno1k2L3XPs/kzh528hSjehwLm89RgKTSfW1P6cA==", + "version": "6.1.20", + "resolved": "https://registry.npmjs.org/@fullcalendar/list/-/list-6.1.20.tgz", + "integrity": "sha512-7Hzkbb7uuSqrXwTyD0Ld/7SwWNxPD6SlU548vtkIpH55rZ4qquwtwYdMPgorHos5OynHA4OUrZNcH51CjrCf2g==", "license": "MIT", "peerDependencies": { - "@fullcalendar/core": "~6.1.19" + "@fullcalendar/core": "~6.1.20" } }, "node_modules/@fullcalendar/moment-timezone": { - "version": "6.1.19", - "resolved": "https://registry.npmjs.org/@fullcalendar/moment-timezone/-/moment-timezone-6.1.19.tgz", - "integrity": "sha512-6UOhMThdzDnh10/SPW5t5zmNq+betGebK3i7ytg2EHzlEb2EztfHJC5mbqEU2B2AoKNr2FUIonWuergYe7OVhA==", + "version": "6.1.20", + "resolved": "https://registry.npmjs.org/@fullcalendar/moment-timezone/-/moment-timezone-6.1.20.tgz", + "integrity": "sha512-fGk3bQU4hf0rgw3Zd/PH6Ok0Db+s9/nsuALj3IG8GYFqInwLsHZI0Qc+ljN8jv9LrLS5sOBBOZHWDg2ncx1inw==", "license": "MIT", "peerDependencies": { - "@fullcalendar/core": "~6.1.19", + "@fullcalendar/core": "~6.1.20", "moment-timezone": "^0.5.40" } }, "node_modules/@fullcalendar/react": { - "version": "6.1.19", - "resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.19.tgz", - "integrity": "sha512-FP78vnyylaL/btZeHig8LQgfHgfwxLaIG6sKbNkzkPkKEACv11UyyBoTSkaavPsHtXvAkcTED1l7TOunAyPEnA==", + "version": "6.1.20", + "resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.20.tgz", + "integrity": "sha512-1w0pZtceaUdfAnxMSCGHCQalhi+mR1jOe76sXzyAXpcPz/Lf0zHSdcGK/U2XpZlnQgQtBZW+d+QBnnzVQKCxAA==", "license": "MIT", "peerDependencies": { - "@fullcalendar/core": "~6.1.19", + "@fullcalendar/core": "~6.1.20", "react": "^16.7.0 || ^17 || ^18 || ^19", "react-dom": "^16.7.0 || ^17 || ^18 || ^19" } }, "node_modules/@fullcalendar/timegrid": { - "version": "6.1.19", - "resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-6.1.19.tgz", - "integrity": "sha512-OuzpUueyO9wB5OZ8rs7TWIoqvu4v3yEqdDxZ2VcsMldCpYJRiOe7yHWKr4ap5Tb0fs7Rjbserc/b6Nt7ol6BRg==", + "version": "6.1.20", + "resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-6.1.20.tgz", + "integrity": "sha512-4H+/MWbz3ntA50lrPif+7TsvMeX3R1GSYjiLULz0+zEJ7/Yfd9pupZmAwUs/PBpA6aAcFmeRr0laWfcz1a9V1A==", "license": "MIT", "dependencies": { - "@fullcalendar/daygrid": "~6.1.19" + "@fullcalendar/daygrid": "~6.1.20" }, "peerDependencies": { - "@fullcalendar/core": "~6.1.19" + "@fullcalendar/core": "~6.1.20" } }, "node_modules/@humanfs/core": { @@ -3113,6 +3163,10 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@linagora/twake-mui": { + "resolved": "../twake-ui/packages/twake-mui", + "link": true + }, "node_modules/@module-federation/error-codes": { "version": "0.21.6", "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.21.6.tgz", @@ -3213,7 +3267,6 @@ "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.6.tgz", "integrity": "sha512-R4DaYF3dgCQCUAkr4wW1w26GHXcf5rCmBRHVBuuvJvaGLmZdD8EjatP80Nz5JCw0KxORAzwftnHzXVnjR8HnFw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.28.4", "@mui/core-downloads-tracker": "^7.3.6", @@ -3324,7 +3377,6 @@ "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.6.tgz", "integrity": "sha512-8fehAazkHNP1imMrdD2m2hbA9sl7Ur6jfuNweh5o4l9YPty4iaZzRXqYvBCWQNwFaSHmMEj2KPbyXGp7Bt73Rg==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.28.4", "@mui/private-theming": "^7.3.6", @@ -3408,14 +3460,14 @@ } }, "node_modules/@mui/x-date-pickers": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-8.21.0.tgz", - "integrity": "sha512-nQ6T6RIHTO7AcUlh7+mICcbwcTOlu+GSSrBsF1Z6pdqbMaxxucABRW3cnC8PdYrSok4+zkkSdTzgKOSCGW+c1g==", + "version": "8.23.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-8.23.0.tgz", + "integrity": "sha512-uKtam5wqMEuErmRxZLPEX/7CZZFTMfrl05V9cWNjBkpGTcdDBIs1Kba8z2pfQU93e9lSLrRlxbCMJzCu6iF0Rg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.28.4", "@mui/utils": "^7.3.5", - "@mui/x-internals": "8.21.0", + "@mui/x-internals": "8.23.0", "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", "prop-types": "^15.8.1", @@ -3474,9 +3526,9 @@ } }, "node_modules/@mui/x-internals": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.21.0.tgz", - "integrity": "sha512-tOU6iKi9phIQXWVzQvslKR/y5q+L/NKiBpSqtTDMV7aAxm2mOtCiO6POH2je1nw8iromrQAJfpV9pXDDRgZ01w==", + "version": "8.23.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.23.0.tgz", + "integrity": "sha512-FN7wdqwTxqq1tJBYVz8TA/HMcViuaHS0Jphr4pEjT/8Iuf94Yt3P82WbsTbXyYrgOQDQl07UqE7qWcJetRcHcg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.28.4", @@ -3643,9 +3695,9 @@ } }, "node_modules/@reduxjs/toolkit": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.11.1.tgz", - "integrity": "sha512-HjhlEREguAyBTGNzRlGNiDHGQ2EjLSPWwdhhpoEqHYy8hWak3Dp6/fU72OfqVsiMb8S6rbfPsWUF24fxpilrVA==", + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.11.2.tgz", + "integrity": "sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==", "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", @@ -3678,14 +3730,13 @@ } }, "node_modules/@rsbuild/core": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.6.13.tgz", - "integrity": "sha512-7Isd9G6ufIK5+kPCH8OhvVAVD5clsak9bp9IfhyEWT8SH43cLuXsUpK+4w0a6JA/kM98ea7KJEigIuCHJ5wAag==", + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.6.15.tgz", + "integrity": "sha512-LvoOF53PL6zXgdzEhgnnP51S4FseDFH1bHrobK4EK6zZX/tN8qgf5tdlmN7h4OkMv/Qs1oUfvj0QcLWSstnnvA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@rspack/core": "1.6.6", + "@rspack/core": "1.6.8", "@rspack/lite-tapable": "~1.1.0", "@swc/helpers": "^0.5.17", "core-js": "~3.47.0", @@ -3747,28 +3798,28 @@ } }, "node_modules/@rspack/binding": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.6.6.tgz", - "integrity": "sha512-noiV+qhyBTVpvG2M4bnOwKk2Ynl6G47Wf7wpCjPCFr87qr3txNwTTnhkEJEU59yj+VvIhbRD2rf5+9TLoT0Wxg==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.6.8.tgz", + "integrity": "sha512-lUeL4mbwGo+nqRKqFDCm9vH2jv9FNMVt1X8jqayWRcOCPlj/2UVMEFgqjR7Pp2vlvnTKq//31KbDBJmDZq31RQ==", "dev": true, "license": "MIT", "optionalDependencies": { - "@rspack/binding-darwin-arm64": "1.6.6", - "@rspack/binding-darwin-x64": "1.6.6", - "@rspack/binding-linux-arm64-gnu": "1.6.6", - "@rspack/binding-linux-arm64-musl": "1.6.6", - "@rspack/binding-linux-x64-gnu": "1.6.6", - "@rspack/binding-linux-x64-musl": "1.6.6", - "@rspack/binding-wasm32-wasi": "1.6.6", - "@rspack/binding-win32-arm64-msvc": "1.6.6", - "@rspack/binding-win32-ia32-msvc": "1.6.6", - "@rspack/binding-win32-x64-msvc": "1.6.6" + "@rspack/binding-darwin-arm64": "1.6.8", + "@rspack/binding-darwin-x64": "1.6.8", + "@rspack/binding-linux-arm64-gnu": "1.6.8", + "@rspack/binding-linux-arm64-musl": "1.6.8", + "@rspack/binding-linux-x64-gnu": "1.6.8", + "@rspack/binding-linux-x64-musl": "1.6.8", + "@rspack/binding-wasm32-wasi": "1.6.8", + "@rspack/binding-win32-arm64-msvc": "1.6.8", + "@rspack/binding-win32-ia32-msvc": "1.6.8", + "@rspack/binding-win32-x64-msvc": "1.6.8" } }, "node_modules/@rspack/binding-darwin-arm64": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.6.6.tgz", - "integrity": "sha512-vGVDP0rlWa2w/gLba/sncVfkCah0HmhdmK5vGj/7sSX0iViwQneA2xjxDHyCNSQrvfq9GJmj4Kmdq/9tGh0KuA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.6.8.tgz", + "integrity": "sha512-e8CTQtzaeGnf+BIzR7wRMUwKfIg0jd/sxMRc1Vd0bCMHBhSN9EsGoMuJJaKeRrSmy2nwMCNWHIG+TvT1CEKg+A==", "cpu": [ "arm64" ], @@ -3780,9 +3831,9 @@ ] }, "node_modules/@rspack/binding-darwin-x64": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.6.6.tgz", - "integrity": "sha512-IcdEG2kOmbPPO70Zl7gDnowDjK7d7C1hWew2vU7dPltr2t1JalRIMnS051lhiur0ULkSxV3cW1zXqv0Oi8AnOg==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.6.8.tgz", + "integrity": "sha512-ku1XpTEPt6Za11zhpFWhfwrTQogcgi9RJrOUVC4FESiPO9aKyd4hJ+JiPgLY0MZOqsptK6vEAgOip+uDVXrCpg==", "cpu": [ "x64" ], @@ -3794,9 +3845,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.6.6.tgz", - "integrity": "sha512-rIguCCtlTcwoFlwheDiUgdImk27spuCRn43zGJogARpM/ZYRFKIuSwFDGUtJT2g0TSLUAHUhWAUqC36NwvrbMQ==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.6.8.tgz", + "integrity": "sha512-fvZX6xZPvBT8qipSpvkKMX5M7yd2BSpZNCZXcefw6gA3uC7LI3gu+er0LrDXY1PtPzVuHTyDx+abwWpagV3PiQ==", "cpu": [ "arm64" ], @@ -3808,9 +3859,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.6.6.tgz", - "integrity": "sha512-x6X6Gr0fUw6qrJGxZt3Rb6oIX+jd9pdcyp0VbtofcLaqGVQbzustYsYnuLATPOys0q4J/4kWnmEhkjLJHwkhpQ==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.6.8.tgz", + "integrity": "sha512-++XMKcMNrt59HcFBLnRaJcn70k3X0GwkAegZBVpel8xYIAgvoXT5+L8P1ExId/yTFxqedaz8DbcxQnNmMozviw==", "cpu": [ "arm64" ], @@ -3822,9 +3873,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.6.6.tgz", - "integrity": "sha512-gSlVdASszWHosQKn+nzYOInBijdQboUnmNMGgW9/PijVg3433IvQjzviUuJFno8CMGgrACV9yw+ZFDuK0J57VA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.6.8.tgz", + "integrity": "sha512-tv3BWkTE1TndfX+DsE1rSTg8fBevCxujNZ3MlfZ22Wfy9x1FMXTJlWG8VIOXmaaJ1wUHzv8S7cE2YUUJ2LuiCg==", "cpu": [ "x64" ], @@ -3836,9 +3887,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-musl": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.6.6.tgz", - "integrity": "sha512-TZaqVkh7memsTK/hxkOBrbpdzbmBUMea1YnYt++7QjMgco1kWFvAQ+YhAWtIaOaEg8s6C07Lt0Zp8izM2Dja0g==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.6.8.tgz", + "integrity": "sha512-DCGgZ5/in1O3FjHWqXnDsncRy+48cMhfuUAAUyl0yDj1NpsZu9pP+xfGLvGcQTiYrVl7IH9Aojf1eShP/77WGA==", "cpu": [ "x64" ], @@ -3850,9 +3901,9 @@ ] }, "node_modules/@rspack/binding-wasm32-wasi": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.6.6.tgz", - "integrity": "sha512-W4mWdlLnYrbUaktyHOGNfATblxMTbgF7CBfDw8PhbDtjd2l8e/TnaHgIDkwITHXAOMEF/QEKfo9FtusbcQJNKw==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.6.8.tgz", + "integrity": "sha512-VUwdhl/lI4m6o1OGCZ9JwtMjTV/yLY5VZTQdEPKb40JMTlmZ5MBlr5xk7ByaXXYHr6I+qnqEm73iMKQvg6iknw==", "cpu": [ "wasm32" ], @@ -3864,9 +3915,9 @@ } }, "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.6.6.tgz", - "integrity": "sha512-cw5OgxqoDwjoZlk0L3vGEwcjPZsOVFYLwr2ssiC05rsTbhBwxj8coLpAJdvUvbf6C2TTmCB7iPe2sPq1KWD37g==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.6.8.tgz", + "integrity": "sha512-23YX7zlOZlub+nPGDBUzktb4D5D6ETUAluKjXEeHIZ9m7fSlEYBnGL66YE+3t1DHXGd0OqsdwlvrNGcyo6EXDQ==", "cpu": [ "arm64" ], @@ -3878,9 +3929,9 @@ ] }, "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.6.6.tgz", - "integrity": "sha512-M4ruR+VZ59iy+mPjy6FQPT27cOgeytf3wFBrt7e0suKeNLYGxrNyI9YhgpCTY++SMJsAMgRLGDHoI3ZgWulw1Q==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.6.8.tgz", + "integrity": "sha512-cFgRE3APxrY4AEdooVk2LtipwNNT/9mrnjdC5lVbsIsz+SxvGbZR231bxDJEqP15+RJOaD07FO1sIjINFqXMEg==", "cpu": [ "ia32" ], @@ -3892,9 +3943,9 @@ ] }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.6.6.tgz", - "integrity": "sha512-q5QTvdhPUh+CA93cQG5zWKRIHMIWPzw+ftFDEwBw52zYdvNAoLniqD8o5Mi8CT0pndhulXgR5aw0Sjd3eMah+A==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.6.8.tgz", + "integrity": "sha512-cIuhVsZYd3o3Neo1JSAhJYw6BDvlxaBoqvgwRkG1rs0ExFmEmgYyG7ip9pFKnKNWph/tmW3rDYypmEfjs1is7g==", "cpu": [ "x64" ], @@ -3906,15 +3957,14 @@ ] }, "node_modules/@rspack/core": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.6.6.tgz", - "integrity": "sha512-2mR+2YBydlgZ7Q0Rpd6bCC3MBnV9TS0x857K0zIhbDj4BQOqaWVy1n7fx/B3MrS8TR0QCuzKfyDAjNz+XTyJVQ==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.6.8.tgz", + "integrity": "sha512-FolcIAH5FW4J2FET+qwjd1kNeFbCkd0VLuIHO0thyolEjaPSxw5qxG67DA7BZGm6PVcoiSgPLks1DL6eZ8c+fA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@module-federation/runtime-tools": "0.21.6", - "@rspack/binding": "1.6.6", + "@rspack/binding": "1.6.8", "@rspack/lite-tapable": "1.1.0" }, "engines": { @@ -3964,9 +4014,9 @@ "license": "MIT" }, "node_modules/@sinclair/typebox": { - "version": "0.34.41", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", - "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", + "version": "0.34.45", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.45.tgz", + "integrity": "sha512-qJcFVfCa5jxBFSuv7S5WYbA8XdeCPmhnaVVfX/2Y6L8WYg8sk3XY2+6W0zH+3mq1Cz+YC7Ki66HfqX6IHAwnkg==", "dev": true, "license": "MIT" }, @@ -3991,9 +4041,9 @@ } }, "node_modules/@standard-schema/spec": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", - "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "license": "MIT" }, "node_modules/@standard-schema/utils": { @@ -4171,7 +4221,6 @@ "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -4251,12 +4300,11 @@ } }, "node_modules/@swc/helpers": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", - "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "version": "0.5.18", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.18.tgz", + "integrity": "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.8.0" } @@ -4267,7 +4315,6 @@ "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -4310,9 +4357,9 @@ "license": "MIT" }, "node_modules/@testing-library/react": { - "version": "16.3.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz", - "integrity": "sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.1.tgz", + "integrity": "sha512-gr4KtAWqIOQoucWYD/f6ki+j5chXfcPc74Col/6poTyqTmn7zRmodWahWRCp8tYd+GMqBonw6hstNzqjbs6gjw==", "dev": true, "license": "MIT", "dependencies": { @@ -4364,6 +4411,30 @@ "node": ">=10.13.0" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", @@ -4534,9 +4605,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.19.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.25.tgz", - "integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==", + "version": "20.19.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", + "integrity": "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==", "dev": true, "license": "MIT", "dependencies": { @@ -4560,7 +4631,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz", "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==", "license": "MIT", - "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" @@ -4572,7 +4642,6 @@ "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^18.0.0" } @@ -4624,22 +4693,20 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.1.tgz", - "integrity": "sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.51.0.tgz", + "integrity": "sha512-XtssGWJvypyM2ytBnSnKtHYOGT+4ZwTnBVl36TA4nRO2f4PRNGz5/1OszHzcZCvcBMh+qb7I06uoCmLTRdR9og==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.48.1", - "@typescript-eslint/type-utils": "8.48.1", - "@typescript-eslint/utils": "8.48.1", - "@typescript-eslint/visitor-keys": "8.48.1", - "graphemer": "^1.4.0", + "@typescript-eslint/scope-manager": "8.51.0", + "@typescript-eslint/type-utils": "8.51.0", + "@typescript-eslint/utils": "8.51.0", + "@typescript-eslint/visitor-keys": "8.51.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4649,23 +4716,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.48.1", + "@typescript-eslint/parser": "^8.51.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.48.1.tgz", - "integrity": "sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.51.0.tgz", + "integrity": "sha512-3xP4XzzDNQOIqBMWogftkwxhg5oMKApqY0BAflmLZiFYHqyhSOxv/cd/zPQLTcCXr4AkaKb25joocY0BD1WC6A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.48.1", - "@typescript-eslint/types": "8.48.1", - "@typescript-eslint/typescript-estree": "8.48.1", - "@typescript-eslint/visitor-keys": "8.48.1", + "@typescript-eslint/scope-manager": "8.51.0", + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/typescript-estree": "8.51.0", + "@typescript-eslint/visitor-keys": "8.51.0", "debug": "^4.3.4" }, "engines": { @@ -4681,14 +4747,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.48.1.tgz", - "integrity": "sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.51.0.tgz", + "integrity": "sha512-Luv/GafO07Z7HpiI7qeEW5NW8HUtZI/fo/kE0YbtQEFpJRUuR0ajcWfCE5bnMvL7QQFrmT/odMe8QZww8X2nfQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.48.1", - "@typescript-eslint/types": "^8.48.1", + "@typescript-eslint/tsconfig-utils": "^8.51.0", + "@typescript-eslint/types": "^8.51.0", "debug": "^4.3.4" }, "engines": { @@ -4703,14 +4769,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.1.tgz", - "integrity": "sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.51.0.tgz", + "integrity": "sha512-JhhJDVwsSx4hiOEQPeajGhCWgBMBwVkxC/Pet53EpBVs7zHHtayKefw1jtPaNRXpI9RA2uocdmpdfE7T+NrizA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.48.1", - "@typescript-eslint/visitor-keys": "8.48.1" + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/visitor-keys": "8.51.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4721,9 +4787,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.1.tgz", - "integrity": "sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.51.0.tgz", + "integrity": "sha512-Qi5bSy/vuHeWyir2C8u/uqGMIlIDu8fuiYWv48ZGlZ/k+PRPHtaAu7erpc7p5bzw2WNNSniuxoMSO4Ar6V9OXw==", "dev": true, "license": "MIT", "engines": { @@ -4738,17 +4804,17 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.48.1.tgz", - "integrity": "sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.51.0.tgz", + "integrity": "sha512-0XVtYzxnobc9K0VU7wRWg1yiUrw4oQzexCG2V2IDxxCxhqBMSMbjB+6o91A+Uc0GWtgjCa3Y8bi7hwI0Tu4n5Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.48.1", - "@typescript-eslint/typescript-estree": "8.48.1", - "@typescript-eslint/utils": "8.48.1", + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/typescript-estree": "8.51.0", + "@typescript-eslint/utils": "8.51.0", "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4763,9 +4829,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.48.1.tgz", - "integrity": "sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.51.0.tgz", + "integrity": "sha512-TizAvWYFM6sSscmEakjY3sPqGwxZRSywSsPEiuZF6d5GmGD9Gvlsv0f6N8FvAAA0CD06l3rIcWNbsN1e5F/9Ag==", "dev": true, "license": "MIT", "engines": { @@ -4777,21 +4843,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.1.tgz", - "integrity": "sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.51.0.tgz", + "integrity": "sha512-1qNjGqFRmlq0VW5iVlcyHBbCjPB7y6SxpBkrbhNWMy/65ZoncXCEPJxkRZL8McrseNH6lFhaxCIaX+vBuFnRng==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.48.1", - "@typescript-eslint/tsconfig-utils": "8.48.1", - "@typescript-eslint/types": "8.48.1", - "@typescript-eslint/visitor-keys": "8.48.1", + "@typescript-eslint/project-service": "8.51.0", + "@typescript-eslint/tsconfig-utils": "8.51.0", + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/visitor-keys": "8.51.0", "debug": "^4.3.4", "minimatch": "^9.0.4", "semver": "^7.6.0", "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4818,16 +4884,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.48.1.tgz", - "integrity": "sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.51.0.tgz", + "integrity": "sha512-11rZYxSe0zabiKaCP2QAwRf/dnmgFgvTmeDTtZvUvXG3UuAdg/GU02NExmmIXzz3vLGgMdtrIosI84jITQOxUA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.48.1", - "@typescript-eslint/types": "8.48.1", - "@typescript-eslint/typescript-estree": "8.48.1" + "@typescript-eslint/scope-manager": "8.51.0", + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/typescript-estree": "8.51.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4842,13 +4908,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.1.tgz", - "integrity": "sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.51.0.tgz", + "integrity": "sha512-mM/JRQOzhVN1ykejrvwnBRV3+7yTKK8tVANVN3o1O0t0v7o+jqdVu9crPy5Y9dov15TJk/FTIgoUGHrTOVL3Zg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/types": "8.51.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -5167,7 +5233,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5185,6 +5250,18 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", @@ -5313,6 +5390,12 @@ "node": ">= 8" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -5719,9 +5802,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.5", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.5.tgz", - "integrity": "sha512-D5vIoztZOq1XM54LUdttJVc96ggEsIfju2JBvht06pSzpckp3C7HReun67Bghzrtdsq9XdMGbSSB3v3GhMNmAA==", + "version": "2.9.11", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", + "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5909,7 +5992,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -6024,9 +6106,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001759", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz", - "integrity": "sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==", + "version": "1.0.30001762", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", + "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", "dev": true, "funding": [ { @@ -6420,6 +6502,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -6615,7 +6703,6 @@ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.21.0" }, @@ -6631,8 +6718,7 @@ "version": "1.11.19", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/debug": { "version": "4.4.3", @@ -6659,9 +6745,9 @@ "license": "MIT" }, "node_modules/dedent": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", - "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz", + "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -6774,6 +6860,15 @@ "node": ">=8" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -6932,9 +7027,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.266", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.266.tgz", - "integrity": "sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg==", + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", "dev": true, "license": "ISC" }, @@ -7001,9 +7096,9 @@ } }, "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", "dev": true, "license": "MIT", "dependencies": { @@ -7088,27 +7183,27 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz", + "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", + "es-abstract": "^1.24.1", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", + "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", + "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", + "iterator.prototype": "^1.1.5", "safe-array-concat": "^1.1.3" }, "engines": { @@ -7217,12 +7312,11 @@ } }, "node_modules/eslint": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -7230,7 +7324,7 @@ "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.1", + "@eslint/js": "9.39.2", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -7412,9 +7506,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.2.1.tgz", - "integrity": "sha512-0WLIezrIxitUGbjMIGwznVzSIp0uFJV0PZ2fiSvpyVcxe+QMXKUt7MRhUpzdbctnnLwiOTOFkACplgB0wAglFw==", + "version": "29.11.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.11.2.tgz", + "integrity": "sha512-ISlgFckxC8Pon9/3gD2Cosbt9qA9VmrNobI6aGHfimklCOuPR5uftI413YBwa2rqLWy+VHDlx5je/6elPUMLlg==", "dev": true, "license": "MIT", "dependencies": { @@ -7913,9 +8007,9 @@ "license": "MIT" }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, "license": "ISC", "dependencies": { @@ -8432,13 +8526,6 @@ "dev": true, "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", @@ -8584,7 +8671,6 @@ "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.7.6" } @@ -8758,9 +8844,9 @@ } }, "node_modules/immer": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-11.0.1.tgz", - "integrity": "sha512-naDCyggtcBWANtIrjQEajhhBEuL9b0Zg4zmlWK2CzS6xCWSE39/vvf4LqnMjUAWHBhot4m9MHCM/Z+mfWhUkiA==", + "version": "11.1.3", + "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.3.tgz", + "integrity": "sha512-6jQTc5z0KJFtr1UgFpIL3N9XSC3saRaI9PwWtzM2pSqkNGtiNkYY2OSwkOGDK2XcTRcLb1pi/aNkKZz0nxVH4Q==", "license": "MIT", "funding": { "type": "opencollective", @@ -9559,7 +9645,6 @@ "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/core": "30.2.0", "@jest/types": "30.2.0", @@ -10158,28 +10243,27 @@ } }, "node_modules/jest-preview": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/jest-preview/-/jest-preview-0.3.2.tgz", - "integrity": "sha512-IraA3kvh0YjOr5EqosSbiH64er8Oz0F7YFqxbMJWLbASzApyGn1yct46YoAWhL2EHna4hPUqNn+6+JU3++XtBw==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/jest-preview/-/jest-preview-0.3.3.tgz", + "integrity": "sha512-0Jq6AKt/UyY4Ox0A5WBaCsz0yeT4LuTd/KpZRm/ivyEjPtDjQDFdkJ66Kk115Ijd6vrbNurMgOMUvbB4jazuLA==", "dev": true, - "hasInstallScript": true, "license": "MIT", "dependencies": { - "@svgr/core": "^6.2.1", + "@svgr/core": "^6.5.1", "camelcase": "^6.3.0", "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "commander": "^9.2.0", + "chokidar": "^3.6.0", + "commander": "^9.5.0", "connect": "^3.7.0", "find-node-modules": "^2.1.3", - "open": "^8.4.0", + "open": "^8.4.2", "postcss-import": "^14.1.0", - "postcss-load-config": "^4.0.1", - "sirv": "^2.0.2", + "postcss-load-config": "^4.0.2", + "sirv": "^2.0.4", "slash": "^3.0.0", "string-hash": "^1.1.3", "update-notifier": "^7.3.1", - "ws": "^8.5.0" + "ws": "^8.18.1" }, "bin": { "jest-preview": "dist/cli/index.js" @@ -10324,7 +10408,6 @@ "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "^7.19.6", "@svgr/babel-preset": "^6.5.1", @@ -10783,7 +10866,6 @@ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -10897,9 +10979,9 @@ } }, "node_modules/ky": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.1.tgz", - "integrity": "sha512-hYje4L9JCmpEQBtudo+v52X5X8tgWXUYyPcxKSuxQNboqufecl9VMWjGiucAFH060AwPXHZuH+WB2rrqfkmafw==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.2.tgz", + "integrity": "sha512-q3RBbsO5A5zrPhB6CaCS8ZUv+NWCXv6JJT4Em0i264G9W0fdPB8YRfnnEi7Dm7X7omAkBIPojzYJ2D1oHTHqug==", "license": "MIT", "engines": { "node": ">=18" @@ -11220,7 +11302,6 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "license": "MIT", - "peer": true, "engines": { "node": "*" } @@ -11230,7 +11311,6 @@ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.48.tgz", "integrity": "sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==", "license": "MIT", - "peer": true, "dependencies": { "moment": "^2.29.4" }, @@ -11266,6 +11346,7 @@ } ], "license": "MIT", + "peer": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -12202,7 +12283,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -12225,7 +12305,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -12235,9 +12314,9 @@ } }, "node_modules/react-is": { - "version": "19.2.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.1.tgz", - "integrity": "sha512-L7BnWgRbMwzMAubQcS7sXdPdNLmKlucPlopgAzx7FtYbksWZgEWiuYM5x9T6UqS2Ne0rsgQTq5kY2SGqpzUkYA==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.3.tgz", + "integrity": "sha512-qJNJfu81ByyabuG7hPFEbXqNcWSU3+eVus+KJs+0ncpGfMyYdvSmxiJxbWR65lYi1I+/0HBcliO029gc4F+PnA==", "license": "MIT" }, "node_modules/react-redux": { @@ -12245,7 +12324,6 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", "license": "MIT", - "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -12270,7 +12348,6 @@ "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -12371,8 +12448,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/redux-first-history": { "version": "5.2.0", @@ -13599,7 +13675,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -13684,9 +13759,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.3.0.tgz", + "integrity": "sha512-6eg3Y9SF7SsAvGzRHQvvc1skDAhwI4YQ32ui1scxD1Ccr0G5qIIbUBT3pFTKX8kmWIQClHobtUdNuaBgwdfdWg==", "dev": true, "license": "MIT", "engines": { @@ -13775,6 +13850,49 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -13953,7 +14071,6 @@ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14092,9 +14209,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz", - "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -14202,6 +14319,12 @@ "node": ">= 0.4.0" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, "node_modules/v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", @@ -14269,6 +14392,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", "dev": true, "license": "MIT", "dependencies": { @@ -14727,6 +14851,15 @@ "node": ">=8" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -14741,12 +14874,11 @@ } }, "node_modules/zod": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", - "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.2.1.tgz", + "integrity": "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 37378a3..2e47625 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "@fullcalendar/moment-timezone": "^6.1.19", "@fullcalendar/react": "^6.1.17", "@fullcalendar/timegrid": "^6.1.17", + "@linagora/twake-mui": "1.1.1", "@mui/icons-material": "^7.1.2", "@mui/material": "^7.1.2", "@mui/x-date-pickers": "^8.14.0", @@ -89,6 +90,7 @@ "jest-preview": "^0.3.1", "prettier": "^3.6.2", "ts-jest": "^29.4.6", + "ts-node": "^10.9.2", "typescript": "^4.9.5" } } diff --git a/rsbuild.config.ts b/rsbuild.config.ts index 636c627..71c1992 100644 --- a/rsbuild.config.ts +++ b/rsbuild.config.ts @@ -23,4 +23,10 @@ export default defineConfig({ }, minify: false, }, + resolve: { + alias: { + react: require.resolve("react"), + "react-dom": require.resolve("react-dom"), + }, + }, }); diff --git a/src/App.tsx b/src/App.tsx index 1ac8242..4ba7509 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -8,7 +8,7 @@ import { Loading } from "./components/Loading/Loading"; import HandleLogin from "./features/User/HandleLogin"; import CalendarLayout from "./components/Calendar/CalendarLayout"; import { Error } from "./components/Error/Error"; -import { CustomThemeProvider } from "./theme/ThemeProvider"; +import { TwakeMuiThemeProvider } from "@linagora/twake-mui"; import { useAppDispatch, useAppSelector } from "./app/hooks"; import { push } from "redux-first-history"; import { ErrorSnackbar } from "./components/Error/ErrorSnackbar"; @@ -61,7 +61,7 @@ function App() { }, [error, dispatch]); return ( - + locale[lang]} lang={lang} @@ -79,7 +79,7 @@ function App() { - + ); } diff --git a/src/components/Attendees/PeopleSearch.tsx b/src/components/Attendees/PeopleSearch.tsx index 289f235..ebeedd3 100644 --- a/src/components/Attendees/PeopleSearch.tsx +++ b/src/components/Attendees/PeopleSearch.tsx @@ -1,12 +1,13 @@ -import Autocomplete, { - AutocompleteRenderInputParams, -} from "@mui/material/Autocomplete"; -import Avatar from "@mui/material/Avatar"; -import CircularProgress from "@mui/material/CircularProgress"; -import ListItem from "@mui/material/ListItem"; -import ListItemAvatar from "@mui/material/ListItemAvatar"; -import ListItemText from "@mui/material/ListItemText"; -import TextField from "@mui/material/TextField"; +import { + Autocomplete, + type AutocompleteRenderInputParams, + Avatar, + CircularProgress, + ListItem, + ListItemAvatar, + ListItemText, + TextField, +} from "@linagora/twake-mui"; import { type ReactNode, useCallback, @@ -16,12 +17,11 @@ import { } from "react"; import { searchUsers } from "../../features/User/userAPI"; import PeopleOutlineOutlinedIcon from "@mui/icons-material/PeopleOutlineOutlined"; -import Chip from "@mui/material/Chip"; -import { useTheme } from "@mui/material/styles"; +import { Chip, useTheme } from "@linagora/twake-mui"; import { getAccessiblePair } from "../Calendar/utils/calendarColorsUtils"; import { useI18n } from "twake-i18n"; import { SnackbarAlert } from "../Loading/SnackBarAlert"; -import { PopperProps, PaperProps } from "@mui/material"; +import { PopperProps, PaperProps } from "@linagora/twake-mui"; export interface User { email: string; diff --git a/src/components/Calendar/AccessTab.tsx b/src/components/Calendar/AccessTab.tsx index d14e679..a5289af 100644 --- a/src/components/Calendar/AccessTab.tsx +++ b/src/components/Calendar/AccessTab.tsx @@ -9,7 +9,7 @@ import { InputAdornment, Backdrop, CircularProgress, -} from "@mui/material"; +} from "@linagora/twake-mui"; import { useState, useEffect } from "react"; import { exportCalendar, diff --git a/src/components/Calendar/Calendar.tsx b/src/components/Calendar/Calendar.tsx index e3bf03a..712fc5d 100644 --- a/src/components/Calendar/Calendar.tsx +++ b/src/components/Calendar/Calendar.tsx @@ -20,8 +20,7 @@ import { push } from "redux-first-history"; import EventPreviewModal from "../../features/Events/EventDisplayPreview"; import AddIcon from "@mui/icons-material/Add"; import { TempCalendarsInput } from "./TempCalendarsInput"; -import Button from "@mui/material/Button"; -import { Box } from "@mui/material"; +import { Button, Box, radius } from "@linagora/twake-mui"; import { updateSlotLabelVisibility, eventToFullCalendarFormat, @@ -36,7 +35,7 @@ import momentTimezonePlugin from "@fullcalendar/moment-timezone"; import { TimezoneSelector } from "./TimezoneSelector"; import { MiniCalendar } from "./MiniCalendar"; import { User } from "../Attendees/PeopleSearch"; -import { useTheme } from "@mui/material/styles"; +import { useTheme } from "@linagora/twake-mui"; import { updateDarkColor } from "./utils/calendarColorsUtils"; import { useI18n } from "twake-i18n"; import frLocale from "@fullcalendar/core/locales/fr"; @@ -619,6 +618,9 @@ export default function CalendarApp({ onClick={() => eventHandlers.handleDateSelect(null as unknown as DateSelectArg) } + sx={{ + borderRadius: radius.lg, + }} >

{t("event.createEvent")}

diff --git a/src/components/Calendar/CalendarColorPicker.tsx b/src/components/Calendar/CalendarColorPicker.tsx index d7e72da..df9521f 100644 --- a/src/components/Calendar/CalendarColorPicker.tsx +++ b/src/components/Calendar/CalendarColorPicker.tsx @@ -7,7 +7,7 @@ import { TextField, Typography, useTheme, -} from "@mui/material"; +} from "@linagora/twake-mui"; import { useState } from "react"; import { HexColorPicker } from "react-colorful"; import { useI18n } from "twake-i18n"; diff --git a/src/components/Calendar/CalendarItemList.tsx b/src/components/Calendar/CalendarItemList.tsx index cd6b5b3..8a05851 100644 --- a/src/components/Calendar/CalendarItemList.tsx +++ b/src/components/Calendar/CalendarItemList.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { MenuItem } from "@mui/material"; +import { MenuItem } from "@linagora/twake-mui"; import { Calendar } from "../../features/Calendars/CalendarTypes"; import { CalendarName } from "./CalendarName"; diff --git a/src/components/Calendar/CalendarModal.tsx b/src/components/Calendar/CalendarModal.tsx index bc16138..35f4e4f 100644 --- a/src/components/Calendar/CalendarModal.tsx +++ b/src/components/Calendar/CalendarModal.tsx @@ -1,4 +1,4 @@ -import { Button, DialogActions, Tab, Tabs } from "@mui/material"; +import { Button, Tab, Tabs } from "@linagora/twake-mui"; import { useEffect, useState } from "react"; import { useAppDispatch, useAppSelector } from "../../app/hooks"; import { @@ -198,7 +198,7 @@ function CalendarPopover({ } actions={ - + <> - + } > {tab === "import" && ( diff --git a/src/components/Calendar/CalendarName.tsx b/src/components/Calendar/CalendarName.tsx index 8c64c5a..d1daf33 100644 --- a/src/components/Calendar/CalendarName.tsx +++ b/src/components/Calendar/CalendarName.tsx @@ -1,4 +1,4 @@ -import { Box, Typography } from "@mui/material"; +import { Box, Typography } from "@linagora/twake-mui"; import { Calendar } from "../../features/Calendars/CalendarTypes"; import SquareRoundedIcon from "@mui/icons-material/SquareRounded"; export function CalendarName({ calendar }: { calendar: Calendar }) { diff --git a/src/components/Calendar/CalendarSearch.tsx b/src/components/Calendar/CalendarSearch.tsx index 151168f..06628db 100644 --- a/src/components/Calendar/CalendarSearch.tsx +++ b/src/components/Calendar/CalendarSearch.tsx @@ -1,17 +1,19 @@ import CloseIcon from "@mui/icons-material/Close"; -import Avatar from "@mui/material/Avatar"; -import Box from "@mui/material/Box"; -import Button from "@mui/material/Button"; -import IconButton from "@mui/material/IconButton"; -import { useTheme } from "@mui/material/styles"; -import Typography from "@mui/material/Typography"; +import { + Avatar, + Box, + Button, + IconButton, + Typography, + TextField, + useTheme, +} from "@linagora/twake-mui"; import { useI18n } from "twake-i18n"; import { useState } from "react"; import { useAppDispatch, useAppSelector } from "../../app/hooks"; import { getCalendars } from "../../features/Calendars/CalendarApi"; import { addSharedCalendarAsync } from "../../features/Calendars/CalendarSlice"; import { Calendar } from "../../features/Calendars/CalendarTypes"; -import TextField from "@mui/material/TextField"; import { PeopleSearch, User } from "../Attendees/PeopleSearch"; import { ResponsiveDialog } from "../Dialog"; import { ColorPicker } from "./CalendarColorPicker"; diff --git a/src/components/Calendar/CalendarSelection.tsx b/src/components/Calendar/CalendarSelection.tsx index d6c32c0..cc573b9 100644 --- a/src/components/Calendar/CalendarSelection.tsx +++ b/src/components/Calendar/CalendarSelection.tsx @@ -1,18 +1,23 @@ -import Accordion from "@mui/material/Accordion"; -import AccordionDetails from "@mui/material/AccordionDetails"; -import AccordionSummary from "@mui/material/AccordionSummary"; -import Typography from "@mui/material/Typography"; +import { + Accordion, + AccordionDetails, + AccordionSummary, + Typography, + IconButton, + Checkbox, + Divider, + ListItem, + Menu, + MenuItem, +} from "@linagora/twake-mui"; import { useAppDispatch, useAppSelector } from "../../app/hooks"; import AddIcon from "@mui/icons-material/Add"; import { useState, useMemo, useEffect } from "react"; import CalendarPopover from "./CalendarModal"; import { Calendar } from "../../features/Calendars/CalendarTypes"; import MoreVertIcon from "@mui/icons-material/MoreVert"; -import IconButton from "@mui/material/IconButton"; -import Checkbox from "@mui/material/Checkbox"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import CalendarSearch from "./CalendarSearch"; -import { Divider, ListItem, Menu, MenuItem } from "@mui/material"; import { removeCalendarAsync } from "../../features/Calendars/CalendarSlice"; import { DeleteCalendarDialog } from "./DeleteCalendarDialog"; import { trimLongTextWithoutSpace } from "../../utils/textUtils"; diff --git a/src/components/Calendar/DeleteCalendarDialog.tsx b/src/components/Calendar/DeleteCalendarDialog.tsx index 502ef2f..a16d009 100644 --- a/src/components/Calendar/DeleteCalendarDialog.tsx +++ b/src/components/Calendar/DeleteCalendarDialog.tsx @@ -1,10 +1,12 @@ -import Dialog from "@mui/material/Dialog"; +import { + Dialog, + DialogTitle, + DialogContent, + DialogContentText, + DialogActions, + Button, +} from "@linagora/twake-mui"; import { Calendar } from "../../features/Calendars/CalendarTypes"; -import DialogTitle from "@mui/material/DialogTitle"; -import DialogContent from "@mui/material/DialogContent"; -import DialogContentText from "@mui/material/DialogContentText"; -import DialogActions from "@mui/material/DialogActions"; -import Button from "@mui/material/Button"; import { useI18n } from "twake-i18n"; export function DeleteCalendarDialog({ diff --git a/src/components/Calendar/ImportTab.tsx b/src/components/Calendar/ImportTab.tsx index c476b14..0f32d6a 100644 --- a/src/components/Calendar/ImportTab.tsx +++ b/src/components/Calendar/ImportTab.tsx @@ -9,7 +9,7 @@ import { ToggleButton, ToggleButtonGroup, Typography, -} from "@mui/material"; +} from "@linagora/twake-mui"; import { useEffect, useState } from "react"; import { useAppSelector } from "../../app/hooks"; import { CalendarItemList } from "./CalendarItemList"; diff --git a/src/components/Calendar/SettingsTab.tsx b/src/components/Calendar/SettingsTab.tsx index 99d305b..4f321bc 100644 --- a/src/components/Calendar/SettingsTab.tsx +++ b/src/components/Calendar/SettingsTab.tsx @@ -8,7 +8,7 @@ import { ToggleButton, ToggleButtonGroup, Typography, -} from "@mui/material"; +} from "@linagora/twake-mui"; import { useI18n } from "twake-i18n"; import { useState, useEffect } from "react"; import { useAppSelector } from "../../app/hooks"; diff --git a/src/components/Calendar/TempCalendarsInput.tsx b/src/components/Calendar/TempCalendarsInput.tsx index 12ca7c0..9451929 100644 --- a/src/components/Calendar/TempCalendarsInput.tsx +++ b/src/components/Calendar/TempCalendarsInput.tsx @@ -1,4 +1,4 @@ -import { useTheme } from "@mui/material/styles"; +import { useTheme } from "@linagora/twake-mui"; import { useRef } from "react"; import { useI18n } from "twake-i18n"; import { useAppDispatch, useAppSelector } from "../../app/hooks"; @@ -8,7 +8,7 @@ import { } from "../../features/Calendars/CalendarSlice"; import { Calendar } from "../../features/Calendars/CalendarTypes"; import { setView } from "../../features/Settings/SettingsSlice"; -import TextField from "@mui/material/TextField"; +import { TextField } from "@linagora/twake-mui"; import { User, PeopleSearch } from "../Attendees/PeopleSearch"; import { getAccessiblePair } from "./utils/calendarColorsUtils"; diff --git a/src/components/Calendar/TimezoneSelector.tsx b/src/components/Calendar/TimezoneSelector.tsx index c52669c..96b17c2 100644 --- a/src/components/Calendar/TimezoneSelector.tsx +++ b/src/components/Calendar/TimezoneSelector.tsx @@ -1,4 +1,4 @@ -import { Button, Popover } from "@mui/material"; +import { Button, Popover } from "@linagora/twake-mui"; import { useI18n } from "twake-i18n"; import moment from "moment"; import { MouseEvent, useMemo, useState } from "react"; diff --git a/src/components/Calendar/utils/calendarColorsUtils.tsx b/src/components/Calendar/utils/calendarColorsUtils.tsx index f5e97ab..3029268 100644 --- a/src/components/Calendar/utils/calendarColorsUtils.tsx +++ b/src/components/Calendar/utils/calendarColorsUtils.tsx @@ -1,4 +1,4 @@ -import { darken, getContrastRatio, lighten, Theme } from "@mui/material"; +import { darken, getContrastRatio, lighten, Theme } from "@linagora/twake-mui"; import { ThunkDispatch } from "@reduxjs/toolkit"; import { updateCalColor } from "../../../features/Calendars/CalendarSlice"; import { Calendar } from "../../../features/Calendars/CalendarTypes"; diff --git a/src/components/Dialog/ResponsiveDialog.tsx b/src/components/Dialog/ResponsiveDialog.tsx index 0ae14b8..56e3315 100644 --- a/src/components/Dialog/ResponsiveDialog.tsx +++ b/src/components/Dialog/ResponsiveDialog.tsx @@ -11,7 +11,7 @@ import { SxProps, Theme, Box, -} from "@mui/material"; +} from "@linagora/twake-mui"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import CloseIcon from "@mui/icons-material/Close"; import OpenInFullIcon from "@mui/icons-material/OpenInFull"; @@ -132,7 +132,7 @@ function ResponsiveDialog({ "& .MuiDialogActions-root .MuiBox-root": { maxWidth: isExpanded ? expandedContentMaxWidth : undefined, margin: isExpanded ? "0 auto" : undefined, - padding: isExpanded ? "0 12px" : undefined, + padding: "0", width: isExpanded ? "100%" : undefined, justifyContent: isExpanded ? "flex-end" : undefined, }, @@ -140,7 +140,6 @@ function ResponsiveDialog({ const baseContentSx: SxProps = { width: "100%", - padding: isExpanded ? "16px" : undefined, }; const contentWrapperSx: SxProps = { @@ -239,8 +238,6 @@ function ResponsiveDialog({ ? (theme) => `1px solid ${theme.palette.divider}` : undefined, justifyContent: actionsJustifyContent, - paddingTop: "18px", - paddingBottom: "18px", }} > {actions} diff --git a/src/components/Error/Error.tsx b/src/components/Error/Error.tsx index 1bb1af6..d74117c 100644 --- a/src/components/Error/Error.tsx +++ b/src/components/Error/Error.tsx @@ -1,6 +1,13 @@ import ErrorOutlineIcon from "@mui/icons-material/ErrorOutline"; import ReplayIcon from "@mui/icons-material/Replay"; -import { Box, Button, Fade, Paper, Stack, Typography } from "@mui/material"; +import { + Box, + Button, + Fade, + Paper, + Stack, + Typography, +} from "@linagora/twake-mui"; import { useEffect, useRef } from "react"; import { push } from "redux-first-history"; import { useAppDispatch, useAppSelector } from "../../app/hooks"; diff --git a/src/components/Error/ErrorSnackbar.tsx b/src/components/Error/ErrorSnackbar.tsx index 332f3dd..2a852c0 100644 --- a/src/components/Error/ErrorSnackbar.tsx +++ b/src/components/Error/ErrorSnackbar.tsx @@ -1,6 +1,4 @@ -import Snackbar from "@mui/material/Snackbar"; -import Alert from "@mui/material/Alert"; -import Button from "@mui/material/Button"; +import { Snackbar, Alert, Button } from "@linagora/twake-mui"; import { useAppDispatch } from "../../app/hooks"; import { clearError as calendarClearError } from "../../features/Calendars/CalendarSlice"; import { clearError as userClearError } from "../../features/User/userSlice"; diff --git a/src/components/Event/AddDescButton.tsx b/src/components/Event/AddDescButton.tsx index 2a0cd8f..df45847 100644 --- a/src/components/Event/AddDescButton.tsx +++ b/src/components/Event/AddDescButton.tsx @@ -1,4 +1,4 @@ -import { Box, Button, TextField } from "@mui/material"; +import { Box, Button, TextField } from "@linagora/twake-mui"; import { useI18n } from "twake-i18n"; import { FieldWithLabel } from "./components/FieldWithLabel"; import { Description as DescriptionIcon } from "@mui/icons-material"; diff --git a/src/components/Event/EditModeDialog.tsx b/src/components/Event/EditModeDialog.tsx index 2e96542..03fd058 100644 --- a/src/components/Event/EditModeDialog.tsx +++ b/src/components/Event/EditModeDialog.tsx @@ -8,7 +8,7 @@ import { FormControlLabel, Radio, RadioGroup, -} from "@mui/material"; +} from "@linagora/twake-mui"; import { CalendarEvent } from "../../features/Events/EventsTypes"; import { useState } from "react"; import { useI18n } from "twake-i18n"; @@ -40,6 +40,7 @@ export function EditModeDialog({ {type === "edit" && t("editModeDialog.updateRecurrentEvent")} + {type === "delete" && t("editModeDialog.deleteRecurrentEvent")} {type === "attendance" && t("editModeDialog.updateParticipationStatus")} diff --git a/src/components/Event/EventChip/ErrorEventChip.tsx b/src/components/Event/EventChip/ErrorEventChip.tsx index 144ea0a..d746261 100644 --- a/src/components/Event/EventChip/ErrorEventChip.tsx +++ b/src/components/Event/EventChip/ErrorEventChip.tsx @@ -1,4 +1,4 @@ -import { Card, Typography } from "@mui/material"; +import { Card, Typography } from "@linagora/twake-mui"; import { useRef, useEffect } from "react"; import { EventErrorHandler } from "../../Error/EventErrorHandler"; diff --git a/src/components/Event/EventChip/EventChip.tsx b/src/components/Event/EventChip/EventChip.tsx index cb61602..ac3b6e7 100644 --- a/src/components/Event/EventChip/EventChip.tsx +++ b/src/components/Event/EventChip/EventChip.tsx @@ -5,7 +5,7 @@ import { CardContent, CardHeader, Typography, -} from "@mui/material"; +} from "@linagora/twake-mui"; import React, { useEffect, useRef, useState } from "react"; import { stringAvatar } from "../utils/eventUtils"; import { ErrorEventChip } from "./ErrorEventChip"; @@ -110,7 +110,7 @@ export function EventChip({ event._def.extendedProps.organizer?.cn ?? event._def.extendedProps.organizer?.cal_address ) - : { style: {}, children: null }; + : { color: undefined, children: null }; return (
- + {dateLabel}
@@ -255,16 +255,14 @@ export function Menubar({
{user?.name && user?.family_name @@ -333,17 +331,15 @@ export function Menubar({ }} > {user?.name && user?.family_name ? `${user.name[0]}${user.family_name[0]}` diff --git a/src/components/Timezone/TimezoneAutocomplete.tsx b/src/components/Timezone/TimezoneAutocomplete.tsx index 35a5151..64638c9 100644 --- a/src/components/Timezone/TimezoneAutocomplete.tsx +++ b/src/components/Timezone/TimezoneAutocomplete.tsx @@ -1,4 +1,4 @@ -import { Autocomplete, TextField } from "@mui/material"; +import { Autocomplete, TextField } from "@linagora/twake-mui"; import { PublicOutlined as TimezoneIcon } from "@mui/icons-material"; import { useMemo } from "react"; diff --git a/src/features/Events/AttendanceValidation/AttendanceValidation.tsx b/src/features/Events/AttendanceValidation/AttendanceValidation.tsx index e3dce1f..b1a7e5c 100644 --- a/src/features/Events/AttendanceValidation/AttendanceValidation.tsx +++ b/src/features/Events/AttendanceValidation/AttendanceValidation.tsx @@ -1,4 +1,4 @@ -import { Box, Typography } from "@mui/material"; +import { Box, Typography } from "@linagora/twake-mui"; import { Dispatch, SetStateAction } from "react"; import { useI18n } from "twake-i18n"; import { Calendar } from "../../Calendars/CalendarTypes"; diff --git a/src/features/Events/AttendanceValidation/RSVPButton.tsx b/src/features/Events/AttendanceValidation/RSVPButton.tsx index 2c29c53..8c308d4 100644 --- a/src/features/Events/AttendanceValidation/RSVPButton.tsx +++ b/src/features/Events/AttendanceValidation/RSVPButton.tsx @@ -1,4 +1,4 @@ -import { Button } from "@mui/material"; +import { Button } from "@linagora/twake-mui"; import { Dispatch, SetStateAction } from "react"; import { useI18n } from "twake-i18n"; import { useAppDispatch } from "../../../app/hooks"; diff --git a/src/features/Events/EventDisplayPreview.tsx b/src/features/Events/EventDisplayPreview.tsx index 757104d..c2dc159 100644 --- a/src/features/Events/EventDisplayPreview.tsx +++ b/src/features/Events/EventDisplayPreview.tsx @@ -13,7 +13,7 @@ import PeopleAltOutlinedIcon from "@mui/icons-material/PeopleAltOutlined"; import RepeatIcon from "@mui/icons-material/Repeat"; import SubjectIcon from "@mui/icons-material/Subject"; import VideocamIcon from "@mui/icons-material/Videocam"; -import { Box, Typography } from "@mui/material"; +import { Box, Typography } from "@linagora/twake-mui"; import EventPopover from "./EventModal"; import { Button, @@ -23,8 +23,8 @@ import { Menu, MenuItem, Tooltip, -} from "@mui/material"; -import AvatarGroup from "@mui/material/AvatarGroup"; +} from "@linagora/twake-mui"; +import { AvatarGroup } from "@linagora/twake-mui"; import { useEffect, useState, useRef } from "react"; import { useAppDispatch, useAppSelector } from "../../app/hooks"; import { CalendarName } from "../../components/Calendar/CalendarName"; @@ -49,7 +49,6 @@ import { userAttendee } from "../User/models/attendee"; import { browserDefaultTimeZone } from "../../utils/timezone"; import { AttendanceValidation } from "./AttendanceValidation/AttendanceValidation"; import { Calendar } from "../Calendars/CalendarTypes"; -import { userData } from "../User/userDataTypes"; import { createEventContext } from "./createEventContext"; export default function EventPreviewModal({ @@ -369,7 +368,9 @@ export default function EventPreviewModal({ `${mailSpaUrl}/mailto/?uri=mailto:${event.attendee .map((a) => a.cal_address) .filter((mail) => mail !== user.email) - .join(",")}?subject=${event.title}` + .join( + "," + )}?subject=${encodeURIComponent(event.title ?? "")}` ) } > @@ -402,18 +403,28 @@ export default function EventPreviewModal({ eventId ) ); - setOpenEditModePopup("edit"); + setOpenEditModePopup("delete"); } else { onClose({}, "backdropClick"); - await dispatch( - deleteEventAsync({ - calId, - eventId, - eventURL: event.URL, - }) - ); + try { + const result = await dispatch( + deleteEventAsync({ + calId, + eventId, + eventURL: event.URL, + }) + ); + + // For compatibility with tests that may not mock unwrap + if (result && typeof result.unwrap === "function") { + await result.unwrap(); + } + + updateTempList(); + } catch (error) { + console.error("Failed to delete event:", error); + } } - updateTempList(); }} > {t("eventPreview.deleteEvent")} @@ -616,7 +627,15 @@ export default function EventPreviewModal({ } text={t("eventPreview.alarmText", { trigger: t(`event.form.notifications.${event.alarm.trigger}`), - action: t(`event.form.notifications.${event.alarm.action}`), + action: (() => { + if (!event.alarm.action) return ""; + const translationKey = `event.form.notifications.${event.alarm.action}`; + const translated = t(translationKey); + // If translation returns the key itself, it means translation not found, use raw value + return translated === translationKey + ? event.alarm.action + : translated; + })(), })} style={{ fontSize: "16px", diff --git a/src/features/Events/EventModal.tsx b/src/features/Events/EventModal.tsx index b737700..414f120 100644 --- a/src/features/Events/EventModal.tsx +++ b/src/features/Events/EventModal.tsx @@ -1,5 +1,5 @@ import { CalendarApi, DateSelectArg } from "@fullcalendar/core"; -import { Box, Button } from "@mui/material"; +import { Box, Button } from "@linagora/twake-mui"; import AddIcon from "@mui/icons-material/Add"; import React, { useEffect, diff --git a/src/features/Events/EventUpdateModal.tsx b/src/features/Events/EventUpdateModal.tsx index 2a1bba4..a10a45f 100644 --- a/src/features/Events/EventUpdateModal.tsx +++ b/src/features/Events/EventUpdateModal.tsx @@ -1,4 +1,4 @@ -import { Box, Button } from "@mui/material"; +import { Box, Button } from "@linagora/twake-mui"; import AddIcon from "@mui/icons-material/Add"; import { useEffect, useState, useMemo, useCallback, useRef } from "react"; import { useAppDispatch, useAppSelector } from "../../app/hooks"; diff --git a/src/features/Search/SearchResultsPage.tsx b/src/features/Search/SearchResultsPage.tsx index 895bf5d..7f02e9c 100644 --- a/src/features/Search/SearchResultsPage.tsx +++ b/src/features/Search/SearchResultsPage.tsx @@ -2,8 +2,14 @@ import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import RepeatIcon from "@mui/icons-material/Repeat"; import SquareRoundedIcon from "@mui/icons-material/SquareRounded"; import VideocamIcon from "@mui/icons-material/Videocam"; -import { Box, Button, IconButton, Stack, Typography } from "@mui/material"; -import CircularProgress from "@mui/material/CircularProgress"; +import { + Box, + Button, + IconButton, + Stack, + Typography, + CircularProgress, +} from "@linagora/twake-mui"; import { useI18n } from "twake-i18n"; import { useState } from "react"; import { useAppDispatch, useAppSelector } from "../../app/hooks"; diff --git a/src/features/Settings/SettingsPage.tsx b/src/features/Settings/SettingsPage.tsx index c846e40..e01112a 100644 --- a/src/features/Settings/SettingsPage.tsx +++ b/src/features/Settings/SettingsPage.tsx @@ -15,7 +15,7 @@ import { Snackbar, Switch, FormControlLabel, -} from "@mui/material"; +} from "@linagora/twake-mui"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import SettingsIcon from "@mui/icons-material/Settings"; // import SyncIcon from "@mui/icons-material/Sync"; @@ -418,11 +418,7 @@ export default function SettingsPage() { )} {activeSettingsSubTab === "notifications" && ( - + {t("settings.notifications.deliveryMethod") || "Delivery method"} diff --git a/src/locales/en.json b/src/locales/en.json index 8c36452..5643d43 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -152,7 +152,9 @@ "-PT1D": "1 day before", "-PT2D": "2 days before", "-PT1W": "1 week before", - "EMAIL": "email" + "EMAIL": "email", + "DISPLAY": "display", + "AUDIO": "audio" }, "showMeAs": "Show me as", "free": "Free", @@ -188,6 +190,7 @@ "editModeDialog": { "updateRecurrentEvent": "Update the recurrent event", "updateParticipationStatus": "Update the participation status", + "deleteRecurrentEvent": "Delete the recurrent event", "thisEvent": "This event", "allEvents": "All the events" }, diff --git a/src/locales/fr.json b/src/locales/fr.json index 860042e..deda948 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -154,7 +154,9 @@ "-PT1D": "1 jour avant", "-PT2D": "2 jours avant", "-PT1W": "1 semaine avant", - "EMAIL": "e-mail" + "EMAIL": "e-mail", + "DISPLAY": "affichage", + "AUDIO": "audio" }, "showMeAs": "M'afficher comme", "free": "Libre", diff --git a/src/locales/ru.json b/src/locales/ru.json index c0351b8..04c2141 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -154,7 +154,9 @@ "-PT1D": "За 1 день", "-PT2D": "За 2 дня", "-PT1W": "За 1 неделю", - "EMAIL": "Email" + "EMAIL": "Email", + "DISPLAY": "Отображение", + "AUDIO": "Звук" }, "showMeAs": "Показать как", "free": "Свободен", diff --git a/src/locales/vi.json b/src/locales/vi.json index b9e5e4e..2e33a4f 100644 --- a/src/locales/vi.json +++ b/src/locales/vi.json @@ -152,7 +152,9 @@ "-PT1D": "1 ngày trước", "-PT2D": "2 ngày trước", "-PT1W": "1 tuần trước", - "EMAIL": "email" + "EMAIL": "email", + "DISPLAY": "hiển thị", + "AUDIO": "âm thanh" }, "showMeAs": "Hiển thị tôi là", "free": "Rảnh", diff --git a/src/theme/ThemeProvider.tsx b/src/theme/ThemeProvider.tsx deleted file mode 100644 index cad62ff..0000000 --- a/src/theme/ThemeProvider.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from "react"; -import { ThemeProvider } from "@mui/material/styles"; -import { CssBaseline } from "@mui/material"; -import { customTheme } from "./theme"; - -interface CustomThemeProviderProps { - children: React.ReactNode; -} - -export function CustomThemeProvider({ children }: CustomThemeProviderProps) { - return ( - - - {children} - - ); -} - -export { customTheme }; diff --git a/src/theme/theme.ts b/src/theme/theme.ts deleted file mode 100644 index fd23305..0000000 --- a/src/theme/theme.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { createTheme } from "@mui/material/styles"; - -// Custom theme for Twake Calendar -export const customTheme = createTheme({ - palette: { - text: { - primary: "#000000", - secondary: "#717D96", - secondaryContainer: "#243B55", - }, - }, - typography: { - caption: { - fontSize: "0.75rem", - fontWeight: 400, - lineHeight: 1.4, - color: "#8C9CAF", // Custom secondary text color - }, - }, - components: { - // Custom Typography component - MuiTypography: { - styleOverrides: { - // Custom variant for event info text - caption: { - fontSize: "13px", - color: "#717D96", - }, - }, - }, - // Custom Button component - // Custom Dialog component - // Custom DialogActions component - }, -}); - -// Export theme type for TypeScript -export type CustomTheme = typeof customTheme; diff --git a/src/utils/avatarUtils.ts b/src/utils/avatarUtils.ts new file mode 100644 index 0000000..f5c1101 --- /dev/null +++ b/src/utils/avatarUtils.ts @@ -0,0 +1,11 @@ +import { nameToColor } from "@linagora/twake-mui"; + +/** + * Generate a gradient color from a string + * @param str - String to generate color from + * @returns Color name for gradient + */ +export function stringToGradient(str: string): string | undefined { + if (!str) return undefined; + return nameToColor(str); +}