diff --git a/apps/meteor/app/analytics/client/loadScript.js b/apps/meteor/app/analytics/client/loadScript.js deleted file mode 100644 index 4cc3e45c2f49..000000000000 --- a/apps/meteor/app/analytics/client/loadScript.js +++ /dev/null @@ -1,85 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; - -import { settings } from '../../settings'; - -Template.body.onRendered(function () { - this.autorun((c) => { - const piwikUrl = settings.get('PiwikAnalytics_enabled') && settings.get('PiwikAnalytics_url'); - const piwikSiteId = piwikUrl && settings.get('PiwikAnalytics_siteId'); - const piwikPrependDomain = piwikUrl && settings.get('PiwikAnalytics_prependDomain'); - const piwikCookieDomain = piwikUrl && settings.get('PiwikAnalytics_cookieDomain'); - const piwikDomains = piwikUrl && settings.get('PiwikAnalytics_domains'); - const piwikAdditionalTracker = piwikUrl && settings.get('PiwikAdditionalTrackers'); - const googleId = settings.get('GoogleAnalytics_enabled') && settings.get('GoogleAnalytics_ID'); - if (piwikSiteId || googleId) { - c.stop(); - - if (piwikSiteId) { - window._paq = window._paq || []; - if (Meteor.userId()) { - window._paq.push(['setUserId', Meteor.userId()]); - } - - window._paq.push(['trackPageView']); - window._paq.push(['enableLinkTracking']); - if (piwikPrependDomain) { - window._paq.push(['setDocumentTitle', `${window.location.hostname}/${document.title}`]); - } - const upperLevelDomain = `*.${window.location.hostname.split('.').slice(1).join('.')}`; - if (piwikCookieDomain) { - window._paq.push(['setCookieDomain', upperLevelDomain]); - } - if (piwikDomains) { - // array - const domainsArray = piwikDomains.split(/\n/); - const domains = []; - for (let i = 0; i < domainsArray.length; i++) { - // only push domain if it contains a non whitespace character. - if (/\S/.test(domainsArray[i])) { - domains.push(`*.${domainsArray[i].trim()}`); - } - } - window._paq.push(['setDomains', domains]); - } - (() => { - try { - if (/\S/.test(piwikAdditionalTracker)) { - // piwikAdditionalTracker is not empty or whitespace only - const addTrackers = JSON.parse(piwikAdditionalTracker); - for (let i = 0; i < addTrackers.length; i++) { - const tracker = addTrackers[i]; - window._paq.push(['addTracker', `${tracker.trackerURL}js/`, tracker.siteId]); - } - } - } catch (e) { - // parsing JSON faild - console.log('Error while parsing JSON value of "piwikAdditionalTracker": ', e); - } - window._paq.push(['setTrackerUrl', `${piwikUrl}js/`]); - window._paq.push(['setSiteId', Number.parseInt(piwikSiteId)]); - const d = document; - const g = d.createElement('script'); - const s = d.getElementsByTagName('script')[0]; - g.type = 'text/javascript'; - g.async = true; - g.defer = true; - g.src = `${piwikUrl}js/`; - s.parentNode.insertBefore(g, s); - })(); - } - - if (googleId) { - /*eslint-disable */ - (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ - (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), - m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) - })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); - - ga('create', googleId, 'auto'); - ga('send', 'pageview'); - /* eslint-enable */ - } - } - }); -}); diff --git a/apps/meteor/app/analytics/client/loadScript.ts b/apps/meteor/app/analytics/client/loadScript.ts new file mode 100644 index 000000000000..7ddce14102c6 --- /dev/null +++ b/apps/meteor/app/analytics/client/loadScript.ts @@ -0,0 +1,122 @@ +import { Meteor } from 'meteor/meteor'; +import { Template } from 'meteor/templating'; + +import { settings } from '../../settings/client'; + +declare global { + // eslint-disable-next-line @typescript-eslint/naming-convention + interface Window { + _paq: [string, ...unknown[]][]; + GoogleAnalyticsObject: unknown; + ga: qa; + } + + type qa = { + (...args: unknown[]): void; + l: number; + q: unknown[]; + }; +} + +Template.body.onRendered(function () { + this.autorun(() => { + const uid = Meteor.userId(); + if (uid) { + window._paq = window._paq || []; + window._paq.push(['setUserId', uid]); + } + }); + + this.autorun((c) => { + const googleId = settings.get('GoogleAnalytics_enabled') && settings.get('GoogleAnalytics_ID'); + if (googleId) { + c.stop(); + + if (googleId) { + /*eslint-disable */ + (function (i, s, o, g, r: 'ga', a?: any, m?: any) { + i['GoogleAnalyticsObject'] = r; + (i[r] = + i[r] || + function () { + (i[r].q = i[r].q || []).push(arguments); + }), + (i[r].l = new Date().getTime()); + (a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]); + a.async = 1; + a.src = g; + m.parentNode.insertBefore(a, m); + })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga'); + + window.ga('create', googleId, 'auto'); + window.ga('send', 'pageview'); + /* eslint-enable */ + } + } + }); + + this.autorun(() => { + const piwikUrl = settings.get('PiwikAnalytics_enabled') && settings.get('PiwikAnalytics_url'); + + if (!piwikUrl) { + document.getElementById('piwik-analytics')?.remove(); + window._paq = []; + return; + } + + const piwikSiteId = piwikUrl && settings.get('PiwikAnalytics_siteId'); + const piwikPrependDomain = piwikUrl && settings.get('PiwikAnalytics_prependDomain'); + const piwikCookieDomain = piwikUrl && settings.get('PiwikAnalytics_cookieDomain'); + const piwikDomains = piwikUrl && settings.get('PiwikAnalytics_domains'); + const piwikAdditionalTracker = piwikUrl && settings.get('PiwikAdditionalTrackers'); + window._paq = window._paq || []; + + window._paq.push(['trackPageView']); + window._paq.push(['enableLinkTracking']); + if (piwikPrependDomain) { + window._paq.push(['setDocumentTitle', `${window.location.hostname}/${document.title}`]); + } + const upperLevelDomain = `*.${window.location.hostname.split('.').slice(1).join('.')}`; + if (piwikCookieDomain) { + window._paq.push(['setCookieDomain', upperLevelDomain]); + } + if (piwikDomains) { + // array + const domainsArray = piwikDomains.split(/\n/); + const domains = []; + for (let i = 0; i < domainsArray.length; i++) { + // only push domain if it contains a non whitespace character. + if (/\S/.test(domainsArray[i])) { + domains.push(`*.${domainsArray[i].trim()}`); + } + } + window._paq.push(['setDomains', domains]); + } + (() => { + try { + if (/\S/.test(piwikAdditionalTracker)) { + // piwikAdditionalTracker is not empty or whitespace only + const addTrackers = JSON.parse(piwikAdditionalTracker); + for (let i = 0; i < addTrackers.length; i++) { + const tracker = addTrackers[i]; + window._paq.push(['addTracker', `${tracker.trackerURL}js/`, tracker.siteId]); + } + } + } catch (e) { + // parsing JSON faild + console.log('Error while parsing JSON value of "piwikAdditionalTracker": ', e); + } + window._paq.push(['setTrackerUrl', `${piwikUrl}js/`]); + window._paq.push(['setSiteId', Number.parseInt(piwikSiteId)]); + const d = document; + const g = d.createElement('script'); + g.setAttribute('id', 'piwik-analytics'); + const s = d.getElementsByTagName('script')[0]; + g.type = 'text/javascript'; + g.async = true; + g.defer = true; + g.src = `${piwikUrl}js/`; + s.parentNode?.insertBefore(g, s); + })(); + }); +}); diff --git a/apps/meteor/app/cors/server/cors.js b/apps/meteor/app/cors/server/cors.js index c4f3c9e7693c..cc6bcefb9321 100644 --- a/apps/meteor/app/cors/server/cors.js +++ b/apps/meteor/app/cors/server/cors.js @@ -35,7 +35,17 @@ WebApp.rawConnectHandlers.use(function (req, res, next) { ] .filter(Boolean) .join(' '); - const external = [settings.get('Accounts_OAuth_Apple') && 'https://appleid.cdn-apple.com'].filter(Boolean).join(' '); + const external = [ + settings.get('Accounts_OAuth_Apple') && 'https://appleid.cdn-apple.com', + settings.get('PiwikAnalytics_enabled') && settings.get('PiwikAnalytics_url'), + settings.get('GoogleAnalytics_enabled' && 'https://www.google-analytics.com'), + ...settings + .get('Extra_CSP_Domains') + .split(/[ \n\,]/gim) + .filter((e) => Boolean(e.trim())), + ] + .filter(Boolean) + .join(' '); res.setHeader( 'Content-Security-Policy', [ diff --git a/apps/meteor/app/lib/server/startup/settings.ts b/apps/meteor/app/lib/server/startup/settings.ts index 1d96dee517fe..64238249fe10 100644 --- a/apps/meteor/app/lib/server/startup/settings.ts +++ b/apps/meteor/app/lib/server/startup/settings.ts @@ -884,6 +884,11 @@ settingsRegistry.addGroup('General', function () { type: 'boolean', }); + this.add('Extra_CSP_Domains', '', { + type: 'string', + multiline: true, + }); + this.add('Iframe_Restrict_Access', true, { type: 'boolean', secret: true, diff --git a/apps/meteor/app/theme/client/imports/components/message-box.css b/apps/meteor/app/theme/client/imports/components/message-box.css index 2129b6fd5e8a..ab5638d32037 100644 --- a/apps/meteor/app/theme/client/imports/components/message-box.css +++ b/apps/meteor/app/theme/client/imports/components/message-box.css @@ -97,7 +97,7 @@ align-items: center; &.editing { - background-color: var(--message-box-editing-color); + background-color: var(--rcx-color-status-background-warning-2, var(--message-box-editing-color)); } } diff --git a/apps/meteor/app/theme/client/imports/general/variables.css b/apps/meteor/app/theme/client/imports/general/variables.css index 26c6b253527f..b2dac6199107 100644 --- a/apps/meteor/app/theme/client/imports/general/variables.css +++ b/apps/meteor/app/theme/client/imports/general/variables.css @@ -327,7 +327,7 @@ --message-box-container-border-color: var(--rcx-input-colors-border-color, var(--rcx-color-stroke-light, var(--rcx-color-neutral-500, var(--color-gray-medium)))); --message-box-container-border-width: var(--border); --message-box-container-border-radius: var(--border-radius); - --message-box-editing-color: var(--rcx-color-status-background-warning, var(--rcx-color-status-warning, #ffecad)); + --message-box-editing-color: var(--rcx-color-status-background-warning-2, #fff6d6); --message-box-popover-title-text-color: var(--rcx-color-font-annotation, var(--rcx-color-neutral-600, var(--color-gray))); --message-box-popover-title-text-size: 0.75rem; --message-box-color: var(--rcx-color-font-default, var(--rcx-color-neutral-800, #2f343d)); diff --git a/apps/meteor/client/providers/UserProvider.tsx b/apps/meteor/client/providers/UserProvider.tsx index fe52016ac326..a05435a42e68 100644 --- a/apps/meteor/client/providers/UserProvider.tsx +++ b/apps/meteor/client/providers/UserProvider.tsx @@ -17,16 +17,20 @@ const getUser = (): IUser | null => Meteor.user() as IUser | null; const capitalize = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1); const config: Record> = { - 'facebook': { buttonColor: '#325c99' }, - 'twitter': { buttonColor: '#02acec' }, - 'google': { buttonColor: '#dd4b39' }, - 'github': { buttonColor: '#4c4c4c', title: 'GitHub' }, - 'github_enterprise': { buttonColor: '#4c4c4c', title: 'GitHub Enterprise' }, - 'gitlab': { buttonColor: '#373d47', title: 'GitLab' }, - 'trello': { buttonColor: '#026aa7' }, - 'meteor-developer': { buttonColor: '#de4f4f', title: 'Meteor' }, - 'wordpress': { buttonColor: '#1e8cbe', title: 'WordPress' }, - 'linkedin': { buttonColor: '#1b86bc' }, + 'apple': { title: 'Apple', icon: 'apple' }, + 'facebook': { title: 'Facebook', icon: 'facebook' }, + 'twitter': { title: 'Twitter', icon: 'twitter' }, + 'google': { title: 'Google', icon: 'google' }, + 'github': { title: 'Github', icon: 'github' }, + 'github_enterprise': { title: 'Github Enterprise', icon: 'github' }, + 'gitlab': { title: 'Gitlab', icon: 'gitlab' }, + 'dolphin': { title: 'Dolphin', icon: 'dophin' }, + 'drupal': { title: 'Drupal', icon: 'drupal' }, + 'nextcloud': { title: 'Nextcloud', icon: 'nextcloud' }, + 'tokenpass': { title: 'Tokenpass', icon: 'tokenpass' }, + 'meteor-developer': { title: 'Meteor', icon: 'meteor' }, + 'wordpress': { title: 'WordPress', icon: 'wordpress' }, + 'linkedin': { title: 'Linkedin', icon: 'linkedin' }, }; const logout = (): Promise => diff --git a/apps/meteor/client/sidebar/hooks/useSidebarPaletteColor.ts b/apps/meteor/client/sidebar/hooks/useSidebarPaletteColor.ts index ec03a7866d6b..cce160116d2b 100644 --- a/apps/meteor/client/sidebar/hooks/useSidebarPaletteColor.ts +++ b/apps/meteor/client/sidebar/hooks/useSidebarPaletteColor.ts @@ -106,6 +106,7 @@ const getStyle = ( ${selector} { --rcx-color-neutral-100: ${toVar(colors.n900)}; --rcx-color-neutral-200: ${toVar(colors.n800)}; + --rcx-color-neutral-250: ${toVar(colors.n800)}; --rcx-color-neutral-300: ${toVar(colors.n700)}; --rcx-color-neutral-400: ${toVar(colors.n600)}; --rcx-color-neutral-500: ${toVar(colors.n500)}; diff --git a/apps/meteor/client/views/admin/apps/AppsRoute.tsx b/apps/meteor/client/views/admin/apps/AppsRoute.tsx index a014a94c0cc6..34c966b230e7 100644 --- a/apps/meteor/client/views/admin/apps/AppsRoute.tsx +++ b/apps/meteor/client/views/admin/apps/AppsRoute.tsx @@ -15,9 +15,19 @@ const AppsRoute = (): ReactElement => { const appsWhatIsItRoute = useRoute('admin-apps-disabled'); const marketplaceRoute = useRoute('admin-marketplace'); + const context = useRouteParameter('context'); + const id = useRouteParameter('id'); + const page = useRouteParameter('page'); + + const isMarketplace = !context; + useEffect(() => { let mounted = true; + if (!context) { + marketplaceRoute.replace({ context: 'all', page: 'list' }); + } + const initialize = async (): Promise => { if (!canManageApps) { return; @@ -40,14 +50,7 @@ const AppsRoute = (): ReactElement => { return (): void => { mounted = false; }; - }, [canManageApps, isAppsEngineEnabled, appsWhatIsItRoute, marketplaceRoute]); - - const context = useRouteParameter('context'); - - const isMarketplace = !context; - - const id = useRouteParameter('id'); - const page = useRouteParameter('page'); + }, [canManageApps, isAppsEngineEnabled, appsWhatIsItRoute, marketplaceRoute, context]); if (!canManageApps) { return ; diff --git a/apps/meteor/client/views/admin/routes.tsx b/apps/meteor/client/views/admin/routes.tsx index dd3a08c2015d..fa06088048fc 100644 --- a/apps/meteor/client/views/admin/routes.tsx +++ b/apps/meteor/client/views/admin/routes.tsx @@ -24,13 +24,6 @@ registerAdminRoute('/apps/what-is-it', { registerAdminRoute('/marketplace/:context?/:page?/:id?/:version?/:tab?', { name: 'admin-marketplace', component: lazy(() => import('./apps/AppsRoute')), - triggersEnter: [ - (context, redirect): void => { - if (!context.params.context) { - redirect('/admin/marketplace/all/list'); - } - }, - ], }); registerAdminRoute('/info', { diff --git a/apps/meteor/package.json b/apps/meteor/package.json index c042a8add8c0..c5891323d201 100644 --- a/apps/meteor/package.json +++ b/apps/meteor/package.json @@ -205,7 +205,7 @@ "@react-aria/color": "^3.0.0-beta.15", "@rocket.chat/agenda": "workspace:^", "@rocket.chat/api-client": "workspace:^", - "@rocket.chat/apps-engine": "alpha", + "@rocket.chat/apps-engine": "1.36.0-alpha.0.77", "@rocket.chat/cas-validate": "workspace:^", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/css-in-js": "next", diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/en.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/en.i18n.json index 558d18deb4ec..cd71e39c0b70 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/en.i18n.json @@ -1782,6 +1782,8 @@ "Enable_Auto_Away": "Enable Auto Away", "Enable_CSP": "Enable Content-Security-Policy", "Enable_CSP_Description": "Do not disable this option unless you have a custom build and are having problems due to inline-scripts", + "Extra_CSP_Domains": "Extra CSP Domains", + "Extra_CSP_Domains_Description": "Extra domains to add to the Content-Security-Policy", "Enable_Desktop_Notifications": "Enable Desktop Notifications", "Enable_inquiry_fetch_by_stream": "Enable inquiry data fetch from server using a stream", "Enable_omnichannel_auto_close_abandoned_rooms": "Enable automatic closing of rooms abandoned by the visitor", @@ -4393,6 +4395,7 @@ "Sidebar": "Sidebar", "Sidebar_list_mode": "Sidebar Channel List Mode", "Sign_in_to_start_talking": "Sign in to start talking", + "Sign_in_with__provider__": "Sign in with __provider__", "since_creation": "since %s", "Site_Name": "Site Name", "Site_Url": "Site URL", @@ -5433,27 +5436,29 @@ "registration.page.login.errors.licenseUserLimitReached": "The maximum number of users has been reached.", "registration.page.login.errors.AppUserNotAllowedToLogin": "App users are not allowed to log in directly.", "registration.page.registration.waitActivationWarning": "Before you can login, your account must be manually activated by an administrator.", - "onboarding.component.form.requiredField": "This field is required", - "registration.page.login.register": "New here? <1>Register", + "registration.page.login.register": "New here? <1>Create an account", "registration.page.login.forgot": "Forgot your password?", "registration.page.register.back": "Back to Login", "registration.page.emailVerification.subTitle": "This server requires verified email addresses. Please check your email inbox for a verification link.", "registration.page.emailVerification.sent": "Verification email sent, please check your inbox.", "registration.page.resetPassword.sent": "If this email is registered, we'll send instructions on how to reset your password. If you do not receive an email shortly, please come back and try again.", - "registration.page.poweredBy": "Powered by <1>RocketChat", - "registration.component.welcome": "Welcome to <1>Rocket.chat", + "registration.page.resetPassword.sendInstructions": "Send instructions", + "registration.page.resetPassword.errors.invalidEmail": "Invalid Email", + "registration.page.poweredBy": "Powered by <1>Rocket.Chat", + "registration.component.welcome": "Welcome to <1>Rocket.Chat workspace", "registration.component.login": "Login", + "registration.component.login.userNotFound": "User not found", + "registration.component.login.incorrectPassword": "Incorrect password", "registration.component.switchLanguage": "Switch to <1>en", "registration.component.resetPassword": "Reset password", "registration.component.form.emailOrUsername": "Email or username", - "registration.component.form.emailOrUsernamePlaceholder": "jon.doe", "registration.component.form.email": "Email", - "registration.component.form.emailPlaceholder": "your@email.com", - "registration.component.form.emailHint": "Please enter your email address", + "registration.component.form.emailPlaceholder": "example@example.com", "registration.component.form.password": "Password", "registration.component.form.divider": "or", "registration.component.form.submit": "Submit", "registration.component.form.requiredField": "This field is required", + "onboarding.component.form.requiredField": "This field is required", "onboarding.component.form.steps": "Step {{currentStep}} of {{stepCount}}", "onboarding.component.form.action.back": "Back", "onboarding.component.form.action.next": "Next", @@ -5531,5 +5536,7 @@ "Something_Went_Wrong": "Something went wrong", "Toolbox_room_actions": "Primary Room actions", "Theme_light": "Light", - "Theme_dark": "Dark" -} \ No newline at end of file + "Theme_dark": "Dark", + "Join_your_team": "Join your team", + "Create_an_account": "Create an account" +} diff --git a/apps/meteor/server/hooks/messages/markdownParser.ts b/apps/meteor/server/hooks/messages/markdownParser.ts index abc3e75217bf..da858a187916 100644 --- a/apps/meteor/server/hooks/messages/markdownParser.ts +++ b/apps/meteor/server/hooks/messages/markdownParser.ts @@ -29,7 +29,7 @@ if (process.env.DISABLE_MESSAGE_PARSER !== 'true') { return message; }, - callbacks.priority.HIGH, + callbacks.priority.MEDIUM, 'markdownParser', ); } diff --git a/apps/meteor/tests/e2e/forgot-password.spec.ts b/apps/meteor/tests/e2e/forgot-password.spec.ts index 498e4d4f4955..44cb45475d8d 100644 --- a/apps/meteor/tests/e2e/forgot-password.spec.ts +++ b/apps/meteor/tests/e2e/forgot-password.spec.ts @@ -13,31 +13,29 @@ test.describe.parallel('Forgot Password', () => { test('Email validation', async () => { await test.step('expect trigger a validation error if no email is provided', async () => { - await poRegistration.btnSubmit.click(); + await poRegistration.btnSendInstructions.click(); await expect(poRegistration.inputEmail).toBeInvalid(); }); await test.step('expect trigger a validation if a invalid email is provided (1)', async () => { await poRegistration.inputEmail.fill('mail@mail'); - await poRegistration.btnSubmit.click(); + await poRegistration.btnSendInstructions.click(); await expect(poRegistration.inputEmail).toBeInvalid(); }); await test.step('expect trigger a validation if a invalid email is provided (2)', async () => { await poRegistration.inputEmail.fill('mail'); - await poRegistration.btnSubmit.click(); + await poRegistration.btnSendInstructions.click(); await expect(poRegistration.inputEmail).toBeInvalid(); }); await test.step('expect to show a success toast if a valid email is provided', async () => { await poRegistration.inputEmail.fill('mail@mail.com'); - await poRegistration.btnSubmit.click(); + await poRegistration.btnSendInstructions.click(); await expect(poRegistration.forgotPasswordEmailCallout).toBeVisible(); }); }); - - // test('Reset Password disabled', async () => {}); }); diff --git a/apps/meteor/tests/e2e/page-objects/auth.ts b/apps/meteor/tests/e2e/page-objects/auth.ts index 96cde1f08990..02b1811f996c 100644 --- a/apps/meteor/tests/e2e/page-objects/auth.ts +++ b/apps/meteor/tests/e2e/page-objects/auth.ts @@ -7,8 +7,8 @@ export class Registration { this.page = page; } - get btnSubmit(): Locator { - return this.page.locator('role=button[name="Submit"]'); + get btnSendInstructions(): Locator { + return this.page.locator('role=button[name="Send instructions"]'); } get btnLogin(): Locator { @@ -16,7 +16,7 @@ export class Registration { } get goToRegister(): Locator { - return this.page.locator('role=link[name="Register"]'); + return this.page.locator('role=link[name="Create an account"]'); } get main(): Locator { @@ -28,7 +28,7 @@ export class Registration { } get btnRegister(): Locator { - return this.page.locator('role=button[name="Register"]'); + return this.page.locator('role=button[name="Join your team"]'); } get btnRegisterConfirmUsername(): Locator { diff --git a/ee/packages/ui-theming/src/palette.ts b/ee/packages/ui-theming/src/palette.ts index e3098bf1f282..2b8ba58fea30 100644 --- a/ee/packages/ui-theming/src/palette.ts +++ b/ee/packages/ui-theming/src/palette.ts @@ -3,7 +3,7 @@ export const palette = [ category: 'Stroke', description: "Use as component's outline, stroke, dividers", list: [ - { name: 'stroke-extra-light', token: 'N200', color: '#F2F3F5' }, + { name: 'stroke-extra-light', token: 'N250', color: '#EBECEF' }, { name: 'stroke-light', token: 'N500', color: '#CBCED1' }, { name: 'stroke-medium', token: 'N600', color: '#9EA2A8' }, { name: 'stroke-dark', token: 'N700', color: '#6C727A' }, @@ -40,6 +40,8 @@ export const palette = [ { name: 'font-titles-labels', token: 'N900', color: '#1F2329' }, { name: 'font-info', token: 'P600', color: '#095AD2' }, { name: 'font-danger', token: 'D600', color: '#D40C26' }, + { name: 'font-pure-black', token: '', color: '#2F343D' }, + { name: 'font-pure-white', token: '', color: '#FFFFFF' }, ], }, { @@ -50,9 +52,10 @@ export const palette = [ { name: 'status-background-success', token: 'S500', color: '#C0F6E4' }, { name: 'status-background-danger', token: 'D200', color: '#FFC1C9' }, { name: 'status-background-warning', token: 'W200', color: '#FFECAD' }, + { name: 'status-background-warning-2', token: 'W100', color: '#FFF6D6' }, { name: 'status-background-service-1', token: 'S1-200', color: '#FAD1B0' }, { name: 'status-background-service-2', token: 'S2-200', color: '#EDD0F7' }, - { name: 'status-background-service-2', token: 'S2-200', color: '#EDD0F7' }, + { name: 'status-background-service-3', token: 'S2-700', color: '#5F1477' }, ], }, { @@ -62,8 +65,10 @@ export const palette = [ { name: 'status-font-on-success', token: 'S800', color: '#148660' }, { name: 'status-font-on-danger', token: 'D800', color: '#9B1325' }, { name: 'status-font-on-warning', token: 'W900', color: '#8E6300' }, + { name: 'status-font-on-warning-2', token: 'N800', color: '#2F343D' }, { name: 'status-font-on-service-1', token: 'S1-800', color: '#974809' }, { name: 'status-font-on-service-2 ', token: 'S2-600', color: '#7F1B9F' }, + { name: 'status-font-on-service-3 ', token: 'white', color: '#FFFFFF' }, ], }, { @@ -76,6 +81,16 @@ export const palette = [ { name: 'badge-background-level-4', token: '', color: '#F5455C' }, ], }, + { + category: 'Elevation', + description: 'Elevation border and shadow levels', + list: [ + { name: 'shadow-elevation-border', token: '', color: '#EBECEF' }, + { name: 'shadow-elevation-1', token: '', color: 'rgba(47, 52, 61, 0.1)' }, + { name: 'shadow-elevation-2x', token: '', color: 'rgba(47, 52, 61, 0.08)' }, + { name: 'shadow-elevation-2y', token: '', color: 'rgba(47, 52, 61, 0.12)' }, + ], + }, { category: 'Button', description: 'Primary Background', diff --git a/ee/packages/ui-theming/src/paletteDark.ts b/ee/packages/ui-theming/src/paletteDark.ts index fade508d6e76..5ac55f48691b 100644 --- a/ee/packages/ui-theming/src/paletteDark.ts +++ b/ee/packages/ui-theming/src/paletteDark.ts @@ -32,14 +32,16 @@ export const palette = [ description: 'These should be applied according to surfaces', list: [ { name: 'font-white', token: 'N800', color: '#2F343D' }, - { name: 'font-disabled', token: 'N700', color: '#6C727A' }, + { name: 'font-disabled', token: '', color: '#3E4146' }, { name: 'font-annotation', token: 'N600', color: '#9EA2A8' }, { name: 'font-hint', token: 'N600', color: '#9EA2A8' }, - { name: 'font-secondary-info', token: '', color: '#6C727A' }, + { name: 'font-secondary-info', token: '', color: '#9EA2A8' }, { name: 'font-default', token: 'N400', color: '#E4E7EA' }, { name: 'font-titles-labels', token: '', color: '#F2F3F5' }, - { name: 'font-info', token: '', color: '#417CD2' }, - { name: 'font-danger', token: '', color: '#C44F5E' }, + { name: 'font-info', token: '', color: '#739EDE' }, + { name: 'font-danger', token: '', color: '#CF6E7A' }, + { name: 'font-pure-black', token: '', color: '#2F343D' }, + { name: 'font-pure-white', token: '', color: '#FFFFFF' }, ], }, { @@ -49,9 +51,11 @@ export const palette = [ { name: 'status-background-info', token: '', color: '#A8C3EB' }, { name: 'status-background-success', token: '', color: '#C1EBDD' }, { name: 'status-background-warning', token: '', color: '#F2ECD9' }, + { name: 'status-background-warning-2', token: '', color: '#4E4731' }, { name: 'status-background-danger', token: '', color: '#FFBDC5' }, { name: 'status-background-service-1', token: '', color: '#FCE3CF' }, { name: 'status-background-service-2', token: '', color: '#EDD0F7' }, + { name: 'status-background-service-3', token: '', color: '#5F1477' }, ], }, { @@ -60,9 +64,11 @@ export const palette = [ { name: 'status-font-on-info', token: '', color: '#739EDE' }, { name: 'status-font-on-success', token: '', color: '#58AD90' }, { name: 'status-font-on-warning', token: '', color: '#C7AA66' }, + { name: 'status-font-on-warning-2', token: '', color: '#FFFFFF' }, { name: 'status-font-on-danger', token: '', color: '#D88892' }, { name: 'status-font-on-service-1', token: '', color: '#CA9163' }, { name: 'status-font-on-service-2 ', token: '', color: '#C393D2' }, + { name: 'status-font-on-service-3 ', token: '', color: '#FFFFFF' }, ], }, { @@ -75,6 +81,16 @@ export const palette = [ { name: 'badge-background-level-4', token: '', color: '#BB3E4E' }, ], }, + { + category: 'Elevation', + description: 'Elevation border and shadow levels', + list: [ + { name: 'shadow-elevation-border', token: '', color: '#EBECEF' }, + { name: 'shadow-elevation-1', token: '', color: 'rgba(9, 9, 9, 0.35)' }, + { name: 'shadow-elevation-2x', token: '', color: 'rgba(9, 9, 9, 0.3)' }, + { name: 'shadow-elevation-2y', token: '', color: 'rgba(9, 9, 9, 0.45)' }, + ], + }, { category: 'Button', description: 'Primary Background', diff --git a/packages/livechat/src/components/helpers.js b/packages/livechat/src/components/helpers.js index 0223813ae326..f7319445ffc6 100644 --- a/packages/livechat/src/components/helpers.js +++ b/packages/livechat/src/components/helpers.js @@ -129,7 +129,7 @@ export const msgTypesNotRendered = ['livechat_video_call', 'livechat_navigation_ export const canRenderMessage = ({ t }) => !msgTypesNotRendered.includes(t); -export const getAttachmentUrl = (url) => `${Livechat.client.host}${url}`; +export const getAttachmentUrl = (url) => new URL(url, Livechat.client.host).toString(); export const sortArrayByColumn = (array, column, inverted) => array.sort((a, b) => { diff --git a/packages/ui-contexts/src/UserContext.ts b/packages/ui-contexts/src/UserContext.ts index 712149d83833..9fa335e95ce1 100644 --- a/packages/ui-contexts/src/UserContext.ts +++ b/packages/ui-contexts/src/UserContext.ts @@ -34,8 +34,7 @@ export type LoginService = { service: string; buttonLabelText?: string; - buttonLabelColor?: string; - buttonColor?: string; + icon?: string; }; export type UserContextValue = { diff --git a/packages/web-ui-registration/src/LoginForm.tsx b/packages/web-ui-registration/src/LoginForm.tsx index 0ca5cdbc5e4c..89225ff354ad 100644 --- a/packages/web-ui-registration/src/LoginForm.tsx +++ b/packages/web-ui-registration/src/LoginForm.tsx @@ -11,7 +11,7 @@ import { Trans, useTranslation } from 'react-i18next'; import EmailConfirmationForm from './EmailConfirmationForm'; import type { DispatchLoginRouter } from './hooks/useLoginRouter'; -import Services from './Services'; +import LoginServices from './LoginServices'; type LoginErrors = | 'error-user-is-not-activated' @@ -38,14 +38,10 @@ export const LoginForm = ({ setLoginRoute }: { setLoginRoute: DispatchLoginRoute mode: 'onChange', }); + const { t } = useTranslation(); const formLabelId = useUniqueId(); - const [errorOnSubmit, setErrorOnSubmit] = useState(undefined); - const isResetPasswordAllowed = useSetting('Accounts_PasswordReset'); - - const { t } = useTranslation(); - const login = useLoginWithPassword(); const loginMutation: UseMutationResult< @@ -71,8 +67,8 @@ export const LoginForm = ({ setLoginRoute }: { setLoginRoute: DispatchLoginRoute } setErrorOnSubmit('user-not-found'); - setError('username', { type: 'user-not-found', message: t('User_not_found') }); - setError('password', { type: 'user-not-found', message: t('User_not_found') }); + setError('username', { type: 'user-not-found', message: t('registration.component.login.userNotFound') }); + setError('password', { type: 'user-not-found', message: t('registration.component.login.incorrectPassword') }); }, }); @@ -100,7 +96,6 @@ export const LoginForm = ({ setLoginRoute }: { setLoginRoute: DispatchLoginRoute {t('registration.component.login')} - {t('registration.component.form.emailOrUsername')} @@ -109,7 +104,7 @@ export const LoginForm = ({ setLoginRoute }: { setLoginRoute: DispatchLoginRoute {...register('username', { required: true, })} - placeholder={t('registration.component.form.emailOrUsernamePlaceholder')} + placeholder={t('registration.component.form.emailPlaceholder')} error={ errors.username?.message || (errors.username?.type === 'required' ? t('registration.component.form.requiredField') : undefined) @@ -130,7 +125,6 @@ export const LoginForm = ({ setLoginRoute }: { setLoginRoute: DispatchLoginRoute {...register('password', { required: true, })} - placeholder='*****' error={ errors.password?.message || (errors.password?.type === 'required' ? t('registration.component.form.requiredField') : undefined) @@ -165,10 +159,13 @@ export const LoginForm = ({ setLoginRoute }: { setLoginRoute: DispatchLoginRoute {errorOnSubmit === 'error-app-user-is-not-allowed-to-login' && ( {t('registration.page.login.errors.AppUserNotAllowedToLogin')} )} + {errorOnSubmit === 'user-not-found' && {t('registration.page.login.errors.wrongCredentials')}} + {errorOnSubmit === 'error-login-blocked-for-ip' && ( {t('registration.page.login.errors.loginBlockedForIp')} )} + {errorOnSubmit === 'error-login-blocked-for-user' && ( {t('registration.page.login.errors.loginBlockedForUser')} )} @@ -176,21 +173,21 @@ export const LoginForm = ({ setLoginRoute }: { setLoginRoute: DispatchLoginRoute {errorOnSubmit === 'error-license-user-limit-reached' && ( {t('registration.page.login.errors.licenseUserLimitReached')} )} - {/* error-invalid-email */} -

- New here? setLoginRoute('register')}>Register + New here? setLoginRoute('register')}>Create an account

+ ); }; diff --git a/packages/web-ui-registration/src/Services.tsx b/packages/web-ui-registration/src/LoginServices.tsx similarity index 71% rename from packages/web-ui-registration/src/Services.tsx rename to packages/web-ui-registration/src/LoginServices.tsx index d67237932d4f..07152b15b589 100644 --- a/packages/web-ui-registration/src/Services.tsx +++ b/packages/web-ui-registration/src/LoginServices.tsx @@ -3,23 +3,24 @@ import { useLoginServices } from '@rocket.chat/ui-contexts'; import type { ReactElement } from 'react'; import { useTranslation } from 'react-i18next'; -import ServicesButton from './ServicesButton'; +import LoginServicesButton from './LoginServicesButton'; const Services = ({ disabled }: { disabled?: boolean }): ReactElement | null => { - const services = useLoginServices(); const { t } = useTranslation(); + const services = useLoginServices(); + if (services.length === 0) { return null; } return ( <> + {services.map((service) => ( - + ))} - ); }; diff --git a/packages/web-ui-registration/src/LoginServicesButton.tsx b/packages/web-ui-registration/src/LoginServicesButton.tsx new file mode 100644 index 000000000000..c00e7519bda5 --- /dev/null +++ b/packages/web-ui-registration/src/LoginServicesButton.tsx @@ -0,0 +1,38 @@ +import { Button, Icon } from '@rocket.chat/fuselage'; +import type { LoginService } from '@rocket.chat/ui-contexts'; +import { useLoginWithService, useTranslation } from '@rocket.chat/ui-contexts'; +import type { ReactElement, ComponentProps } from 'react'; + +const LoginServicesButton = ({ + buttonLabelText, + icon, + title, + clientConfig, + service, + className, + disabled, + ...props +}: T & { + className?: string; + disabled?: boolean; +}): ReactElement => { + const t = useTranslation(); + const handler = useLoginWithService({ service, buttonLabelText, title, clientConfig, ...props }); + + return ( + + ); +}; + +export default LoginServicesButton; diff --git a/packages/web-ui-registration/src/RegisterForm.tsx b/packages/web-ui-registration/src/RegisterForm.tsx index 8c17f48b66dd..ec83ba8f8a4d 100644 --- a/packages/web-ui-registration/src/RegisterForm.tsx +++ b/packages/web-ui-registration/src/RegisterForm.tsx @@ -63,7 +63,7 @@ export const LoginRegisterForm = ({ setLoginRoute }: { setLoginRoute: DispatchLo return (
- {t('Register')} + {t('Create_an_account')} @@ -74,7 +74,6 @@ export const LoginRegisterForm = ({ setLoginRoute }: { setLoginRoute: DispatchLo {...register('name', { required: requireNameForRegister, })} - placeholder={'Jon Doe'} error={ errors.name && t('The_field_is_required', { @@ -102,7 +101,7 @@ export const LoginRegisterForm = ({ setLoginRoute }: { setLoginRoute: DispatchLo {...register('email', { required: true, })} - placeholder={'your@email.com'} + placeholder='example@example.com' error={ errors.email && t('The_field_is_required', { @@ -138,7 +137,7 @@ export const LoginRegisterForm = ({ setLoginRoute }: { setLoginRoute: DispatchLo } aria-invalid={errors.username ? 'true' : undefined} id='username' - placeholder={t('Username')} + placeholder='jon.doe' /> {errors.username?.message && {errors.username.message}} @@ -153,7 +152,6 @@ export const LoginRegisterForm = ({ setLoginRoute }: { setLoginRoute: DispatchLo {...register('password', { required: t('The_field_is_required', { postProcess: 'sprintf', sprintf: [t('Password')] }), })} - placeholder='******' error={errors.password && (errors.password?.message || t('registration.component.form.requiredField'))} aria-invalid={errors.password ? 'true' : undefined} id='password' @@ -172,7 +170,6 @@ export const LoginRegisterForm = ({ setLoginRoute }: { setLoginRoute: DispatchLo validate: (val: string) => watch('password') === val, })} error={errors.passwordConfirmation?.type === 'validate' ? t('Invalid_confirm_pass') : undefined} - placeholder='******' aria-invalid={errors.passwordConfirmation ? 'true' : false} id='passwordConfirmation' /> @@ -215,8 +212,8 @@ export const LoginRegisterForm = ({ setLoginRoute }: { setLoginRoute: DispatchLo - (); @@ -42,7 +42,7 @@ export const ResetPasswordForm = ({ setLoginRoute }: { setLoginRoute: DispatchLo required: true, pattern: { value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i, - message: t('error-invalid-email-address'), + message: t('registration.page.resetPassword.errors.invalidEmail'), }, })} error={errors.email && (errors.email?.message || t('registration.component.form.requiredField'))} @@ -53,12 +53,11 @@ export const ResetPasswordForm = ({ setLoginRoute }: { setLoginRoute: DispatchLo /> {errors.email && {errors.email.message || t('registration.component.form.requiredField')}} - {t('registration.component.form.emailHint')} {sent && ( - + {t('registration.page.resetPassword.sent')} @@ -66,8 +65,8 @@ export const ResetPasswordForm = ({ setLoginRoute }: { setLoginRoute: DispatchLo - diff --git a/packages/web-ui-registration/src/ServicesButton.tsx b/packages/web-ui-registration/src/ServicesButton.tsx deleted file mode 100644 index d88838918dc4..000000000000 --- a/packages/web-ui-registration/src/ServicesButton.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { Button } from '@rocket.chat/fuselage'; -import type { LoginService } from '@rocket.chat/ui-contexts'; -import { useLoginWithService } from '@rocket.chat/ui-contexts'; -import type { ReactElement } from 'react'; - -const ServicesButton = ({ - buttonLabelColor, - buttonColor, - buttonLabelText, - title, - clientConfig, - service, - className, - disabled, - ...props -}: T & { - className?: string; - disabled?: boolean; -}): ReactElement => { - const handler = useLoginWithService({ service, buttonLabelColor, buttonColor, buttonLabelText, title, clientConfig, ...props }); - return ( - - ); -}; - -export default ServicesButton; diff --git a/packages/web-ui-registration/src/components/LoginPoweredBy.tsx b/packages/web-ui-registration/src/components/LoginPoweredBy.tsx index af32f792d071..a1d72f0d74aa 100644 --- a/packages/web-ui-registration/src/components/LoginPoweredBy.tsx +++ b/packages/web-ui-registration/src/components/LoginPoweredBy.tsx @@ -5,7 +5,7 @@ import React from 'react'; export const LoginPoweredBy = (): ReactElement => ( - {'Powered by '} + Powered by Rocket.Chat diff --git a/packages/web-ui-registration/src/components/RegisterTitle.tsx b/packages/web-ui-registration/src/components/RegisterTitle.tsx index cd196afcb9ed..8684947a20ba 100644 --- a/packages/web-ui-registration/src/components/RegisterTitle.tsx +++ b/packages/web-ui-registration/src/components/RegisterTitle.tsx @@ -1,17 +1,8 @@ -import { Box } from '@rocket.chat/fuselage'; import { useSetting } from '@rocket.chat/ui-contexts'; import type { ReactElement } from 'react'; import { Trans } from 'react-i18next'; export const RegisterTitle = (): ReactElement => { const siteName = String(useSetting('Site_Name')); - return ( - - Welcome to - - {' '} - {siteName} - - - ); + return Welcome to {siteName} workspace; }; diff --git a/yarn.lock b/yarn.lock index e2a85eab9b4a..b2dd112e86fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5385,9 +5385,9 @@ __metadata: languageName: unknown linkType: soft -"@rocket.chat/apps-engine@npm:^1.32.0": - version: 1.35.0 - resolution: "@rocket.chat/apps-engine@npm:1.35.0" +"@rocket.chat/apps-engine@npm:1.36.0-alpha.0.77": + version: 1.36.0-alpha.0.77 + resolution: "@rocket.chat/apps-engine@npm:1.36.0-alpha.0.77" dependencies: adm-zip: ^0.5.9 cryptiles: ^4.1.3 @@ -5396,13 +5396,13 @@ __metadata: stack-trace: 0.0.10 uuid: ^3.4.0 vm2: ^3.9.11 - checksum: 36c1aeeca2163a0bcde0de8f28eceedccb2cb0a55f014487c4924b72ba00e0969d9a28797a70aa40f8a6e3856b541608a0af251292b077e173c9e4fd9d0010f1 + checksum: 028e9e13620ae5427eb6253a96f4986f5a4a558b0696a5287dd0f364c286d7dbc3a30bdc05e55fdd3cc632ab4c3af710ff6429b811579197f130ac0306a554a4 languageName: node linkType: hard -"@rocket.chat/apps-engine@npm:alpha": - version: 1.36.0-alpha.0.75 - resolution: "@rocket.chat/apps-engine@npm:1.36.0-alpha.0.75" +"@rocket.chat/apps-engine@npm:^1.32.0": + version: 1.35.0 + resolution: "@rocket.chat/apps-engine@npm:1.35.0" dependencies: adm-zip: ^0.5.9 cryptiles: ^4.1.3 @@ -5411,7 +5411,7 @@ __metadata: stack-trace: 0.0.10 uuid: ^3.4.0 vm2: ^3.9.11 - checksum: 90f773f5f9be4a61bb14c50dabd992efa416617726e87aa89c0b2e04b47041dc3d429afed260d1188d9b072ad8c5998ffde12afcedbe9f7948c8ed8889178f85 + checksum: 36c1aeeca2163a0bcde0de8f28eceedccb2cb0a55f014487c4924b72ba00e0969d9a28797a70aa40f8a6e3856b541608a0af251292b077e173c9e4fd9d0010f1 languageName: node linkType: hard @@ -5487,25 +5487,25 @@ __metadata: languageName: unknown linkType: soft -"@rocket.chat/css-in-js@npm:next, @rocket.chat/css-in-js@npm:~0.31.22-dev.26": - version: 0.31.22-dev.26 - resolution: "@rocket.chat/css-in-js@npm:0.31.22-dev.26" +"@rocket.chat/css-in-js@npm:next, @rocket.chat/css-in-js@npm:~0.31.22-dev.30": + version: 0.31.22-dev.30 + resolution: "@rocket.chat/css-in-js@npm:0.31.22-dev.30" dependencies: "@emotion/hash": ^0.9.0 - "@rocket.chat/css-supports": ~0.31.22-dev.26 - "@rocket.chat/memo": ~0.31.22-dev.26 - "@rocket.chat/stylis-logical-props-middleware": ~0.31.22-dev.26 + "@rocket.chat/css-supports": ~0.31.22-dev.30 + "@rocket.chat/memo": ~0.31.22-dev.30 + "@rocket.chat/stylis-logical-props-middleware": ~0.31.22-dev.30 stylis: ~4.1.3 - checksum: da9908711cec81f3fac5d88ad18582658e2dd595e825b07162c46e413d87d42ee0f8dc88ab504887f1c492a870f1a9c16b75c1376b9d2421f76fcbd73fd31049 + checksum: 942808194eb940973dd0f531e2f54af0df6fca716c558ff8abb63ab30b6e05bf3bf50a1cd21ff9b7679328432fd7d1d438c58c1f8582ca6f587f7aee3a7f1b9b languageName: node linkType: hard -"@rocket.chat/css-supports@npm:~0.31.22-dev.26": - version: 0.31.22-dev.26 - resolution: "@rocket.chat/css-supports@npm:0.31.22-dev.26" +"@rocket.chat/css-supports@npm:~0.31.22-dev.30": + version: 0.31.22-dev.30 + resolution: "@rocket.chat/css-supports@npm:0.31.22-dev.30" dependencies: - "@rocket.chat/memo": ~0.31.22-dev.26 - checksum: 229f4e0d9e75378e4de72d4efb0943ba189c28fc5a37433d25fd06409d005f9392af8b6252facd54decb2461fdada3613bd63fdbda9f289fe9103171d244781f + "@rocket.chat/memo": ~0.31.22-dev.30 + checksum: db314a7666e6c40555838ad6dffb0f1d6a222aa7833931572cc16fe56bf76f576f278a4687d5a836099329dbcc78f0ea4fa3fff82cbe5df2f9d04de6c4b06fc7 languageName: node linkType: hard @@ -5551,9 +5551,9 @@ __metadata: linkType: soft "@rocket.chat/emitter@npm:next": - version: 0.31.22-dev.26 - resolution: "@rocket.chat/emitter@npm:0.31.22-dev.26" - checksum: 87b6b3b0efbe61d08ba81e03bfc704e03058b401a28b9389dc883fea382793c0d57b5348c2c96c6bcec912db5207ba4975435cceee9bba4e42b4877c6827dc92 + version: 0.31.22-dev.30 + resolution: "@rocket.chat/emitter@npm:0.31.22-dev.30" + checksum: c1ea859c2a3809d44ba118cb14422e0bc350652afd4d2e653555766938d68d8f130f227d194593aff695441c1a1e7fdf5cc885568adae3a558ef7efdfe80b540 languageName: node linkType: hard @@ -5656,21 +5656,21 @@ __metadata: languageName: node linkType: hard -"@rocket.chat/fuselage-hooks@npm:next, @rocket.chat/fuselage-hooks@npm:~0.32.0-dev.128": - version: 0.32.0-dev.128 - resolution: "@rocket.chat/fuselage-hooks@npm:0.32.0-dev.128" +"@rocket.chat/fuselage-hooks@npm:next, @rocket.chat/fuselage-hooks@npm:~0.32.0-dev.132": + version: 0.32.0-dev.132 + resolution: "@rocket.chat/fuselage-hooks@npm:0.32.0-dev.132" dependencies: use-sync-external-store: ~1.2.0 peerDependencies: "@rocket.chat/fuselage-tokens": "*" react: ^17.0.2 - checksum: 298c9026dfc6488713cbb084266ebd65d5ef62bc475c843445da4e58b64fcba293cf90ade7fc8a6824105ec4e4b0f4d3094fdf56eefc81a6cc205ca11418e881 + checksum: c1128f3df0b194638958e446f409eb9e462322751f1be66e196b773547c1bedd1a09dd9324422693cebd16b465b11d891bc9c2c68800b13e2e7148979869b42d languageName: node linkType: hard "@rocket.chat/fuselage-polyfills@npm:next": - version: 0.31.22-dev.26 - resolution: "@rocket.chat/fuselage-polyfills@npm:0.31.22-dev.26" + version: 0.31.22-dev.30 + resolution: "@rocket.chat/fuselage-polyfills@npm:0.31.22-dev.30" dependencies: "@juggle/resize-observer": ^3.4.0 clipboard-polyfill: ^3.0.3 @@ -5678,13 +5678,13 @@ __metadata: focus-visible: ^5.2.0 focus-within-polyfill: ^5.2.1 new-event-polyfill: ^1.0.1 - checksum: e8b1df33e7dafc56332550a4f9bbd8c64f3f664f27743ddfd5df26d023f1a03c21cbafa2591da97e01dca0084c45f6a3f9c7773f420a8a0030adff884b4e034e + checksum: 00dfddd4db11b6af14e6ff45626c8cba3ff4771424f936744b8f51f28f9b5835dcb9db44a94d67fe9f890797eb0d08febe458e95be4e3747ccf2b1419a51dd01 languageName: node linkType: hard "@rocket.chat/fuselage-toastbar@npm:next": - version: 0.32.0-dev.189 - resolution: "@rocket.chat/fuselage-toastbar@npm:0.32.0-dev.189" + version: 0.32.0-dev.193 + resolution: "@rocket.chat/fuselage-toastbar@npm:0.32.0-dev.193" peerDependencies: "@rocket.chat/fuselage": "*" "@rocket.chat/fuselage-hooks": "*" @@ -5692,14 +5692,14 @@ __metadata: "@rocket.chat/styled": "*" react: ^17.0.2 react-dom: ^17.0.2 - checksum: cb00b9a9e00c6bb20368453f2d10e77a8c0b1e6bbd2473adac4647c6e2222cbe80449c67451b2501723c31c497c9d0622477477a470141a5f4fbab1ff1c50402 + checksum: 381e73cf92509d0046ea5dbdd4656febdddb015599f23382691ac4be31e5c2788ae47da71d7c730990cb912f9c8c6db510c5c286e8c8b7b46dea0cd1edb213ef languageName: node linkType: hard -"@rocket.chat/fuselage-tokens@npm:next, @rocket.chat/fuselage-tokens@npm:~0.32.0-dev.165": - version: 0.32.0-dev.165 - resolution: "@rocket.chat/fuselage-tokens@npm:0.32.0-dev.165" - checksum: 44ce5a8c2d4be5b15ba09e7334de90daca4da16531b344e6974bd69ec9bf5e842949dd453377b63670ed279630f635fd784bb4716fcab0f1a3692407f92fff2e +"@rocket.chat/fuselage-tokens@npm:next, @rocket.chat/fuselage-tokens@npm:~0.32.0-dev.169": + version: 0.32.0-dev.169 + resolution: "@rocket.chat/fuselage-tokens@npm:0.32.0-dev.169" + checksum: c98f477aa44e237ee05d661e05500561f2cba7da03e2a4b90f6b8ab1d4f6884c6957cbe3e158c06a8ee5c146a3770bf16b8cb46dcd8d6d108c3fcdf0b06904b9 languageName: node linkType: hard @@ -5759,14 +5759,14 @@ __metadata: linkType: soft "@rocket.chat/fuselage@npm:next": - version: 0.32.0-dev.215 - resolution: "@rocket.chat/fuselage@npm:0.32.0-dev.215" - dependencies: - "@rocket.chat/css-in-js": ~0.31.22-dev.26 - "@rocket.chat/css-supports": ~0.31.22-dev.26 - "@rocket.chat/fuselage-tokens": ~0.32.0-dev.165 - "@rocket.chat/memo": ~0.31.22-dev.26 - "@rocket.chat/styled": ~0.31.22-dev.26 + version: 0.32.0-dev.219 + resolution: "@rocket.chat/fuselage@npm:0.32.0-dev.219" + dependencies: + "@rocket.chat/css-in-js": ~0.31.22-dev.30 + "@rocket.chat/css-supports": ~0.31.22-dev.30 + "@rocket.chat/fuselage-tokens": ~0.32.0-dev.169 + "@rocket.chat/memo": ~0.31.22-dev.30 + "@rocket.chat/styled": ~0.31.22-dev.30 invariant: ^2.2.4 react-aria: ~3.19.0 react-keyed-flatten-children: ^1.3.0 @@ -5778,7 +5778,7 @@ __metadata: react: ^17.0.2 react-dom: ^17.0.2 react-virtuoso: 1.2.4 - checksum: 5226562b7c0c713e65d9a089a16c98ca12bd7d934101f2b8193a3c6c665a8665556d6f8d279e5d5a7cad38f22bb0248d45231a66fd60bc3c5b9068a056dd2a29 + checksum: 2d17c6b3d6ef2b623351aaa8b0f86e5eb5d4312c4607badec6c6cd7c72a4dd7b608192501fa0554c87c2bf229de63d1300b12fd07b6d369551525d05283bb084 languageName: node linkType: hard @@ -5844,21 +5844,21 @@ __metadata: linkType: soft "@rocket.chat/icons@npm:next": - version: 0.32.0-dev.197 - resolution: "@rocket.chat/icons@npm:0.32.0-dev.197" - checksum: 3c8c261cefb9497629af8fd1f76fbf84d57665ee26225de8846cb655055df5bcd3e3ff5af532a1a779f2e60fa56506eba48483961d490c7b54a701264b5d2a12 + version: 0.32.0-dev.201 + resolution: "@rocket.chat/icons@npm:0.32.0-dev.201" + checksum: ed28af2a0cce62e00fbedb0006b6b8c6720e364ebcd77887b71b218476260f748b2bbbbd51851f0f093f0f35680d66e8570ca40df10bab4f7126dedfff421431 languageName: node linkType: hard "@rocket.chat/layout@npm:next": - version: 0.32.0-dev.92 - resolution: "@rocket.chat/layout@npm:0.32.0-dev.92" + version: 0.32.0-dev.102 + resolution: "@rocket.chat/layout@npm:0.32.0-dev.102" peerDependencies: "@rocket.chat/fuselage": "*" react: 17.0.2 react-dom: 17.0.2 react-i18next: ~11.15.4 - checksum: 5338b0b44fded01b5fe237fde73594c428c2f17b268cbbe76da75296ee4ac7ada6c3ce49d58858b98b15060664ea0c6b06563bf58b33f1e803e69a02e3501131 + checksum: ded739fadfac1fae89060d5b4b13cd4057683f7737b39be8146f63f554bbd81d7b6406c5b40b8439c592a45d8c08bbc1cdd37d1cde0652f468a20a85ede3b20b languageName: node linkType: hard @@ -5944,30 +5944,30 @@ __metadata: linkType: soft "@rocket.chat/logo@npm:next": - version: 0.32.0-dev.165 - resolution: "@rocket.chat/logo@npm:0.32.0-dev.165" + version: 0.32.0-dev.169 + resolution: "@rocket.chat/logo@npm:0.32.0-dev.169" dependencies: - "@rocket.chat/fuselage-hooks": ~0.32.0-dev.128 - "@rocket.chat/styled": ~0.31.22-dev.26 + "@rocket.chat/fuselage-hooks": ~0.32.0-dev.132 + "@rocket.chat/styled": ~0.31.22-dev.30 tslib: ^2.3.1 peerDependencies: react: 17.0.2 react-dom: 17.0.2 - checksum: b65ce64ff99384964107474387316189959a1c057fb3ffc3a2af27451384279c22887893116e66e4a9d33ef3a23f088a386b37ca2c91779a749d8d290630c6b9 + checksum: eab63b52882332dda888beb88232232582f0e7424811003e017d6d7f7503270855ad9810443a380e1af6a31855c7795722bd2bf839eb0598c39f0e8e054e7b1c languageName: node linkType: hard -"@rocket.chat/memo@npm:next, @rocket.chat/memo@npm:~0.31.22-dev.26": - version: 0.31.22-dev.26 - resolution: "@rocket.chat/memo@npm:0.31.22-dev.26" - checksum: b7777726e54a02f9b9212101966bb12ad62a2ad7f2946b1d5b52ebc9fc7d2c2a37230613c91e176583fa55a002c0b227ec4c6095deb4b38d3d7de6e69e745edc +"@rocket.chat/memo@npm:next, @rocket.chat/memo@npm:~0.31.22-dev.30": + version: 0.31.22-dev.30 + resolution: "@rocket.chat/memo@npm:0.31.22-dev.30" + checksum: 2897d958d8b17d990252e22db2417f3265abe171456c0b84cad4391a93d4f3f23c4fe871d7fc47b189d98d7d8f1a47546196e0fc8ff076ae36997d7de8555d8e languageName: node linkType: hard "@rocket.chat/message-parser@npm:next": - version: 0.32.0-dev.163 - resolution: "@rocket.chat/message-parser@npm:0.32.0-dev.163" - checksum: 60e63e916d56aceaca5a59e24c662e96ce42c8b9cd32da3e3a1b212fdb85c4e3e10a9387e070683896dd37c9d7e45a1e3790f298bb11c3a337539fd60a908d96 + version: 0.32.0-dev.167 + resolution: "@rocket.chat/message-parser@npm:0.32.0-dev.167" + checksum: ab464d07b2548ff0daf39773a175bce27ec59475b6b292a5425fb216af6dc1df794a34ea5cabee33c4611cf8ea4b45df762e8db036a1d8a034e2806da7ba5dfb languageName: node linkType: hard @@ -5996,7 +5996,7 @@ __metadata: "@react-aria/color": ^3.0.0-beta.15 "@rocket.chat/agenda": "workspace:^" "@rocket.chat/api-client": "workspace:^" - "@rocket.chat/apps-engine": alpha + "@rocket.chat/apps-engine": 1.36.0-alpha.0.77 "@rocket.chat/cas-validate": "workspace:^" "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/css-in-js": next @@ -6345,8 +6345,8 @@ __metadata: linkType: hard "@rocket.chat/onboarding-ui@npm:next": - version: 0.32.0-dev.215 - resolution: "@rocket.chat/onboarding-ui@npm:0.32.0-dev.215" + version: 0.32.0-dev.219 + resolution: "@rocket.chat/onboarding-ui@npm:0.32.0-dev.219" dependencies: i18next: ~21.6.16 react-hook-form: ~7.27.1 @@ -6362,7 +6362,7 @@ __metadata: react: 17.0.2 react-dom: 17.0.2 react-i18next: ~11.15.4 - checksum: bb14cc326190363e6715f054a2ea6c72d29ea28d24794e51efa9f8cc246f67e827f2252e1bbcaa27ec197dfd9bb7d573d4c0e21d7bed4514e4cec0d9e9dff66c + checksum: 0fe7cd1d0e27c6b05f5644134c5449c6583e1a7b236d8d779abbd86d6486a82817b07167d00f6975a515711341fe0fd19fc6e96fc3c38849926f851d394e23c3 languageName: node linkType: hard @@ -6499,33 +6499,33 @@ __metadata: linkType: soft "@rocket.chat/string-helpers@npm:next": - version: 0.31.22-dev.26 - resolution: "@rocket.chat/string-helpers@npm:0.31.22-dev.26" + version: 0.31.22-dev.30 + resolution: "@rocket.chat/string-helpers@npm:0.31.22-dev.30" dependencies: tslib: ^2.3.1 - checksum: 19e708de59b58e3d7065000bb8113beedc5e3350ab793d854a7ed3ba3afaefd77d0d8f8eb611be9e0c54b6c5f0895baa5743d19f0f612ddae22b6d2f0ab870eb + checksum: 975c2806d620f0b86d799902b07b71f3c6818df338187df062e866aa0e720f8d9761e8f2e2a520e698c08c70173f1d701f50ac6eb0e27cbe152eb38ed07d7001 languageName: node linkType: hard -"@rocket.chat/styled@npm:next, @rocket.chat/styled@npm:~0.31.22-dev.26": - version: 0.31.22-dev.26 - resolution: "@rocket.chat/styled@npm:0.31.22-dev.26" +"@rocket.chat/styled@npm:next, @rocket.chat/styled@npm:~0.31.22-dev.30": + version: 0.31.22-dev.30 + resolution: "@rocket.chat/styled@npm:0.31.22-dev.30" dependencies: - "@rocket.chat/css-in-js": ~0.31.22-dev.26 + "@rocket.chat/css-in-js": ~0.31.22-dev.30 tslib: ^2.3.1 - checksum: b505cc2aa4ea990c56a8fbce8fbbd4230e1a95c6bb81dc9ed97e12be8dfe32ee0ee9000d06efb1aa3cca5cebea0f37c57264a814f20ce2c6d8794fcbbe05180f + checksum: b9cc8a132121be2d97db1d7efa574eb04211c620ec9c16d8bb85fe1fb07faf9c45c249f0bf71628b477ad42b8e7c232aaf0ce293908055d727d3d10b69dcd6c3 languageName: node linkType: hard -"@rocket.chat/stylis-logical-props-middleware@npm:~0.31.22-dev.26": - version: 0.31.22-dev.26 - resolution: "@rocket.chat/stylis-logical-props-middleware@npm:0.31.22-dev.26" +"@rocket.chat/stylis-logical-props-middleware@npm:~0.31.22-dev.30": + version: 0.31.22-dev.30 + resolution: "@rocket.chat/stylis-logical-props-middleware@npm:0.31.22-dev.30" dependencies: - "@rocket.chat/css-supports": ~0.31.22-dev.26 + "@rocket.chat/css-supports": ~0.31.22-dev.30 tslib: ^2.3.1 peerDependencies: stylis: 4.0.10 - checksum: d97cdd54f5fa5281520858be17d8ac35cb34ab161e4b4981ddf6823b1793ca6234da9a780565cb68b9bca0457775eb39e35559522bb55fa44ded9edec03ef921 + checksum: 2da5fae371ba0ad0315594dcc731bbbfe9be0c75e4cb69a1b83d7ef5ed1f17885aeecbf266b97fd6ad7f6ce265174e4362432d156166e4c10b281143e24fa424 languageName: node linkType: hard @@ -6642,9 +6642,9 @@ __metadata: linkType: soft "@rocket.chat/ui-kit@npm:next": - version: 0.32.0-dev.150 - resolution: "@rocket.chat/ui-kit@npm:0.32.0-dev.150" - checksum: 64de6ca64a78df6e8217c5202e32930dcecc97c83687e91b90c420885044b25de4ec5b5bb512a281153819498261a4d77c07a0e66ccb6e37cd61f45643ef2644 + version: 0.32.0-dev.154 + resolution: "@rocket.chat/ui-kit@npm:0.32.0-dev.154" + checksum: dadb7737c39b20b76ed10b841523445fc555f0833ad03df440aff397e1cabc03bb99e1d86375b53289babb07e497d03ba679996b7301da369d889a397c89bc81 languageName: node linkType: hard