From 054ee6679a25392edd28923aa29717d0fb62ca93 Mon Sep 17 00:00:00 2001 From: "marc.sirisak" Date: Tue, 8 Oct 2024 17:01:50 +0200 Subject: [PATCH] Squashed 'linked-dependencies/matrix-react-sdk/' changes from 225d19f9d90..892a9e658e8 892a9e658e8 Merge pull request #11 from tchapgouv/upgrade-v3.112.0 7cf9e10e21d Fix merge conflict v3.112.0 ebd1e11d284 Merge tag 'v3.112.0' into upgrade-v3.112.0 933885386ed v3.112.0 e4ed18297cf Upgrade dependency to matrix-js-sdk@34.7.0 3687ee382dd test(sso): add test for email precheck, registration and welcome component b32de09a709 v3.112.0-rc.0 08b3912de0f Upgrade dependency to matrix-js-sdk@34.7.0-rc.0 dd405ea582d Merge remote-tracking branch 'origin/develop' into staging f33e8026278 Fix untranslated keys being rendered in `/help` dialog (#90) cd850f5be67 v3.111.0 059db4db1b8 Merge pull request #106 from element-hq/backport-95-to-staging d30645f9084 Allow joining calls and video rooms without enabling the labs flags (#95) 39a0f6e17b0 Remove ts-ignores where no longer necessary (#89) c10bc6c7168 feat(sso): add feature flag to active sso flow 36fae00cf38 Change device isolation mode to set `errorOnVerifiedUserProblems` to `false` (#104) 33c900e3070 Remove right panel toggling behaviour on room header buttons (#100) 81bb56ae2bc Simplify Jest runs in CI to share failures with merge queue (#103) fe402e28bb9 Fix flaky mobile registration tests (#102) 0b3b499fc4a Fix label sync (#101) bd793a09707 Allow joining calls and video rooms without enabling the labs flags (#95) 4f391645e73 Ensure timeline search results are visible even in video rooms (#96) f28f1d998fe Improve error display for messages sent from insecure devices (#93) be2c1fcf641 Add labs option to exclude unverified devices (#92) 78cca0201a9 feat(sso): remove existing sso buttons 8962e8cdd3f Improve contrast for timestamps, date separators & spotlight trigger (#91) ef9e310a252 Pop right panel timeline when unmaximising widget to avoid double timeline (#94) fed6c34d440 feat(sso): add email domain precheck sso flow 81192f6989c Update dependency typescript to v5.6.2 (#71) 34d1875534c Open room settings on room header avatar click (#88) 3f678192752 Merge pull request #41 from element-hq/t3chguy/wat/230.1 e6404daf3c8 Update test assertions 9e4348e8f1b Update test assertions dd7479accb5 Merge branch 'develop' of github.com:element-hq/matrix-react-sdk into t3chguy/wat/230.1 ad94c39e500 Fix accessible label on left panel spotlight trigger (#87) 2e895da39f5 Crypto: fix display of device key (#86) df9d81398ab v3.110.0 1d5d0cc835f Upgrade dependency to matrix-js-sdk@34.6.0 3c267f9aa4f Update snapshots 3620c5ac624 Merge branch 'develop' into t3chguy/wat/230.1 a1bdceed3e5 Update dependency @types/node to v18.19.50 (#65) ef1d4f6c122 Grant Element Call widget capabilities for "raise hand" feature (#82) 47a9377d63d Update dependency @types/react to v17.0.82 (#66) 9aa09d4b156 Maybe fix flakey AddRemoveThreepid test (#81) d56b9ed9bd7 Update dependency eslint to v8.57.1 (#68) a248788ef9a Update peter-evans/create-pull-request digest to 5e91468 (#64) 1f5571062ea Mobile registration optimizations and tests (#62) 4be533813e1 Update dependency @sentry/browser to v8.30.0 (#69) b055908fa40 Update dependency css-tree to v3 (#74) d4c942d8136 Update playwright monorepo to v1.47.1 (#73) ed7e02ab790 Update dependency stylelint-scss to v6.6.0 (#70) 5058d664ddd Update Sibz/github-status-action digest to faaa4d9 (#63) cf8fe204526 Update dependency express to v4.20.0 [SECURITY] (#26) fe657027bda Update to use non deprecated methods to decode recovery key (#54) 490746e56aa Update to use non deprecated methods to derive key from passphrase (#55) 73843e5fe6b v3.110.0-rc.1 4776f87775f Ignore chat effect when older than 48h (#48) 0cc0ebe2ede Replace old reference of `matrix-org/matrix-react-sdk` by `element-hq/matrix-react-sdk` (#60) 3dd223c7dde Also add NPM_TOKEN (#57) 1e7631386e1 Playwright: factor out some common code (#49) 154bf33fa12 Manually clear orphaned recaptcha challenge overlay in android webviews (#53) d04d611f1e8 v3.110.0-rc.0 0bbed853dae Pass bot token through explicitly (#56) 6eb332f26d5 Upgrade dependency to matrix-js-sdk@34.6.0-rc.0 49d84a6b0f9 Merge remote-tracking branch 'origin/develop' into staging 7feb5a0b493 Merge branch 'develop' into t3chguy/wat/230.1 13e67ae0eb8 Add Release announcement for the pinning message list (#46) 1058af6adda Playwright test for E2E messages from deleted devices (#47) 78ac691f50b feat(settings): remove generalusersettingtab and use accountusersetting tabs, hide personal info c24661f660e [create-pull-request] automated change (#45) 59852773ad4 Unlabs feature pinning (#22) 74885c942fe Merge pull request #42 from element-hq/langleyd/mobile_registeration 20a4f0af995 Enforce config setting 3d89fc3bf25 Merge branch 'develop' of https://github.com/element-hq/matrix-react-sdk into langleyd/mobile_registeration 62d66f9d918 Remove accidental paste 0716434aa1c Allow hs_url as param on mobile_register a89f61a3578 Add error text and title with server name 9426fec8c7b Fix timeout type (#40) be59791db16 Add support for `org.matrix.cross_signing_reset` UIA stage flow (#34) 8044ce4c013 Fix tests b5058286e0e update test to work with newer Rust crypto (#32) 0244aaeb2f1 use window.dispatchEvent a6dec86374a Add mobile registration and dispatch event for mobile postmessage dance a6e98b0b634 Use `strong` over `b` for improved a11y semantics 6b384fe9c1f Fix huge usage bandwidth and performance issue of pinned message banner. (#37) 5740bdbd38c [create-pull-request] automated change (#39) 0e8cd5badd1 [create-pull-request] automated change (#38) eae9d9e248c Add timezone to user profile (#20) f31776378d0 Reverse pinned message list (#19) 85b4f17a567 [create-pull-request] automated change (#33) a701e3afd76 Add config option to force verification (#29) 75918f5b18a Reduce pinned message banner size (#28) 433c14e5a97 Log clearer errors when picklekey goes missing (#27) d337fba76ef Add labels file (#21) 03004a55fdc Change settings to true by default (#25) 07125f554d6 Remove release announcement of new header (#23) ccb1a61f56b [create-pull-request] automated change (#24) 51495e7d07d Remove pinned message list screenshot which are flacky (#17) 24fe2f239aa [create-pull-request] automated change (#18) 491f0cd08a2 Change license (#13) 4382c6721ea Change org to element-hq (#7) 461da985282 Merge pull request #10 from element-hq/dbkr/changelog_repos e8c0b65604c Merge branch 'develop' into dbkr/changelog_repos 6dd67b3e71c Merge pull request #11 from element-hq/dbkr/update_org_sonar c26ce7a0dd8 Merge branch 'develop' into dbkr/changelog_repos 3a42d2a2aba Merge branch 'develop' into dbkr/update_org_sonar d4771dd971c Merge pull request #3 from element-hq/dbkr/codeowners 58331fb2d1d Merge pull request #15 from element-hq/actions/localazy-download 0acc7dd5400 [create-pull-request] automated change 272fd759762 remove meangingless change 9fb871c8c53 poke the CI caa6f26e3be Merge pull request #14 from element-hq/actions/playwright-image-updates 92b3eb5427d [create-pull-request] automated change deeeffa1040 Update project key too 35f96b47a1a Update GH org in the sonar config file 9601be583bd Update tests f8da2577691 Update repos for changelog fetching 774222f74b8 Update codeowners to element-hq teams 78059e1ca65 Merge pull request #1 from element-hq/actions/playwright-image-updates eb14223e217 [create-pull-request] automated change 33791cab2d6 Merge pull request #12965 from matrix-org/florianduros/pinned-messages/analytics-event 08d1b6ceae6 Add analytics event for pinned messages bce710e34e2 Upgrade `@matrix-org/analytics-events` to `0.25.0` 5bfbca9eb07 Migrate all pinning checks and actions into `PinningUtils` (#12964) 26399237f6e Update browserslist (#12953) 649074273e8 Log phases in the verification process (#12963) cdffbdb81ad Add error handling for room publish toggle (#12941) 1e3320da1ee Pinned message list: prevent sender name to overflow pinned event tile (#12947) ab1e28bfeaf Compute with of content of pinned event tile (#12951) 60fe70b3cc3 Add a prefix to file, poll, image, video and audio in the pinned message banner (#12950) 9d8c5b6a1cc Update dependency @testing-library/jest-dom to v6.5.0 (#12957) dbc8c9f5b1a Update peter-evans/create-pull-request action to v7 (#12960) 33404e42fd0 Update stylelint (#12958) df82c8a84fa Update dependency @sentry/browser to v8.27.0 (#12956) 892b2979687 Update babel monorepo (#12955) 47699853157 Update dependency @types/node to v18.19.47 (#12954) 8f22eb64432 v3.109.0-rc.0 9c233ef5db3 Upgrade dependency to matrix-js-sdk@34.5.0-rc.0 6bfdb3e16b7 Fix read receipt animation (#12923) 5ff3fd67c44 [create-pull-request] automated change (#12949) 579cb6b03cf Update to 2.37.9 (#12943) f033b64b533 Display the indicator even with one message in pinned message banner (#12946) 41686bba584 Always display last pinned message on the banner (#12945) 1ac533e7306 Don't emit decrypted event for the banner (#12944) ae15bbe6e0c Allow user to set timezone (#12775) acc73427584 [create-pull-request] automated change (#12942) 3d41f5be032 [create-pull-request] automated change (#12938) 13ec19c22ef Sort the pinning message list in the same order than the banner (#12937) 19f8b447452 Implement download_file in widget driver (#12931) 2a450c095c0 Add `allowImportingTsExtensions` to tsconfig (#12939) d16ab09866d Display pinned messages on a banner at the top of a room (#12917) 8b2ded8a0ee [create-pull-request] automated change (#12935) 6fb8f6e66c9 Update all non-major dependencies (#12909) c6922c912e0 Fix reply message truncation on 2 lines (#12929) ea3c5cf7870 Fix pin/unpin slowness and non refresh from the message action bar (#12934) 43941efbdb4 Install deja-vu font in docker image (#12932) 71c31bbed88 [create-pull-request] automated change (#12926) 84210228411 Rename all the slow reporter stuff to cjs (#12933) 5b91dd88e1d Reset matrix-js-sdk back to develop branch e66807e0523 Merge branch 'master' into develop 30f84cd5a97 Update playwright image (#12930) f0a75d8ad57 Add a config option to control the default widget container height (#12893) e599428b74f Ignore desktop for minimum browser support. (#12928) 1b70b22c27f Update typescript-eslint monorepo to v7.18.0 (#12924) 8381e13338d Update stylelint (#12922) 5a9d7ba2d75 Remove unused CryptoCallbacks implementations (#12919) 69da1754cb9 Update babel monorepo (#12920) 08482377067 Update dependency @types/sanitize-html to v2.13.0 (#12921) 135d94c73d0 Update playwright monorepo to v1.46.1 (#12918) 670ed8155a4 Update dependency @sentry/browser to v8.26.0 (#12915) 35fb0689f1c Update dependency axe-core to v4.10.0 (#12916) 9671545f1b3 Update dependency eslint-plugin-unicorn to v55 (#12913) 5e56ce7f190 Update dependency husky to v9 (#12914) 70665d3ce38 RTE drafts (#12674) fdc5acd5a4a Update dependency @types/react-transition-group to v4.4.11 (#12912) 72d5659e298 Update dependency @types/node to v18.19.44 (#12911) 2768b9cbb21 Set entrypoints to use ./lib rather than ./src (#12906) a7e907e0e67 Add thread information in pinned message list (#12902) 3d80eff65bb Add Pin/Unpin action in quick access of the message action bar (#12897) 4064db1d022 [create-pull-request] automated change (#12907) 933a9c1ae3b Rename prettier config file to .cjs (#12903) git-subtree-dir: linked-dependencies/matrix-react-sdk git-subtree-split: 892a9e658e8a3f6fd225d2104b0e5001cd12ad7f --- .editorconfig | 16 +- .eslintrc.js | 2 - .github/CODEOWNERS | 23 +- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .github/labels.yml | 28 + .github/workflows/notify-element-web.yml | 2 +- .../workflows/playwright-image-updates.yaml | 2 +- .github/workflows/release.yml | 4 +- .github/workflows/sync-labels.yml | 21 + .github/workflows/tests.yml | 20 +- CHANGELOG.md | 52 + CONTRIBUTING.md | 4 +- LICENSE | 177 - LICENSE-AGPL-3.0 | 661 +++ LICENSE-GPL-3.0 | 674 +++ __mocks__/maplibre-gl.js | 14 +- __mocks__/workerFactoryMock.js | 14 +- jest.config.ts | 16 +- package.json | 45 +- playwright.config.ts | 14 +- playwright/@types/playwright-core.d.ts | 14 +- playwright/Dockerfile | 5 +- .../accessibility/keyboard-navigation.spec.ts | 14 +- .../e2e/app-loading/feature-detection.spec.ts | 14 +- .../app-loading/guest-registration.spec.ts | 14 +- .../app-loading/stored-credentials.spec.ts | 14 +- .../e2e/audio-player/audio-player.spec.ts | 14 +- .../e2e/chat-export/html-export.spec.ts | 14 +- playwright/e2e/composer/CIDER.spec.ts | 16 +- playwright/e2e/composer/RTE.spec.ts | 121 +- .../e2e/create-room/create-room.spec.ts | 16 +- playwright/e2e/crypto/backups.spec.ts | 14 +- .../e2e/crypto/complete-security.spec.ts | 14 +- playwright/e2e/crypto/crypto.spec.ts | 14 +- .../decryption-failure-messages.spec.ts | 14 +- playwright/e2e/crypto/dehydration.spec.ts | 14 +- .../e2e/crypto/device-verification.spec.ts | 14 +- playwright/e2e/crypto/event-shields.spec.ts | 97 +- .../e2e/crypto/invisible-crypto.spec.ts | 56 + playwright/e2e/crypto/logout.spec.ts | 14 +- playwright/e2e/crypto/migration.spec.ts | 16 +- .../test_indexeddb_cryptostore_dump/load.js | 16 +- .../e2e/crypto/user-verification.spec.ts | 14 +- playwright/e2e/crypto/utils.ts | 25 +- playwright/e2e/editing/editing.spec.ts | 14 +- .../e2e/file-upload/image-upload.spec.ts | 14 +- .../forgot-password/forgot-password.spec.ts | 14 +- .../get-openid-token.spec.ts | 16 +- .../e2e/integration-manager/kick.spec.ts | 16 +- .../integration-manager/read_events.spec.ts | 16 +- .../integration-manager/send_event.spec.ts | 16 +- playwright/e2e/integration-manager/utils.ts | 16 +- playwright/e2e/invite/invite-dialog.spec.ts | 14 +- .../e2e/knock/create-knock-room.spec.ts | 16 +- playwright/e2e/knock/knock-into-room.spec.ts | 14 +- playwright/e2e/knock/manage-knocks.spec.ts | 14 +- .../e2e/lazy-loading/lazy-loading.spec.ts | 14 +- playwright/e2e/left-panel/left-panel.spec.ts | 14 +- playwright/e2e/location/location.spec.ts | 14 +- playwright/e2e/login/consent.spec.ts | 14 +- playwright/e2e/login/login.spec.ts | 14 +- playwright/e2e/login/overwrite_login.spec.ts | 14 +- playwright/e2e/login/soft_logout.spec.ts | 14 +- playwright/e2e/login/utils.ts | 14 +- playwright/e2e/messages/messages.spec.ts | 75 +- playwright/e2e/oidc/index.ts | 14 +- playwright/e2e/oidc/oidc-aware.spec.ts | 14 +- playwright/e2e/oidc/oidc-native.spec.ts | 14 +- .../one-to-one-chat/one-to-one-chat.spec.ts | 14 +- playwright/e2e/permalinks/permalinks.spec.ts | 14 +- playwright/e2e/pinned-messages/index.ts | 74 +- .../pinned-messages/pinned-messages.spec.ts | 89 +- playwright/e2e/polls/pollHistory.spec.ts | 14 +- playwright/e2e/polls/polls.spec.ts | 14 +- playwright/e2e/presence/presence.spec.ts | 14 +- .../editing-messages-in-threads.spec.ts | 14 +- .../editing-messages-main-timeline.spec.ts | 14 +- .../editing-messages-thread-roots.spec.ts | 14 +- .../e2e/read-receipts/high-level.spec.ts | 14 +- playwright/e2e/read-receipts/index.ts | 17 +- .../read-receipts/message-ordering.spec.ts | 14 +- .../read-receipts/missing-referents.spec.ts | 14 +- .../new-messages-in-threads.spec.ts | 14 +- .../new-messages-main-timeline.spec.ts | 14 +- .../new-messages-thread-roots.spec.ts | 14 +- .../e2e/read-receipts/notifications.spec.ts | 14 +- .../reactions-in-threads.spec.ts | 14 +- .../reactions-main-timeline.spec.ts | 14 +- .../reactions-thread-roots.spec.ts | 14 +- .../e2e/read-receipts/read-receipts.spec.ts | 14 +- .../redactions-in-threads.spec.ts | 14 +- .../redactions-main-timeline.spec.ts | 14 +- .../redactions-thread-roots.spec.ts | 14 +- .../e2e/read-receipts/room-list-order.spec.ts | 14 +- playwright/e2e/register/email.spec.ts | 14 +- playwright/e2e/register/register.spec.ts | 14 +- .../pills-click-in-app.spec.ts | 14 +- playwright/e2e/release-announcement/index.ts | 16 +- .../releaseAnnouncement.spec.ts | 16 +- playwright/e2e/right-panel/file-panel.spec.ts | 14 +- .../right-panel/notification-panel.spec.ts | 14 +- .../e2e/right-panel/right-panel.spec.ts | 14 +- playwright/e2e/right-panel/utils.ts | 14 +- .../e2e/room-directory/room-directory.spec.ts | 14 +- playwright/e2e/room/room-header.spec.ts | 20 +- playwright/e2e/room/room.spec.ts | 14 +- .../e2e/room_options/marked_unread.spec.ts | 14 +- .../account-user-settings-tab.spec.ts | 14 +- .../appearance-user-settings-tab.spec.ts | 14 +- .../appearance-user-settings-tab/index.ts | 14 +- .../message-layout-panel.ts | 14 +- .../theme-choice-panel.spec.ts | 14 +- .../e2e/settings/device-management.spec.ts | 14 +- .../general-room-settings-tab.spec.ts | 14 +- .../preferences-user-settings-tab.spec.ts | 40 +- ...oles-permissions-room-settings-tab.spec.ts | 16 +- .../security-user-settings-tab.spec.ts | 16 +- .../e2e/sliding-sync/sliding-sync.spec.ts | 14 +- playwright/e2e/spaces/spaces.spec.ts | 14 +- .../spaces/threads-activity-centre/index.ts | 14 +- .../threadsActivityCentre.spec.ts | 16 +- playwright/e2e/spotlight/spotlight.spec.ts | 14 +- playwright/e2e/threads/threads.spec.ts | 14 +- playwright/e2e/timeline/timeline.spec.ts | 16 +- playwright/e2e/toasts/analytics-toast.spec.ts | 14 +- playwright/e2e/update/update.spec.ts | 14 +- playwright/e2e/user-menu/user-menu.spec.ts | 14 +- .../user-onboarding-new.spec.ts | 14 +- .../user-onboarding-old.spec.ts | 14 +- playwright/e2e/user-view/user-view.spec.ts | 14 +- playwright/e2e/utils.ts | 14 +- playwright/e2e/widgets/events.spec.ts | 16 +- playwright/e2e/widgets/layout.spec.ts | 16 +- playwright/e2e/widgets/stickers.spec.ts | 16 +- .../e2e/widgets/widget-pip-close.spec.ts | 16 +- playwright/element-web-test.ts | 15 +- playwright/flaky-reporter.ts | 14 +- playwright/global.d.ts | 14 +- playwright/pages/ElementAppPage.ts | 14 +- playwright/pages/Spotlight.ts | 14 +- playwright/pages/bot.ts | 103 +- playwright/pages/client.ts | 59 +- playwright/pages/crypto.ts | 14 +- playwright/pages/network.ts | 14 +- playwright/pages/settings.ts | 14 +- playwright/pages/timeline.ts | 14 +- playwright/pages/toasts.ts | 14 +- playwright/plugins/docker/index.ts | 14 +- .../plugins/homeserver/dendrite/index.ts | 14 +- playwright/plugins/homeserver/index.ts | 14 +- .../plugins/homeserver/synapse/index.ts | 16 +- playwright/plugins/mailhog/index.ts | 14 +- .../matrix-authentication-service/index.ts | 14 +- playwright/plugins/oauth_server/index.ts | 14 +- .../plugins/oauth_server/res/oauth/auth.html | 14 +- playwright/plugins/postgres/index.ts | 14 +- .../plugins/sliding-sync-proxy/index.ts | 14 +- playwright/plugins/utils/port.ts | 14 +- playwright/plugins/utils/rand.ts | 14 +- playwright/plugins/webserver/index.ts | 14 +- ...omSummaryCard-with-verified-e2ee-linux.png | Bin 23644 -> 24006 bytes .../message-edit-history-dialog-linux.png | Bin 7313 -> 7144 bytes ...reply-message-ltr-ltrdisplayname-linux.png | Bin 0 -> 6508 bytes ...reply-message-ltr-rtldisplayname-linux.png | Bin 0 -> 6548 bytes ...reply-message-trl-ltrdisplayname-linux.png | Bin 0 -> 6005 bytes ...reply-message-trl-rtldisplayname-linux.png | Bin 0 -> 6036 bytes .../pinned-message-banner-1-Msg1-linux.png | Bin 0 -> 1372 bytes .../pinned-message-banner-2-Msg1-linux.png | Bin 0 -> 4055 bytes .../pinned-message-banner-2-Msg2-linux.png | Bin 0 -> 4166 bytes .../pinned-message-banner-4-Msg1-linux.png | Bin 0 -> 4027 bytes .../pinned-message-banner-4-Msg2-linux.png | Bin 0 -> 4285 bytes .../pinned-message-banner-4-Msg3-linux.png | Bin 0 -> 4337 bytes .../pinned-message-banner-4-Msg4-linux.png | Bin 0 -> 4026 bytes .../pinned-messages-list-messages-2-linux.png | Bin 13654 -> 0 bytes .../pinned-messages-list-messages-3-linux.png | Bin 16907 -> 0 bytes .../Polls-Timeline-tile-no-votes-linux.png | Bin 16778 -> 15394 bytes ...iew-with-a-poll-on-bubble-layout-linux.png | Bin 22349 -> 22351 bytes ...View-with-a-poll-on-group-layout-linux.png | Bin 22276 -> 22263 bytes .../file-tiles-list-linux.png | Bin 40293 -> 37161 bytes .../with-name-and-address-linux.png | Bin 27689 -> 28127 bytes .../room-header-long-name-linux.png | Bin 6672 -> 6691 bytes ...ab-should-be-rendered-properly-1-linux.png | Bin 57703 -> 202796 bytes ...ly-to-the-location-on-ThreadView-linux.png | Bin 18801 -> 17979 bytes ...sed-gels-and-messages-irc-layout-linux.png | Bin 43755 -> 43777 bytes .../collapsed-gels-bubble-layout-linux.png | Bin 38703 -> 38726 bytes .../configured-room-irc-layout-linux.png | Bin 38723 -> 38741 bytes ...e-inline-start-margin-irc-layout-linux.png | Bin 48482 -> 48500 bytes ...ded-gels-and-messages-irc-layout-linux.png | Bin 52718 -> 52727 bytes .../expanded-gels-irc-layout-linux.png | Bin 48482 -> 48500 bytes .../expanded-gels-modern-layout-linux.png | Bin 48058 -> 48089 bytes ...anded-gels-redaction-placeholder-linux.png | Bin 51629 -> 51640 bytes .../highlighted-search-results-linux.png | Bin 17048 -> 17045 bytes ...strings-with-reply-bubble-layout-linux.png | Bin 96379 -> 96394 bytes ...ng-strings-with-reply-irc-layout-linux.png | Bin 95292 -> 95314 bytes ...strings-with-reply-modern-layout-linux.png | Bin 103482 -> 103497 bytes ...search-results-with-TextualEvent-linux.png | Bin 19894 -> 19899 bytes playwright/stale-screenshot-reporter.ts | 14 +- playwright/tsconfig.json | 3 +- res/css/_animations.pcss | 14 +- res/css/_common.pcss | 20 +- res/css/_components.pcss | 2 + res/css/_font-sizes.pcss | 14 +- res/css/_spacing.pcss | 14 +- .../views/beacon/_BeaconListItem.pcss | 14 +- .../views/beacon/_BeaconStatus.pcss | 14 +- .../views/beacon/_BeaconStatusTooltip.pcss | 14 +- .../views/beacon/_BeaconViewDialog.pcss | 14 +- .../views/beacon/_DialogOwnBeaconStatus.pcss | 14 +- .../views/beacon/_DialogSidebar.pcss | 14 +- .../beacon/_LeftPanelLiveShareWarning.pcss | 14 +- .../views/beacon/_LiveTimeRemaining.pcss | 14 +- .../views/beacon/_OwnBeaconStatus.pcss | 14 +- .../views/beacon/_RoomLiveShareWarning.pcss | 14 +- .../views/beacon/_ShareLatestLocation.pcss | 14 +- .../views/beacon/_StyledLiveBeaconIcon.pcss | 14 +- .../context_menus/_KebabContextMenu.pcss | 14 +- .../dialogs/polls/_PollDetailHeader.pcss | 14 +- .../views/dialogs/polls/_PollListItem.pcss | 14 +- .../dialogs/polls/_PollListItemEnded.pcss | 14 +- .../views/elements/_AppPermission.pcss | 16 +- .../views/elements/_AppWarning.pcss | 14 +- .../views/elements/_FilterDropdown.pcss | 14 +- .../views/elements/_FilterTabGroup.pcss | 14 +- .../components/views/elements/_LearnMore.pcss | 14 +- .../views/location/_EnableLiveShare.pcss | 14 +- .../views/location/_LiveDurationDropdown.pcss | 14 +- .../views/location/_LocationShareMenu.pcss | 14 +- .../components/views/location/_MapError.pcss | 14 +- .../views/location/_MapFallback.pcss | 14 +- .../components/views/location/_Marker.pcss | 14 +- .../views/location/_ShareDialogButtons.pcss | 14 +- .../components/views/location/_ShareType.pcss | 14 +- .../views/location/_ZoomButtons.pcss | 14 +- .../views/messages/_MBeaconBody.pcss | 14 +- .../shared/_MediaProcessingError.pcss | 14 +- res/css/components/views/pips/_WidgetPip.pcss | 14 +- .../components/views/polls/_PollOption.pcss | 14 +- .../views/settings/_AddRemoveThreepids.pcss | 16 +- .../devices/_CurrentDeviceSection.pcss | 14 +- .../devices/_DeviceDetailHeading.pcss | 14 +- .../settings/devices/_DeviceDetails.pcss | 14 +- .../devices/_DeviceExpandDetailsButton.pcss | 14 +- .../settings/devices/_DeviceSecurityCard.pcss | 14 +- .../views/settings/devices/_DeviceTile.pcss | 14 +- .../settings/devices/_DeviceTypeIcon.pcss | 14 +- .../settings/devices/_FilteredDeviceList.pcss | 14 +- .../devices/_FilteredDeviceListHeader.pcss | 14 +- .../devices/_SecurityRecommendations.pcss | 14 +- .../devices/_SelectableDeviceTile.pcss | 14 +- .../settings/shared/_SettingsSubsection.pcss | 18 +- .../shared/_SettingsSubsectionHeading.pcss | 14 +- .../views/spaces/_QuickThemeSwitcher.pcss | 14 +- .../components/views/typography/_Caption.pcss | 14 +- res/css/components/views/utils/_Box.pcss | 14 +- res/css/components/views/utils/_Flex.pcss | 14 +- res/css/compound/_Icon.pcss | 14 +- res/css/compound/_SuccessDialog.pcss | 14 +- res/css/structures/_AutoHideScrollbar.pcss | 15 +- res/css/structures/_AutocompleteInput.pcss | 14 +- res/css/structures/_BackdropPanel.pcss | 15 +- res/css/structures/_ContextualMenu.pcss | 16 +- res/css/structures/_ErrorMessage.pcss | 14 +- res/css/structures/_FileDropTarget.pcss | 14 +- res/css/structures/_FilePanel.pcss | 14 +- res/css/structures/_GenericDropdownMenu.pcss | 14 +- res/css/structures/_HomePage.pcss | 17 +- res/css/structures/_LargeLoader.pcss | 14 +- res/css/structures/_LeftPanel.pcss | 14 +- res/css/structures/_MainSplit.pcss | 15 +- res/css/structures/_MatrixChat.pcss | 14 +- res/css/structures/_MessagePanel.pcss | 14 +- .../structures/_NonUrgentToastContainer.pcss | 14 +- res/css/structures/_QuickSettingsButton.pcss | 14 +- res/css/structures/_RightPanel.pcss | 16 +- res/css/structures/_RoomSearch.pcss | 16 +- res/css/structures/_RoomStatusBar.pcss | 14 +- res/css/structures/_RoomView.pcss | 14 +- res/css/structures/_SearchBox.pcss | 14 +- res/css/structures/_SpaceHierarchy.pcss | 14 +- res/css/structures/_SpacePanel.pcss | 14 +- res/css/structures/_SpaceRoomView.pcss | 14 +- res/css/structures/_SplashPage.pcss | 14 +- res/css/structures/_TabbedView.pcss | 18 +- .../structures/_ThreadsActivityCentre.pcss | 20 +- res/css/structures/_ToastContainer.pcss | 14 +- res/css/structures/_UploadBar.pcss | 16 +- res/css/structures/_UserMenu.pcss | 14 +- res/css/structures/_ViewSource.pcss | 14 +- .../structures/auth/_CompleteSecurity.pcss | 14 +- .../auth/_ConfirmSessionLockTheftView.pcss | 14 +- res/css/structures/auth/_Login.pcss | 15 +- res/css/structures/auth/_LoginSplashView.pcss | 14 +- .../structures/auth/_MobileRegistration.pcss | 10 + res/css/structures/auth/_Registration.pcss | 14 +- .../auth/_SessionLockStolenView.pcss | 14 +- .../structures/auth/_SetupEncryptionBody.pcss | 14 +- .../views/audio_messages/_AudioPlayer.pcss | 14 +- .../audio_messages/_PlayPauseButton.pcss | 14 +- .../audio_messages/_PlaybackContainer.pcss | 16 +- res/css/views/audio_messages/_SeekBar.pcss | 14 +- res/css/views/audio_messages/_Waveform.pcss | 14 +- res/css/views/auth/_AuthBody.pcss | 18 +- res/css/views/auth/_AuthFooter.pcss | 15 +- res/css/views/auth/_AuthHeader.pcss | 15 +- res/css/views/auth/_AuthHeaderLogo.pcss | 15 +- res/css/views/auth/_AuthPage.pcss | 15 +- res/css/views/auth/_CompleteSecurityBody.pcss | 16 +- res/css/views/auth/_CountryDropdown.pcss | 15 +- .../auth/_InteractiveAuthEntryComponents.pcss | 16 +- res/css/views/auth/_LanguageSelector.pcss | 15 +- res/css/views/auth/_LoginWithQR.pcss | 14 +- res/css/views/auth/_PassphraseField.pcss | 14 +- res/css/views/auth/_Welcome.pcss | 15 +- res/css/views/avatars/_BaseAvatar.pcss | 14 +- .../views/avatars/_DecoratedRoomAvatar.pcss | 14 +- res/css/views/avatars/_WidgetAvatar.pcss | 14 +- .../views/avatars/_WithPresenceIndicator.pcss | 14 +- res/css/views/beta/_BetaCard.pcss | 14 +- .../context_menus/_DeviceContextMenu.pcss | 14 +- .../context_menus/_IconizedContextMenu.pcss | 16 +- .../context_menus/_LegacyCallContextMenu.pcss | 15 +- .../context_menus/_MessageContextMenu.pcss | 20 +- .../dialogs/_AddExistingToSpaceDialog.pcss | 14 +- .../dialogs/_AnalyticsLearnMoreDialog.pcss | 14 +- res/css/views/dialogs/_BugReportDialog.pcss | 14 +- res/css/views/dialogs/_BulkRedactDialog.pcss | 14 +- res/css/views/dialogs/_ChangelogDialog.pcss | 14 +- res/css/views/dialogs/_CompoundDialog.pcss | 14 +- .../_ConfirmSpaceUserActionDialog.pcss | 14 +- .../dialogs/_ConfirmUserActionDialog.pcss | 14 +- res/css/views/dialogs/_CreateRoomDialog.pcss | 14 +- .../views/dialogs/_CreateSubspaceDialog.pcss | 14 +- .../dialogs/_DeactivateAccountDialog.pcss | 15 +- res/css/views/dialogs/_DevtoolsDialog.pcss | 14 +- res/css/views/dialogs/_ExportDialog.pcss | 14 +- res/css/views/dialogs/_FeedbackDialog.pcss | 14 +- res/css/views/dialogs/_ForwardDialog.pcss | 14 +- .../_GenericFeatureFeedbackDialog.pcss | 14 +- res/css/views/dialogs/_IncomingSasDialog.pcss | 15 +- res/css/views/dialogs/_InviteDialog.pcss | 14 +- res/css/views/dialogs/_JoinRuleDropdown.pcss | 14 +- res/css/views/dialogs/_LeaveSpaceDialog.pcss | 14 +- .../views/dialogs/_LocationViewDialog.pcss | 14 +- res/css/views/dialogs/_LogoutDialog.pcss | 14 +- .../_ManageRestrictedJoinRuleDialog.pcss | 14 +- .../dialogs/_MessageEditHistoryDialog.pcss | 14 +- res/css/views/dialogs/_ModalWidgetDialog.pcss | 14 +- res/css/views/dialogs/_PollCreateDialog.pcss | 14 +- .../_RegistrationEmailPromptDialog.pcss | 14 +- .../views/dialogs/_RoomSettingsDialog.pcss | 15 +- .../dialogs/_RoomSettingsDialogBridges.pcss | 14 +- res/css/views/dialogs/_RoomUpgradeDialog.pcss | 15 +- .../dialogs/_RoomUpgradeWarningDialog.pcss | 16 +- .../views/dialogs/_ServerOfflineDialog.pcss | 14 +- .../views/dialogs/_ServerPickerDialog.pcss | 14 +- res/css/views/dialogs/_SetEmailDialog.pcss | 14 +- res/css/views/dialogs/_SettingsDialog.pcss | 15 +- res/css/views/dialogs/_ShareDialog.pcss | 15 +- .../dialogs/_SlashCommandHelpDialog.pcss | 15 +- .../dialogs/_SpacePreferencesDialog.pcss | 14 +- .../views/dialogs/_SpaceSettingsDialog.pcss | 14 +- res/css/views/dialogs/_SpotlightDialog.pcss | 14 +- res/css/views/dialogs/_TermsDialog.pcss | 14 +- res/css/views/dialogs/_UnpinAllDialog.pcss | 18 +- .../views/dialogs/_UntrustedDeviceDialog.pcss | 14 +- .../views/dialogs/_UploadConfirmDialog.pcss | 15 +- .../views/dialogs/_UserSettingsDialog.pcss | 15 +- res/css/views/dialogs/_VerifyEMailDialog.pcss | 14 +- .../_WidgetCapabilitiesPromptDialog.pcss | 14 +- .../security/_AccessSecretStorageDialog.pcss | 16 +- .../security/_CreateCrossSigningDialog.pcss | 14 +- .../security/_CreateKeyBackupDialog.pcss | 15 +- .../security/_CreateSecretStorageDialog.pcss | 16 +- .../security/_KeyBackupFailedDialog.pcss | 15 +- .../security/_RestoreKeyBackupDialog.pcss | 16 +- res/css/views/directory/_NetworkDropdown.pcss | 14 +- res/css/views/elements/_AccessibleButton.pcss | 14 +- res/css/views/elements/_CopyableText.pcss | 16 +- .../_DesktopCapturerSourcePicker.pcss | 14 +- .../elements/_DialPadBackspaceButton.pcss | 14 +- res/css/views/elements/_Dropdown.pcss | 14 +- res/css/views/elements/_EditableItemList.pcss | 15 +- res/css/views/elements/_ErrorBoundary.pcss | 14 +- res/css/views/elements/_ExternalLink.pcss | 14 +- res/css/views/elements/_FacePile.pcss | 14 +- res/css/views/elements/_Field.pcss | 15 +- .../elements/_GenericEventListSummary.pcss | 14 +- res/css/views/elements/_ImageView.pcss | 14 +- res/css/views/elements/_InfoTooltip.pcss | 14 +- res/css/views/elements/_InlineSpinner.pcss | 15 +- .../views/elements/_InteractiveTooltip.pcss | 16 +- res/css/views/elements/_InviteReason.pcss | 14 +- res/css/views/elements/_LabelledCheckbox.pcss | 14 +- res/css/views/elements/_LanguageDropdown.pcss | 14 +- .../views/elements/_MiniAvatarUploader.pcss | 14 +- res/css/views/elements/_Pill.pcss | 14 +- res/css/views/elements/_PowerSelector.pcss | 15 +- res/css/views/elements/_ProgressBar.pcss | 14 +- res/css/views/elements/_QRCode.pcss | 14 +- res/css/views/elements/_ReplyChain.pcss | 16 +- res/css/views/elements/_ResizeHandle.pcss | 15 +- res/css/views/elements/_RoomAliasField.pcss | 14 +- res/css/views/elements/_SSOButtons.pcss | 14 +- res/css/views/elements/_SearchWarning.pcss | 14 +- res/css/views/elements/_ServerPicker.pcss | 14 +- res/css/views/elements/_SettingsFlag.pcss | 14 +- res/css/views/elements/_Spinner.pcss | 16 +- res/css/views/elements/_StyledCheckbox.pcss | 14 +- .../views/elements/_StyledRadioButton.pcss | 14 +- res/css/views/elements/_SyntaxHighlight.pcss | 14 +- res/css/views/elements/_TagComposer.pcss | 14 +- res/css/views/elements/_TextWithTooltip.pcss | 15 +- res/css/views/elements/_ToggleSwitch.pcss | 15 +- res/css/views/elements/_Tooltip.pcss | 15 +- res/css/views/elements/_UseCaseSelection.pcss | 14 +- .../elements/_UseCaseSelectionButton.pcss | 14 +- res/css/views/elements/_Validation.pcss | 15 +- res/css/views/emojipicker/_EmojiPicker.pcss | 14 +- res/css/views/location/_LocationPicker.pcss | 14 +- res/css/views/messages/_CallEvent.pcss | 14 +- res/css/views/messages/_CreateEvent.pcss | 16 +- res/css/views/messages/_DateSeparator.pcss | 14 +- .../messages/_DecryptionFailureBody.pcss | 35 +- .../views/messages/_DisambiguatedProfile.pcss | 16 +- res/css/views/messages/_EventTileBubble.pcss | 14 +- res/css/views/messages/_HiddenBody.pcss | 12 +- res/css/views/messages/_JumpToDatePicker.pcss | 14 +- res/css/views/messages/_LegacyCallEvent.pcss | 14 +- res/css/views/messages/_MEmoteBody.pcss | 14 +- res/css/views/messages/_MFileBody.pcss | 16 +- res/css/views/messages/_MImageBody.pcss | 16 +- res/css/views/messages/_MImageReplyBody.pcss | 14 +- .../views/messages/_MJitsiWidgetEvent.pcss | 14 +- res/css/views/messages/_MLocationBody.pcss | 14 +- res/css/views/messages/_MNoticeBody.pcss | 14 +- res/css/views/messages/_MPollBody.pcss | 14 +- res/css/views/messages/_MPollEndBody.pcss | 14 +- res/css/views/messages/_MStickerBody.pcss | 15 +- res/css/views/messages/_MTextBody.pcss | 14 +- res/css/views/messages/_MVideoBody.pcss | 16 +- res/css/views/messages/_MediaBody.pcss | 14 +- res/css/views/messages/_MessageActionBar.pcss | 15 +- res/css/views/messages/_MessageTimestamp.pcss | 14 +- res/css/views/messages/_MjolnirBody.pcss | 14 +- res/css/views/messages/_ReactionsRow.pcss | 15 +- .../views/messages/_ReactionsRowButton.pcss | 15 +- res/css/views/messages/_RedactedBody.pcss | 12 +- res/css/views/messages/_RoomAvatarEvent.pcss | 14 +- res/css/views/messages/_TextualEvent.pcss | 14 +- .../views/messages/_TimelineSeparator.pcss | 16 +- res/css/views/messages/_UnknownBody.pcss | 13 +- res/css/views/messages/_ViewSourceEvent.pcss | 14 +- .../views/messages/_common_CryptoEvent.pcss | 14 +- .../views/polls/pollHistory/_PollHistory.pcss | 14 +- .../polls/pollHistory/_PollHistoryList.pcss | 14 +- res/css/views/right_panel/_BaseCard.pcss | 14 +- res/css/views/right_panel/_EmptyState.pcss | 14 +- .../views/right_panel/_EncryptionInfo.pcss | 14 +- .../views/right_panel/_ExtensionsCard.pcss | 14 +- .../right_panel/_PinnedMessagesCard.pcss | 14 +- .../views/right_panel/_RightPanelTabs.pcss | 14 +- .../views/right_panel/_RoomSummaryCard.pcss | 14 +- res/css/views/right_panel/_ThreadPanel.pcss | 16 +- res/css/views/right_panel/_TimelineCard.pcss | 16 +- res/css/views/right_panel/_UserInfo.pcss | 20 +- .../views/right_panel/_VerificationPanel.pcss | 14 +- res/css/views/right_panel/_WidgetCard.pcss | 14 +- .../views/room_settings/_AliasSettings.pcss | 15 +- res/css/views/rooms/_AppsDrawer.pcss | 16 +- res/css/views/rooms/_AuxPanel.pcss | 15 +- .../views/rooms/_BasicMessageComposer.pcss | 15 +- .../views/rooms/_DecryptionFailureBar.pcss | 14 +- res/css/views/rooms/_E2EIcon.pcss | 15 +- res/css/views/rooms/_EditMessageComposer.pcss | 15 +- res/css/views/rooms/_EmojiButton.pcss | 14 +- res/css/views/rooms/_EntityTile.pcss | 16 +- res/css/views/rooms/_EventBubbleTile.pcss | 14 +- res/css/views/rooms/_EventTile.pcss | 21 +- res/css/views/rooms/_HistoryTile.pcss | 14 +- res/css/views/rooms/_IRCLayout.pcss | 14 +- res/css/views/rooms/_JumpToBottomButton.pcss | 15 +- res/css/views/rooms/_LegacyRoomHeader.pcss | 16 +- res/css/views/rooms/_LinkPreviewGroup.pcss | 14 +- res/css/views/rooms/_LinkPreviewWidget.pcss | 14 +- res/css/views/rooms/_LiveContentSummary.pcss | 14 +- res/css/views/rooms/_MemberList.pcss | 14 +- res/css/views/rooms/_MessageComposer.pcss | 15 +- .../rooms/_MessageComposerFormatBar.pcss | 14 +- res/css/views/rooms/_NewRoomIntro.pcss | 14 +- res/css/views/rooms/_NotificationBadge.pcss | 14 +- res/css/views/rooms/_PinnedEventTile.pcss | 44 +- res/css/views/rooms/_PinnedMessageBanner.pcss | 116 + res/css/views/rooms/_PresenceLabel.pcss | 14 +- res/css/views/rooms/_ReadReceiptGroup.pcss | 14 +- res/css/views/rooms/_ReplyPreview.pcss | 14 +- res/css/views/rooms/_ReplyTile.pcss | 19 +- res/css/views/rooms/_RoomBreadcrumbs.pcss | 14 +- res/css/views/rooms/_RoomCallBanner.pcss | 14 +- res/css/views/rooms/_RoomHeader.pcss | 18 +- res/css/views/rooms/_RoomInfoLine.pcss | 14 +- res/css/views/rooms/_RoomKnocksBar.pcss | 14 +- res/css/views/rooms/_RoomList.pcss | 14 +- res/css/views/rooms/_RoomListHeader.pcss | 14 +- res/css/views/rooms/_RoomPreviewBar.pcss | 16 +- res/css/views/rooms/_RoomPreviewCard.pcss | 14 +- res/css/views/rooms/_RoomSearchAuxPanel.pcss | 14 +- res/css/views/rooms/_RoomSublist.pcss | 14 +- res/css/views/rooms/_RoomTile.pcss | 16 +- .../views/rooms/_RoomUpgradeWarningBar.pcss | 15 +- res/css/views/rooms/_SendMessageComposer.pcss | 14 +- .../views/rooms/_ThirdPartyMemberInfo.pcss | 14 +- res/css/views/rooms/_ThreadSummary.pcss | 14 +- .../views/rooms/_TopUnreadMessagesBar.pcss | 14 +- .../views/rooms/_VoiceRecordComposerTile.pcss | 14 +- res/css/views/rooms/_WhoIsTypingTile.pcss | 15 +- .../_EditWysiwygComposer.pcss | 14 +- .../_SendWysiwygComposer.pcss | 14 +- .../wysiwyg_composer/components/_Editor.pcss | 14 +- .../components/_FormattingButtons.pcss | 14 +- .../components/_LinkModal.pcss | 14 +- res/css/views/settings/_AvatarSetting.pcss | 14 +- .../views/settings/_CrossSigningPanel.pcss | 14 +- .../views/settings/_CryptographyPanel.pcss | 14 +- res/css/views/settings/_FontScalingPanel.pcss | 14 +- res/css/views/settings/_ImageSizePanel.pcss | 14 +- .../views/settings/_IntegrationManager.pcss | 14 +- res/css/views/settings/_JoinRuleSettings.pcss | 14 +- res/css/views/settings/_KeyboardShortcut.pcss | 16 +- res/css/views/settings/_LayoutSwitcher.pcss | 16 +- .../settings/_NotificationPusherSettings.pcss | 14 +- .../settings/_NotificationSettings2.pcss | 14 +- res/css/views/settings/_Notifications.pcss | 16 +- res/css/views/settings/_PhoneNumbers.pcss | 15 +- .../views/settings/_PowerLevelSelector.pcss | 20 +- .../views/settings/_RoomProfileSettings.pcss | 16 +- .../views/settings/_SecureBackupPanel.pcss | 16 +- res/css/views/settings/_SetIdServer.pcss | 16 +- .../settings/_SetIntegrationManager.pcss | 14 +- res/css/views/settings/_SettingsFieldset.pcss | 14 +- .../views/settings/_SpellCheckLanguages.pcss | 14 +- res/css/views/settings/_ThemeChoicePanel.pcss | 14 +- .../views/settings/_UpdateCheckButton.pcss | 14 +- .../views/settings/_UserProfileSettings.pcss | 16 +- .../views/settings/tabs/_SettingsBanner.pcss | 14 +- .../views/settings/tabs/_SettingsIndent.pcss | 14 +- .../views/settings/tabs/_SettingsSection.pcss | 15 +- res/css/views/settings/tabs/_SettingsTab.pcss | 15 +- .../tabs/room/_NotificationSettingsTab.pcss | 14 +- .../tabs/room/_PeopleRoomSettingsTab.pcss | 14 +- .../tabs/room/_RolesRoomSettingsTab.pcss | 15 +- .../tabs/room/_SecurityRoomSettingsTab.pcss | 15 +- .../tabs/user/_AppearanceUserSettingsTab.pcss | 16 +- .../tabs/user/_HelpUserSettingsTab.pcss | 16 +- .../tabs/user/_KeyboardUserSettingsTab.pcss | 16 +- .../tabs/user/_MjolnirUserSettingsTab.pcss | 14 +- .../user/_PreferencesUserSettingsTab.pcss | 16 +- .../tabs/user/_SecurityUserSettingsTab.pcss | 15 +- .../tabs/user/_SidebarUserSettingsTab.pcss | 14 +- res/css/views/spaces/_SpaceBasicSettings.pcss | 14 +- .../views/spaces/_SpaceChildrenPicker.pcss | 14 +- res/css/views/spaces/_SpaceCreateMenu.pcss | 14 +- res/css/views/spaces/_SpacePublicShare.pcss | 14 +- .../views/terms/_InlineTermsAgreement.pcss | 14 +- res/css/views/toasts/_AnalyticsToast.pcss | 14 +- res/css/views/toasts/_IncomingCallToast.pcss | 14 +- .../toasts/_IncomingLegacyCallToast.pcss | 16 +- .../toasts/_NonUrgentEchoFailureToast.pcss | 14 +- res/css/views/typography/_Heading.pcss | 16 +- .../_UserOnboardingButton.pcss | 14 +- .../_UserOnboardingHeader.pcss | 14 +- .../user-onboarding/_UserOnboardingList.pcss | 14 +- .../user-onboarding/_UserOnboardingPage.pcss | 14 +- .../user-onboarding/_UserOnboardingTask.pcss | 14 +- .../verification/_VerificationShowSas.pcss | 16 +- .../_LegacyCallViewButtons.pcss | 18 +- res/css/views/voip/_CallDuration.pcss | 14 +- res/css/views/voip/_CallView.pcss | 14 +- res/css/views/voip/_DialPad.pcss | 14 +- res/css/views/voip/_DialPadContextMenu.pcss | 14 +- res/css/views/voip/_DialPadModal.pcss | 14 +- res/css/views/voip/_LegacyCallPreview.pcss | 14 +- res/css/views/voip/_LegacyCallView.pcss | 18 +- .../views/voip/_LegacyCallViewForRoom.pcss | 14 +- res/css/views/voip/_LegacyCallViewHeader.pcss | 16 +- .../views/voip/_LegacyCallViewSidebar.pcss | 16 +- res/css/views/voip/_VideoFeed.pcss | 18 +- res/css/voice-broadcast/atoms/_LiveBadge.pcss | 14 +- .../atoms/_VoiceBroadcastControl.pcss | 14 +- .../atoms/_VoiceBroadcastHeader.pcss | 13 +- ...oiceBroadcastRecordingConnectionError.pcss | 14 +- .../atoms/_VoiceBroadcastRoomSubtitle.pcss | 14 +- .../molecules/_VoiceBroadcastBody.pcss | 14 +- res/themes/dark/css/_dark.pcss | 2 +- res/themes/light-custom/css/_custom.pcss | 14 +- res/themes/light/css/_light.pcss | 2 +- sonar-project.properties | 4 +- src/@types/common.ts | 14 +- src/@types/commonmark.ts | 14 +- src/@types/diff-dom.d.ts | 14 +- src/@types/electron-to-chromium.d.ts | 14 +- src/@types/global.d.ts | 16 +- src/@types/matrix-js-sdk.d.ts | 14 +- src/@types/opus-recorder.d.ts | 14 +- src/@types/png-chunks-extract.d.ts | 14 +- src/@types/polyfill.ts | 14 +- src/@types/raw-loader.d.ts | 14 +- src/@types/react.d.ts | 14 +- src/@types/sanitize-html.d.ts | 14 +- src/@types/svg.d.ts | 16 +- src/@types/worker-loader.d.ts | 14 +- src/AddThreepid.ts | 18 +- src/AsyncWrapper.tsx | 14 +- src/Avatar.ts | 14 +- src/BasePlatform.ts | 22 +- src/BlurhashEncoder.ts | 14 +- src/ContentMessages.ts | 18 +- src/DateUtils.ts | 35 +- src/DecryptionFailureTracker.ts | 16 +- src/DeviceListener.ts | 14 +- src/DraftCleaner.ts | 28 +- src/Editing.ts | 14 +- src/HtmlUtils.tsx | 18 +- src/IConfigOptions.ts | 19 +- src/IdentityAuthClient.tsx | 16 +- src/ImageUtils.ts | 16 +- src/KeyBindingsDefaults.ts | 16 +- src/KeyBindingsManager.ts | 16 +- src/Keyboard.ts | 18 +- src/LegacyCallHandler.tsx | 20 +- src/Lifecycle.ts | 53 +- src/Linkify.tsx | 14 +- src/Livestream.ts | 14 +- src/Login.ts | 14 +- src/Markdown.ts | 16 +- src/MatrixClientPeg.ts | 29 +- src/MediaDeviceHandler.ts | 16 +- src/Modal.tsx | 16 +- src/NodeAnimator.tsx | 14 +- src/Notifier.ts | 25 +- src/PageTypes.ts | 16 +- src/PasswordReset.ts | 16 +- src/PlatformPeg.ts | 16 +- src/PlaybackEncoder.ts | 14 +- src/PosthogAnalytics.ts | 14 +- src/PosthogTrackers.ts | 28 +- src/Presence.ts | 18 +- src/Registration.tsx | 15 +- src/Resend.ts | 14 +- src/Roles.ts | 14 +- src/RoomAliasCache.ts | 16 +- src/RoomInvite.tsx | 18 +- src/RoomNotifs.ts | 16 +- src/Rooms.ts | 16 +- src/ScalarAuthClient.ts | 16 +- src/ScalarMessaging.ts | 17 +- src/SdkConfig.ts | 16 +- src/Searching.ts | 16 +- src/SecurityManager.ts | 117 +- src/SendHistoryManager.ts | 14 +- src/SlashCommands.tsx | 20 +- src/SlidingSyncManager.ts | 14 +- src/SupportedBrowser.ts | 29 +- src/Terms.ts | 16 +- src/TextForEvent.tsx | 31 +- src/TimezoneHandler.ts | 47 + src/Typeguards.ts | 14 +- src/Unread.ts | 16 +- src/UserActivity.ts | 15 +- src/UserAddress.ts | 16 +- src/Views.ts | 17 +- src/VoipUserMapper.ts | 14 +- src/WhoIsTyping.ts | 14 +- src/WorkerManager.ts | 14 +- src/accessibility/KeyboardShortcutUtils.ts | 14 +- src/accessibility/KeyboardShortcuts.ts | 18 +- src/accessibility/LandmarkNavigation.ts | 14 +- src/accessibility/RovingTabIndex.tsx | 14 +- src/accessibility/Toolbar.tsx | 14 +- .../context_menu/ContextMenuButton.tsx | 18 +- .../context_menu/ContextMenuTooltipButton.tsx | 18 +- src/accessibility/context_menu/MenuGroup.tsx | 18 +- src/accessibility/context_menu/MenuItem.tsx | 18 +- .../context_menu/MenuItemCheckbox.tsx | 18 +- .../context_menu/MenuItemRadio.tsx | 18 +- .../context_menu/StyledMenuItemCheckbox.tsx | 18 +- .../context_menu/StyledMenuItemRadio.tsx | 18 +- .../roving/RovingAccessibleButton.tsx | 14 +- .../roving/RovingTabIndexWrapper.tsx | 14 +- src/accessibility/roving/types.ts | 14 +- src/actions/MatrixActionCreators.ts | 16 +- src/actions/RoomListActions.ts | 16 +- src/actions/actionCreators.ts | 16 +- .../handlers/viewUserDeviceSettings.ts | 14 +- .../eventindex/DisableEventIndexDialog.tsx | 14 +- .../eventindex/ManageEventIndexDialog.tsx | 16 +- .../security/CreateKeyBackupDialog.tsx | 16 +- .../security/CreateSecretStorageDialog.tsx | 16 +- .../dialogs/security/ExportE2eKeysDialog.tsx | 16 +- .../dialogs/security/ImportE2eKeysDialog.tsx | 16 +- .../security/NewRecoveryMethodDialog.tsx | 16 +- .../security/RecoveryMethodRemovedDialog.tsx | 16 +- src/audio/BackgroundAudio.ts | 14 +- src/audio/ManagedPlayback.ts | 14 +- src/audio/Playback.ts | 14 +- src/audio/PlaybackClock.ts | 14 +- src/audio/PlaybackManager.ts | 14 +- src/audio/PlaybackQueue.ts | 16 +- src/audio/RecorderWorklet.ts | 14 +- src/audio/VoiceMessageRecording.ts | 14 +- src/audio/VoiceRecording.ts | 14 +- src/audio/compat.ts | 14 +- src/audio/consts.ts | 14 +- src/audio/recorderWorkletFactory.ts | 14 +- src/autocomplete/AutocompleteProvider.tsx | 17 +- src/autocomplete/Autocompleter.ts | 15 +- src/autocomplete/CommandProvider.tsx | 18 +- src/autocomplete/Components.tsx | 14 +- src/autocomplete/EmojiProvider.tsx | 22 +- src/autocomplete/NotifProvider.tsx | 15 +- src/autocomplete/QueryMatcher.ts | 16 +- src/autocomplete/RoomProvider.tsx | 18 +- src/autocomplete/SpaceProvider.tsx | 14 +- src/autocomplete/UserProvider.tsx | 20 +- src/boundThreepids.ts | 14 +- src/call-types.ts | 14 +- .../structures/AutoHideScrollbar.tsx | 16 +- .../structures/AutocompleteInput.tsx | 14 +- src/components/structures/BackdropPanel.tsx | 15 +- src/components/structures/ContextMenu.tsx | 18 +- src/components/structures/EmbeddedPage.tsx | 17 +- src/components/structures/ErrorMessage.tsx | 14 +- src/components/structures/FileDropTarget.tsx | 14 +- src/components/structures/FilePanel.tsx | 16 +- .../structures/GenericDropdownMenu.tsx | 14 +- .../structures/GenericErrorPage.tsx | 15 +- src/components/structures/HomePage.tsx | 14 +- .../structures/IndicatorScrollbar.tsx | 15 +- src/components/structures/InteractiveAuth.tsx | 21 +- src/components/structures/LargeLoader.tsx | 14 +- src/components/structures/LeftPanel.tsx | 14 +- .../structures/LegacyCallEventGrouper.ts | 14 +- src/components/structures/LoggedInView.tsx | 48 +- src/components/structures/MainSplit.tsx | 16 +- src/components/structures/MatrixChat.tsx | 93 +- .../MatrixClientContextProvider.tsx | 14 +- src/components/structures/MessagePanel.tsx | 20 +- .../structures/NonUrgentToastContainer.tsx | 14 +- .../structures/NotificationPanel.tsx | 16 +- .../structures/PictureInPictureDragger.tsx | 15 +- src/components/structures/PipContainer.tsx | 16 +- .../structures/ReleaseAnnouncement.tsx | 16 +- src/components/structures/RightPanel.tsx | 19 +- src/components/structures/RoomSearch.tsx | 16 +- src/components/structures/RoomSearchView.tsx | 16 +- src/components/structures/RoomStatusBar.tsx | 14 +- .../RoomStatusBarUnsentMessages.tsx | 14 +- src/components/structures/RoomView.tsx | 56 +- src/components/structures/ScrollPanel.tsx | 16 +- src/components/structures/SearchBox.tsx | 16 +- src/components/structures/SpaceHierarchy.tsx | 16 +- src/components/structures/SpaceRoomView.tsx | 16 +- src/components/structures/SplashPage.tsx | 13 +- src/components/structures/TabbedView.tsx | 18 +- src/components/structures/ThreadPanel.tsx | 16 +- src/components/structures/ThreadView.tsx | 16 +- src/components/structures/TimelinePanel.tsx | 16 +- src/components/structures/ToastContainer.tsx | 14 +- src/components/structures/UploadBar.tsx | 16 +- src/components/structures/UserMenu.tsx | 14 +- src/components/structures/UserView.tsx | 15 +- src/components/structures/ViewSource.tsx | 16 +- .../WaitingForThirdPartyRoomView.tsx | 14 +- .../structures/auth/CompleteSecurity.tsx | 21 +- .../auth/ConfirmSessionLockTheftView.tsx | 14 +- src/components/structures/auth/E2eSetup.tsx | 14 +- .../structures/auth/ForgotPassword.tsx | 18 +- src/components/structures/auth/Login.tsx | 17 +- .../structures/auth/LoginSplashView.tsx | 14 +- .../structures/auth/Registration.tsx | 157 +- .../structures/auth/SessionLockStolenView.tsx | 14 +- .../structures/auth/SetupEncryptionBody.tsx | 16 +- src/components/structures/auth/SoftLogout.tsx | 14 +- .../auth/forgot-password/CheckEmail.tsx | 16 +- .../auth/forgot-password/EnterEmail.tsx | 16 +- .../auth/forgot-password/VerifyEmailModal.tsx | 16 +- .../auth/header/AuthHeaderContext.tsx | 14 +- .../auth/header/AuthHeaderDisplay.tsx | 14 +- .../auth/header/AuthHeaderModifier.tsx | 14 +- .../auth/header/AuthHeaderProvider.tsx | 14 +- .../structures/grouper/BaseGrouper.ts | 14 +- .../structures/grouper/CreationGrouper.tsx | 14 +- .../structures/grouper/LateEventGrouper.ts | 14 +- .../structures/grouper/MainGrouper.tsx | 17 +- src/components/structures/static-page-vars.ts | 14 +- src/components/utils/Box.tsx | 14 +- src/components/utils/Flex.tsx | 14 +- .../views/audio_messages/AudioPlayer.tsx | 16 +- .../views/audio_messages/AudioPlayerBase.tsx | 16 +- src/components/views/audio_messages/Clock.tsx | 16 +- .../audio_messages/DevicesContextMenu.tsx | 16 +- .../views/audio_messages/DurationClock.tsx | 14 +- .../audio_messages/LiveRecordingClock.tsx | 14 +- .../audio_messages/LiveRecordingWaveform.tsx | 14 +- .../views/audio_messages/PlayPauseButton.tsx | 14 +- .../views/audio_messages/PlaybackClock.tsx | 16 +- .../views/audio_messages/PlaybackWaveform.tsx | 14 +- .../audio_messages/RecordingPlayback.tsx | 16 +- .../views/audio_messages/SeekBar.tsx | 14 +- .../views/audio_messages/Waveform.tsx | 14 +- src/components/views/auth/AuthBody.tsx | 15 +- src/components/views/auth/AuthFooter.tsx | 17 +- src/components/views/auth/AuthHeader.tsx | 15 +- src/components/views/auth/AuthHeaderLogo.tsx | 15 +- src/components/views/auth/AuthPage.tsx | 17 +- src/components/views/auth/CaptchaForm.tsx | 27 +- .../views/auth/CompleteSecurityBody.tsx | 14 +- src/components/views/auth/CountryDropdown.tsx | 14 +- src/components/views/auth/EmailField.tsx | 17 +- .../auth/InteractiveAuthEntryComponents.tsx | 75 +- .../views/auth/LanguageSelector.tsx | 15 +- .../views/auth/LoginWithQR-types.ts | 14 +- src/components/views/auth/LoginWithQR.tsx | 14 +- src/components/views/auth/LoginWithQRFlow.tsx | 18 +- .../views/auth/PassphraseConfirmField.tsx | 18 +- src/components/views/auth/PassphraseField.tsx | 17 +- src/components/views/auth/PasswordLogin.tsx | 16 +- .../views/auth/RegistrationForm.tsx | 53 +- src/components/views/auth/Welcome.tsx | 20 +- src/components/views/avatars/BaseAvatar.tsx | 23 +- .../views/avatars/DecoratedRoomAvatar.tsx | 14 +- src/components/views/avatars/MemberAvatar.tsx | 16 +- src/components/views/avatars/RoomAvatar.tsx | 14 +- .../views/avatars/SearchResultAvatar.tsx | 14 +- src/components/views/avatars/WidgetAvatar.tsx | 14 +- .../views/avatars/WithPresenceIndicator.tsx | 14 +- .../views/beacon/BeaconListItem.tsx | 14 +- src/components/views/beacon/BeaconMarker.tsx | 14 +- src/components/views/beacon/BeaconStatus.tsx | 14 +- .../views/beacon/BeaconStatusTooltip.tsx | 14 +- .../views/beacon/BeaconViewDialog.tsx | 14 +- .../views/beacon/DialogOwnBeaconStatus.tsx | 14 +- src/components/views/beacon/DialogSidebar.tsx | 14 +- .../beacon/LeftPanelLiveShareWarning.tsx | 14 +- .../views/beacon/LiveTimeRemaining.tsx | 14 +- .../views/beacon/OwnBeaconStatus.tsx | 14 +- .../views/beacon/RoomCallBanner.tsx | 14 +- .../views/beacon/RoomLiveShareWarning.tsx | 14 +- .../views/beacon/ShareLatestLocation.tsx | 14 +- .../views/beacon/StyledLiveBeaconIcon.tsx | 14 +- src/components/views/beacon/displayStatus.ts | 14 +- src/components/views/beacon/index.tsx | 14 +- src/components/views/beta/BetaCard.tsx | 14 +- .../context_menus/DeveloperToolsOption.tsx | 14 +- .../views/context_menus/DeviceContextMenu.tsx | 14 +- .../context_menus/DialpadContextMenu.tsx | 14 +- .../GenericElementContextMenu.tsx | 15 +- .../context_menus/GenericTextContextMenu.tsx | 14 +- .../context_menus/IconizedContextMenu.tsx | 14 +- .../views/context_menus/KebabContextMenu.tsx | 14 +- .../context_menus/LegacyCallContextMenu.tsx | 15 +- .../context_menus/MessageContextMenu.tsx | 85 +- .../views/context_menus/RoomContextMenu.tsx | 28 +- .../context_menus/RoomGeneralContextMenu.tsx | 16 +- .../RoomNotificationContextMenu.tsx | 14 +- .../views/context_menus/SpaceContextMenu.tsx | 14 +- .../context_menus/ThreadListContextMenu.tsx | 14 +- .../views/context_menus/WidgetContextMenu.tsx | 14 +- .../dialogs/AddExistingSubspaceDialog.tsx | 14 +- .../dialogs/AddExistingToSpaceDialog.tsx | 14 +- .../dialogs/AnalyticsLearnMoreDialog.tsx | 18 +- .../views/dialogs/AppDownloadDialog.tsx | 14 +- .../views/dialogs/AskInviteAnywayDialog.tsx | 16 +- src/components/views/dialogs/BaseDialog.tsx | 18 +- .../views/dialogs/BetaFeedbackDialog.tsx | 14 +- .../views/dialogs/BugReportDialog.tsx | 24 +- .../views/dialogs/BulkRedactDialog.tsx | 14 +- .../CantStartVoiceMessageBroadcastDialog.tsx | 14 +- .../views/dialogs/ChangelogDialog.tsx | 18 +- .../dialogs/ConfirmAndWaitRedactDialog.tsx | 14 +- .../views/dialogs/ConfirmRedactDialog.tsx | 14 +- .../dialogs/ConfirmSpaceUserActionDialog.tsx | 14 +- .../views/dialogs/ConfirmUserActionDialog.tsx | 14 +- .../views/dialogs/ConfirmWipeDeviceDialog.tsx | 14 +- .../views/dialogs/CreateRoomDialog.tsx | 24 +- .../views/dialogs/CreateSubspaceDialog.tsx | 18 +- .../views/dialogs/CryptoStoreTooNewDialog.tsx | 16 +- .../views/dialogs/DeactivateAccountDialog.tsx | 16 +- .../views/dialogs/DevtoolsDialog.tsx | 16 +- .../views/dialogs/EndPollDialog.tsx | 14 +- src/components/views/dialogs/ErrorDialog.tsx | 14 +- src/components/views/dialogs/ExportDialog.tsx | 14 +- .../views/dialogs/FeedbackDialog.tsx | 15 +- .../views/dialogs/ForwardDialog.tsx | 14 +- .../dialogs/GenericFeatureFeedbackDialog.tsx | 14 +- .../views/dialogs/IncomingSasDialog.tsx | 15 +- src/components/views/dialogs/InfoDialog.tsx | 16 +- .../dialogs/IntegrationsDisabledDialog.tsx | 14 +- .../dialogs/IntegrationsImpossibleDialog.tsx | 14 +- .../views/dialogs/InteractiveAuthDialog.tsx | 18 +- src/components/views/dialogs/InviteDialog.tsx | 16 +- .../views/dialogs/InviteDialogTypes.ts | 14 +- .../KeySignatureUploadFailedDialog.tsx | 14 +- .../views/dialogs/LeaveSpaceDialog.tsx | 16 +- src/components/views/dialogs/LogoutDialog.tsx | 16 +- .../ManageRestrictedJoinRuleDialog.tsx | 16 +- .../ManualDeviceKeyVerificationDialog.tsx | 22 +- .../dialogs/MessageEditHistoryDialog.tsx | 14 +- .../views/dialogs/ModalWidgetDialog.tsx | 14 +- .../views/dialogs/ModuleUiDialog.tsx | 14 +- .../views/dialogs/PollHistoryDialog.tsx | 14 +- .../views/dialogs/QuestionDialog.tsx | 15 +- .../dialogs/RegistrationEmailPromptDialog.tsx | 16 +- .../views/dialogs/ReportEventDialog.tsx | 16 +- .../views/dialogs/RoomSettingsDialog.tsx | 17 +- .../views/dialogs/RoomUpgradeDialog.tsx | 16 +- .../dialogs/RoomUpgradeWarningDialog.tsx | 18 +- .../views/dialogs/ScrollableBaseModal.tsx | 14 +- .../views/dialogs/ServerOfflineDialog.tsx | 14 +- .../views/dialogs/ServerPickerDialog.tsx | 16 +- .../views/dialogs/SeshatResetDialog.tsx | 14 +- .../dialogs/SessionRestoreErrorDialog.tsx | 18 +- .../views/dialogs/SetEmailDialog.tsx | 15 +- src/components/views/dialogs/ShareDialog.tsx | 16 +- .../views/dialogs/SlashCommandHelpDialog.tsx | 16 +- .../views/dialogs/SpacePreferencesDialog.tsx | 14 +- .../views/dialogs/SpaceSettingsDialog.tsx | 14 +- .../views/dialogs/StorageEvictedDialog.tsx | 15 +- src/components/views/dialogs/TermsDialog.tsx | 14 +- .../views/dialogs/TextInputDialog.tsx | 14 +- .../views/dialogs/UnpinAllDialog.tsx | 21 +- .../views/dialogs/UntrustedDeviceDialog.tsx | 16 +- .../views/dialogs/UploadConfirmDialog.tsx | 16 +- .../views/dialogs/UploadFailureDialog.tsx | 21 +- .../views/dialogs/UserSettingsDialog.tsx | 16 +- src/components/views/dialogs/UserTab.ts | 14 +- .../dialogs/VerificationRequestDialog.tsx | 16 +- .../WidgetCapabilitiesPromptDialog.tsx | 16 +- .../dialogs/WidgetOpenIDPermissionsDialog.tsx | 16 +- .../views/dialogs/devtools/AccountData.tsx | 16 +- .../views/dialogs/devtools/BaseTool.tsx | 16 +- .../views/dialogs/devtools/Event.tsx | 16 +- .../views/dialogs/devtools/FilteredList.tsx | 16 +- .../dialogs/devtools/RoomNotifications.tsx | 14 +- .../views/dialogs/devtools/RoomState.tsx | 16 +- .../views/dialogs/devtools/ServerInfo.tsx | 14 +- .../views/dialogs/devtools/ServersInRoom.tsx | 16 +- .../dialogs/devtools/SettingExplorer.tsx | 18 +- .../dialogs/devtools/VerificationExplorer.tsx | 16 +- .../views/dialogs/devtools/WidgetExplorer.tsx | 16 +- .../views/dialogs/oidc/OidcLogoutDialog.tsx | 14 +- .../security/AccessSecretStorageDialog.tsx | 17 +- .../ConfirmDestroyCrossSigningDialog.tsx | 14 +- .../security/CreateCrossSigningDialog.tsx | 16 +- .../security/RestoreKeyBackupDialog.tsx | 44 +- .../security/SetupEncryptionDialog.tsx | 14 +- .../views/dialogs/spotlight/Filter.ts | 16 +- .../views/dialogs/spotlight/Option.tsx | 14 +- .../spotlight/PublicRoomResultDetails.tsx | 14 +- .../spotlight/RoomResultContextMenus.tsx | 16 +- .../dialogs/spotlight/SpotlightDialog.tsx | 16 +- .../views/dialogs/spotlight/TooltipOption.tsx | 14 +- .../views/directory/NetworkDropdown.tsx | 14 +- .../views/elements/AccessibleButton.tsx | 16 +- .../views/elements/AppPermission.tsx | 18 +- src/components/views/elements/AppTile.tsx | 30 +- src/components/views/elements/AppWarning.tsx | 14 +- .../views/elements/CopyableText.tsx | 16 +- .../elements/DesktopCapturerSourcePicker.tsx | 14 +- .../views/elements/DialPadBackspaceButton.tsx | 14 +- .../views/elements/DialogButtons.tsx | 18 +- src/components/views/elements/Draggable.tsx | 14 +- src/components/views/elements/Dropdown.tsx | 16 +- .../views/elements/EditableItemList.tsx | 14 +- .../views/elements/EditableText.tsx | 15 +- .../views/elements/EditableTextContainer.tsx | 14 +- .../views/elements/EffectsOverlay.tsx | 40 +- .../views/elements/ErrorBoundary.tsx | 16 +- .../views/elements/EventListSummary.tsx | 16 +- .../views/elements/EventTilePreview.tsx | 14 +- .../views/elements/ExternalLink.tsx | 14 +- src/components/views/elements/FacePile.tsx | 14 +- src/components/views/elements/Field.tsx | 22 +- .../views/elements/FilterDropdown.tsx | 14 +- .../views/elements/FilterTabGroup.tsx | 14 +- .../elements/GenericEventListSummary.tsx | 16 +- .../elements/IRCTimelineProfileResizer.tsx | 14 +- src/components/views/elements/ImageView.tsx | 18 +- src/components/views/elements/InfoTooltip.tsx | 14 +- .../views/elements/InlineSpinner.tsx | 15 +- .../views/elements/InteractiveTooltip.tsx | 16 +- .../views/elements/InviteReason.tsx | 14 +- .../views/elements/JoinRuleDropdown.tsx | 14 +- .../views/elements/LabelledCheckbox.tsx | 14 +- .../views/elements/LabelledToggleSwitch.tsx | 16 +- .../views/elements/LanguageDropdown.tsx | 14 +- .../views/elements/LazyRenderList.tsx | 15 +- src/components/views/elements/LearnMore.tsx | 14 +- .../views/elements/LinkWithTooltip.tsx | 16 +- src/components/views/elements/Measured.tsx | 14 +- .../views/elements/MiniAvatarUploader.tsx | 14 +- .../views/elements/PersistedElement.tsx | 15 +- .../views/elements/PersistentApp.tsx | 16 +- src/components/views/elements/Pill.tsx | 16 +- .../views/elements/PollCreateDialog.tsx | 16 +- .../views/elements/PowerSelector.tsx | 14 +- src/components/views/elements/ProgressBar.tsx | 16 +- src/components/views/elements/QRCode.tsx | 14 +- src/components/views/elements/ReplyChain.tsx | 16 +- .../views/elements/ResizeHandle.tsx | 14 +- .../views/elements/RoomAliasField.tsx | 16 +- .../views/elements/RoomFacePile.tsx | 16 +- src/components/views/elements/RoomName.tsx | 14 +- src/components/views/elements/RoomTopic.tsx | 16 +- src/components/views/elements/SSOButtons.tsx | 14 +- .../views/elements/SearchWarning.tsx | 14 +- .../views/elements/ServerPicker.tsx | 16 +- .../views/elements/SettingsFlag.tsx | 16 +- .../elements/SpellCheckLanguagesDropdown.tsx | 14 +- src/components/views/elements/Spinner.tsx | 14 +- src/components/views/elements/Spoiler.tsx | 16 +- .../views/elements/StyledCheckbox.tsx | 14 +- .../views/elements/StyledRadioButton.tsx | 14 +- .../views/elements/StyledRadioGroup.tsx | 14 +- .../views/elements/SyntaxHighlight.tsx | 16 +- src/components/views/elements/Tag.tsx | 16 +- src/components/views/elements/TagComposer.tsx | 14 +- .../views/elements/TextWithTooltip.tsx | 15 +- .../views/elements/ToggleSwitch.tsx | 15 +- src/components/views/elements/Tooltip.tsx | 18 +- .../views/elements/TruncatedList.tsx | 15 +- .../views/elements/UseCaseSelection.tsx | 14 +- .../views/elements/UseCaseSelectionButton.tsx | 14 +- src/components/views/elements/Validation.tsx | 16 +- .../elements/crypto/VerificationQRCode.tsx | 14 +- src/components/views/emojipicker/Category.tsx | 16 +- src/components/views/emojipicker/Emoji.tsx | 16 +- .../views/emojipicker/EmojiPicker.tsx | 16 +- src/components/views/emojipicker/Header.tsx | 16 +- src/components/views/emojipicker/Preview.tsx | 16 +- .../views/emojipicker/QuickReactions.tsx | 16 +- .../views/emojipicker/ReactionPicker.tsx | 16 +- src/components/views/emojipicker/Search.tsx | 16 +- .../views/location/EnableLiveShare.tsx | 14 +- .../views/location/LiveDurationDropdown.tsx | 14 +- .../views/location/LocationButton.tsx | 14 +- .../views/location/LocationPicker.tsx | 14 +- .../views/location/LocationShareMenu.tsx | 14 +- .../views/location/LocationViewDialog.tsx | 14 +- src/components/views/location/Map.tsx | 14 +- src/components/views/location/MapError.tsx | 14 +- src/components/views/location/MapFallback.tsx | 14 +- src/components/views/location/Marker.tsx | 14 +- .../views/location/ShareDialogButtons.tsx | 14 +- src/components/views/location/ShareType.tsx | 14 +- src/components/views/location/SmartMarker.tsx | 14 +- src/components/views/location/ZoomButtons.tsx | 14 +- src/components/views/location/index.tsx | 14 +- .../views/location/shareLocation.ts | 14 +- src/components/views/messages/CallEvent.tsx | 14 +- .../views/messages/DateSeparator.tsx | 16 +- .../views/messages/DecryptionFailureBody.tsx | 48 +- .../views/messages/DisambiguatedProfile.tsx | 16 +- .../views/messages/DownloadActionButton.tsx | 14 +- .../views/messages/EditHistoryMessage.tsx | 14 +- .../views/messages/EncryptionEvent.tsx | 14 +- .../views/messages/EventTileBubble.tsx | 14 +- src/components/views/messages/HiddenBody.tsx | 14 +- src/components/views/messages/IBodyProps.ts | 14 +- src/components/views/messages/IMediaBody.ts | 14 +- .../views/messages/JumpToDatePicker.tsx | 14 +- .../views/messages/LegacyCallEvent.tsx | 14 +- src/components/views/messages/MAudioBody.tsx | 14 +- src/components/views/messages/MBeaconBody.tsx | 14 +- src/components/views/messages/MFileBody.tsx | 16 +- src/components/views/messages/MImageBody.tsx | 16 +- .../views/messages/MImageReplyBody.tsx | 16 +- .../views/messages/MJitsiWidgetEvent.tsx | 14 +- .../messages/MKeyVerificationRequest.tsx | 16 +- .../views/messages/MLocationBody.tsx | 14 +- src/components/views/messages/MPollBody.tsx | 14 +- .../views/messages/MPollEndBody.tsx | 14 +- .../views/messages/MStickerBody.tsx | 15 +- src/components/views/messages/MVideoBody.tsx | 16 +- .../views/messages/MVoiceMessageBody.tsx | 14 +- .../views/messages/MVoiceOrAudioBody.tsx | 14 +- .../views/messages/MessageActionBar.tsx | 68 +- .../views/messages/MessageEvent.tsx | 16 +- .../views/messages/MessageTimestamp.tsx | 16 +- src/components/views/messages/MjolnirBody.tsx | 14 +- .../views/messages/ReactionsRow.tsx | 16 +- .../views/messages/ReactionsRowButton.tsx | 16 +- .../messages/ReactionsRowButtonTooltip.tsx | 16 +- .../views/messages/RedactedBody.tsx | 16 +- .../views/messages/RoomAvatarEvent.tsx | 16 +- .../views/messages/RoomPredecessorTile.tsx | 16 +- .../views/messages/SenderProfile.tsx | 18 +- src/components/views/messages/TextualBody.tsx | 16 +- .../views/messages/TextualEvent.tsx | 16 +- .../views/messages/TileErrorBoundary.tsx | 16 +- .../views/messages/TimelineSeparator.tsx | 14 +- src/components/views/messages/UnknownBody.tsx | 16 +- .../views/messages/ViewSourceEvent.tsx | 14 +- .../messages/shared/MediaProcessingError.tsx | 14 +- src/components/views/pips/WidgetPip.tsx | 14 +- src/components/views/polls/PollOption.tsx | 14 +- .../views/polls/pollHistory/PollDetail.tsx | 14 +- .../polls/pollHistory/PollDetailHeader.tsx | 14 +- .../views/polls/pollHistory/PollHistory.tsx | 14 +- .../polls/pollHistory/PollHistoryList.tsx | 14 +- .../views/polls/pollHistory/PollListItem.tsx | 14 +- .../polls/pollHistory/PollListItemEnded.tsx | 14 +- .../views/polls/pollHistory/fetchPastPolls.ts | 14 +- .../views/polls/pollHistory/types.ts | 14 +- .../views/polls/pollHistory/usePollHistory.ts | 14 +- src/components/views/right_panel/BaseCard.tsx | 14 +- .../views/right_panel/EmptyState.tsx | 14 +- .../views/right_panel/EncryptionInfo.tsx | 14 +- .../views/right_panel/EncryptionPanel.tsx | 22 +- .../views/right_panel/ExtensionsCard.tsx | 14 +- .../views/right_panel/HeaderButton.tsx | 20 +- .../views/right_panel/HeaderButtons.tsx | 20 +- .../right_panel/LegacyRoomHeaderButtons.tsx | 44 +- .../views/right_panel/PinnedMessagesCard.tsx | 190 +- .../views/right_panel/RightPanelTabs.tsx | 18 +- .../views/right_panel/RoomSummaryCard.tsx | 56 +- .../views/right_panel/TimelineCard.tsx | 16 +- src/components/views/right_panel/UserInfo.tsx | 35 +- .../views/right_panel/VerificationPanel.tsx | 14 +- .../views/right_panel/WidgetCard.tsx | 14 +- src/components/views/right_panel/context.ts | 14 +- src/components/views/right_panel/types.ts | 14 +- .../views/room_settings/AliasSettings.tsx | 16 +- .../room_settings/RoomProfileSettings.tsx | 15 +- .../room_settings/RoomPublishSetting.tsx | 26 +- .../room_settings/UrlPreviewSettings.tsx | 20 +- src/components/views/rooms/AppsDrawer.tsx | 18 +- src/components/views/rooms/Autocomplete.tsx | 15 +- src/components/views/rooms/AuxPanel.tsx | 16 +- .../views/rooms/BasicMessageComposer.tsx | 16 +- .../views/rooms/CollapsibleButton.tsx | 14 +- src/components/views/rooms/E2EIcon.tsx | 16 +- .../views/rooms/EditMessageComposer.tsx | 16 +- src/components/views/rooms/EmojiButton.tsx | 14 +- src/components/views/rooms/EntityTile.tsx | 18 +- src/components/views/rooms/EventTile.tsx | 20 +- .../EventTile/EventTileThreadToolbar.tsx | 14 +- src/components/views/rooms/ExtraTile.tsx | 16 +- src/components/views/rooms/HistoryTile.tsx | 14 +- .../views/rooms/JumpToBottomButton.tsx | 15 +- .../views/rooms/LegacyRoomHeader.tsx | 92 +- .../views/rooms/LinkPreviewGroup.tsx | 14 +- .../views/rooms/LinkPreviewWidget.tsx | 16 +- .../views/rooms/LiveContentSummary.tsx | 14 +- src/components/views/rooms/MemberList.tsx | 20 +- src/components/views/rooms/MemberTile.tsx | 16 +- .../views/rooms/MessageComposer.tsx | 105 +- .../views/rooms/MessageComposerButtons.tsx | 14 +- .../views/rooms/MessageComposerFormatBar.tsx | 16 +- src/components/views/rooms/NewRoomIntro.tsx | 18 +- .../views/rooms/NotificationBadge.tsx | 14 +- .../StatelessNotificationBadge.tsx | 14 +- .../UnreadNotificationBadge.tsx | 14 +- .../views/rooms/PinnedEventTile.tsx | 91 +- .../views/rooms/PinnedMessageBanner.tsx | 318 ++ src/components/views/rooms/PresenceLabel.tsx | 14 +- .../views/rooms/ReadReceiptGroup.tsx | 30 +- .../views/rooms/ReadReceiptMarker.tsx | 74 +- src/components/views/rooms/ReplyPreview.tsx | 16 +- src/components/views/rooms/ReplyTile.tsx | 16 +- .../views/rooms/RoomBreadcrumbs.tsx | 14 +- .../views/rooms/RoomContextDetails.tsx | 14 +- src/components/views/rooms/RoomHeader.tsx | 80 +- .../rooms/RoomHeader/CallGuestLinkButton.tsx | 14 +- .../rooms/RoomHeader/VideoRoomChatButton.tsx | 16 +- src/components/views/rooms/RoomInfoLine.tsx | 18 +- src/components/views/rooms/RoomKnocksBar.tsx | 14 +- src/components/views/rooms/RoomList.tsx | 16 +- src/components/views/rooms/RoomListHeader.tsx | 16 +- src/components/views/rooms/RoomPreviewBar.tsx | 14 +- .../views/rooms/RoomPreviewCard.tsx | 46 +- .../views/rooms/RoomSearchAuxPanel.tsx | 16 +- src/components/views/rooms/RoomSublist.tsx | 18 +- src/components/views/rooms/RoomTile.tsx | 16 +- .../views/rooms/RoomTileCallSummary.tsx | 14 +- .../views/rooms/RoomTileSubtitle.tsx | 14 +- .../views/rooms/RoomUpgradeWarningBar.tsx | 16 +- .../views/rooms/SearchResultTile.tsx | 16 +- .../views/rooms/SendMessageComposer.tsx | 16 +- src/components/views/rooms/Stickerpicker.tsx | 15 +- .../views/rooms/ThirdPartyMemberInfo.tsx | 14 +- src/components/views/rooms/ThreadSummary.tsx | 14 +- .../views/rooms/TopUnreadMessagesBar.tsx | 16 +- .../views/rooms/VoiceRecordComposerTile.tsx | 16 +- .../views/rooms/WhoIsTypingTile.tsx | 15 +- .../rooms/wysiwyg_composer/ComposerContext.ts | 14 +- .../DynamicImportWysiwygComposer.tsx | 14 +- .../wysiwyg_composer/EditWysiwygComposer.tsx | 14 +- .../wysiwyg_composer/SendWysiwygComposer.tsx | 14 +- .../components/EditionButtons.tsx | 14 +- .../wysiwyg_composer/components/Editor.tsx | 14 +- .../wysiwyg_composer/components/Emoji.tsx | 14 +- .../components/FormattingButtons.tsx | 14 +- .../wysiwyg_composer/components/LinkModal.tsx | 14 +- .../components/PlainTextComposer.tsx | 14 +- .../components/WysiwygAutocomplete.tsx | 14 +- .../components/WysiwygComposer.tsx | 14 +- .../hooks/useComposerFunctions.ts | 14 +- .../wysiwyg_composer/hooks/useEditing.ts | 14 +- .../hooks/useInitialContent.ts | 14 +- .../hooks/useInputEventProcessor.ts | 14 +- .../wysiwyg_composer/hooks/useIsExpanded.ts | 14 +- .../wysiwyg_composer/hooks/useIsFocused.ts | 14 +- .../hooks/usePlainTextInitialization.ts | 14 +- .../hooks/usePlainTextListeners.ts | 14 +- .../wysiwyg_composer/hooks/useSelection.ts | 14 +- .../hooks/useSetCursorPosition.ts | 14 +- .../wysiwyg_composer/hooks/useSuggestion.ts | 14 +- .../hooks/useWysiwygEditActionHandler.ts | 14 +- .../hooks/useWysiwygSendActionHandler.ts | 14 +- .../rooms/wysiwyg_composer/hooks/utils.ts | 14 +- .../views/rooms/wysiwyg_composer/index.ts | 14 +- .../views/rooms/wysiwyg_composer/types.ts | 14 +- .../wysiwyg_composer/utils/autocomplete.ts | 14 +- .../utils/createMessageContent.ts | 14 +- .../rooms/wysiwyg_composer/utils/editing.ts | 14 +- .../rooms/wysiwyg_composer/utils/event.ts | 14 +- .../utils/isContentModified.ts | 14 +- .../rooms/wysiwyg_composer/utils/message.ts | 16 +- .../rooms/wysiwyg_composer/utils/selection.ts | 14 +- .../views/settings/AddPrivilegedUsers.tsx | 14 +- .../views/settings/AddRemoveThreepids.tsx | 14 +- .../views/settings/AvatarSetting.tsx | 16 +- src/components/views/settings/BridgeTile.tsx | 14 +- .../views/settings/ChangeDisplayName.tsx | 16 +- .../views/settings/ChangePassword.tsx | 15 +- .../views/settings/CrossSigningPanel.tsx | 14 +- .../views/settings/CryptographyPanel.tsx | 81 +- .../views/settings/EventIndexPanel.tsx | 16 +- .../views/settings/FontScalingPanel.tsx | 16 +- .../views/settings/ImageSizePanel.tsx | 14 +- .../views/settings/IntegrationManager.tsx | 16 +- .../views/settings/JoinRuleSettings.tsx | 18 +- .../views/settings/KeyboardShortcut.tsx | 14 +- .../views/settings/LayoutSwitcher.tsx | 14 +- .../views/settings/Notifications.tsx | 16 +- .../views/settings/PowerLevelSelector.tsx | 16 +- .../views/settings/SecureBackupPanel.tsx | 24 +- src/components/views/settings/SetIdServer.tsx | 28 +- .../views/settings/SetIntegrationManager.tsx | 16 +- .../views/settings/SettingsFieldset.tsx | 12 +- .../views/settings/SpellCheckSettings.tsx | 14 +- .../views/settings/ThemeChoicePanel.tsx | 14 +- .../views/settings/UpdateCheckButton.tsx | 14 +- .../settings/UserPersonalInfoSettings.tsx | 14 +- .../views/settings/UserProfileSettings.tsx | 16 +- .../settings/devices/CurrentDeviceSection.tsx | 14 +- .../settings/devices/DeviceDetailHeading.tsx | 14 +- .../views/settings/devices/DeviceDetails.tsx | 14 +- .../devices/DeviceExpandDetailsButton.tsx | 14 +- .../views/settings/devices/DeviceMetaData.tsx | 14 +- .../settings/devices/DeviceSecurityCard.tsx | 14 +- .../devices/DeviceSecurityLearnMore.tsx | 14 +- .../views/settings/devices/DeviceTile.tsx | 16 +- .../views/settings/devices/DeviceTypeIcon.tsx | 14 +- .../devices/DeviceVerificationStatusCard.tsx | 14 +- .../settings/devices/FilteredDeviceList.tsx | 14 +- .../devices/FilteredDeviceListHeader.tsx | 14 +- .../settings/devices/LoginWithQRSection.tsx | 14 +- .../devices/OtherSessionsSectionHeading.tsx | 14 +- .../devices/SecurityRecommendations.tsx | 14 +- .../settings/devices/SelectableDeviceTile.tsx | 14 +- .../views/settings/devices/deleteDevices.tsx | 14 +- .../views/settings/devices/filter.ts | 14 +- .../views/settings/devices/types.ts | 14 +- .../views/settings/devices/useOwnDevices.ts | 14 +- .../settings/discovery/DiscoverySettings.tsx | 14 +- .../NotificationPusherSettings.tsx | 14 +- .../notifications/NotificationSettings2.tsx | 14 +- .../views/settings/shared/SettingsBanner.tsx | 14 +- .../views/settings/shared/SettingsIndent.tsx | 14 +- .../views/settings/shared/SettingsSection.tsx | 16 +- .../settings/shared/SettingsSubsection.tsx | 14 +- .../shared/SettingsSubsectionHeading.tsx | 14 +- .../views/settings/tabs/SettingsTab.tsx | 14 +- .../tabs/room/AdvancedRoomSettingsTab.tsx | 18 +- .../settings/tabs/room/BridgeSettingsTab.tsx | 14 +- .../tabs/room/GeneralRoomSettingsTab.tsx | 15 +- .../tabs/room/NotificationSettingsTab.tsx | 16 +- .../tabs/room/PeopleRoomSettingsTab.tsx | 14 +- .../settings/tabs/room/PollHistoryTab.tsx | 14 +- .../tabs/room/RolesRoomSettingsTab.tsx | 18 +- .../tabs/room/SecurityRoomSettingsTab.tsx | 18 +- .../tabs/room/VoipRoomSettingsTab.tsx | 14 +- .../tabs/user/AccountUserSettingsTab.tsx | 19 +- .../tabs/user/AppearanceUserSettingsTab.tsx | 16 +- .../tabs/user/GeneralUserSettingsTab.tsx | 213 - .../tabs/user/HelpUserSettingsTab.tsx | 18 +- .../tabs/user/KeyboardUserSettingsTab.tsx | 16 +- .../tabs/user/LabsUserSettingsTab.tsx | 15 +- .../tabs/user/MjolnirUserSettingsTab.tsx | 14 +- .../tabs/user/NotificationUserSettingsTab.tsx | 14 +- .../tabs/user/PreferencesUserSettingsTab.tsx | 74 +- .../tabs/user/SecurityUserSettingsTab.tsx | 16 +- .../settings/tabs/user/SessionManagerTab.tsx | 14 +- .../tabs/user/SidebarUserSettingsTab.tsx | 16 +- .../tabs/user/VoiceUserSettingsTab.tsx | 16 +- .../views/spaces/QuickSettingsButton.tsx | 16 +- .../views/spaces/QuickThemeSwitcher.tsx | 14 +- .../views/spaces/SpaceBasicSettings.tsx | 14 +- .../views/spaces/SpaceChildrenPicker.tsx | 14 +- .../views/spaces/SpaceCreateMenu.tsx | 14 +- src/components/views/spaces/SpacePanel.tsx | 16 +- .../views/spaces/SpacePublicShare.tsx | 16 +- .../views/spaces/SpaceSettingsGeneralTab.tsx | 14 +- .../spaces/SpaceSettingsVisibilityTab.tsx | 18 +- .../views/spaces/SpaceTreeLevel.tsx | 16 +- .../ThreadsActivityCentre.tsx | 16 +- .../ThreadsActivityCentreButton.tsx | 16 +- .../spaces/threads-activity-centre/index.ts | 16 +- .../useUnreadThreadRooms.ts | 16 +- .../views/terms/InlineTermsAgreement.tsx | 14 +- .../views/toasts/GenericExpiringToast.tsx | 14 +- src/components/views/toasts/GenericToast.tsx | 16 +- .../toasts/NonUrgentEchoFailureToast.tsx | 14 +- .../views/toasts/VerificationRequestToast.tsx | 14 +- src/components/views/typography/Caption.tsx | 14 +- src/components/views/typography/Heading.tsx | 14 +- .../user-onboarding/UserOnboardingButton.tsx | 14 +- .../user-onboarding/UserOnboardingHeader.tsx | 14 +- .../user-onboarding/UserOnboardingList.tsx | 14 +- .../user-onboarding/UserOnboardingPage.tsx | 14 +- .../user-onboarding/UserOnboardingTask.tsx | 14 +- .../verification/VerificationCancelled.tsx | 14 +- .../verification/VerificationComplete.tsx | 14 +- .../verification/VerificationShowSas.tsx | 14 +- src/components/views/voip/AudioFeed.tsx | 14 +- .../voip/AudioFeedArrayForLegacyCall.tsx | 14 +- src/components/views/voip/CallDuration.tsx | 14 +- src/components/views/voip/CallView.tsx | 14 +- src/components/views/voip/DialPad.tsx | 14 +- src/components/views/voip/DialPadModal.tsx | 14 +- src/components/views/voip/LegacyCallView.tsx | 18 +- .../LegacyCallView/LegacyCallViewButtons.tsx | 18 +- .../LegacyCallView/LegacyCallViewHeader.tsx | 15 +- .../views/voip/LegacyCallViewForRoom.tsx | 16 +- .../views/voip/LegacyCallViewSidebar.tsx | 14 +- src/components/views/voip/VideoFeed.tsx | 18 +- .../LocalDeviceVerificationStateContext.ts | 14 +- src/contexts/MatrixClientContext.tsx | 14 +- src/contexts/RoomContext.ts | 15 +- src/contexts/SDKContext.ts | 14 +- src/contexts/ToastContext.tsx | 14 +- src/createRoom.ts | 16 +- src/customisations/Alias.ts | 14 +- src/customisations/ChatExport.ts | 14 +- src/customisations/ComponentVisibility.ts | 14 +- src/customisations/Directory.ts | 14 +- src/customisations/Lifecycle.ts | 14 +- src/customisations/Media.ts | 14 +- src/customisations/RoomList.ts | 14 +- src/customisations/Security.ts | 14 +- src/customisations/UserIdentifier.ts | 14 +- src/customisations/WidgetPermissions.ts | 14 +- src/customisations/WidgetVariables.ts | 14 +- src/customisations/helpers/UIComponents.ts | 14 +- .../models/IMediaEventContent.ts | 14 +- src/dispatcher/actions.ts | 19 +- src/dispatcher/dispatch-actions/threads.ts | 14 +- src/dispatcher/dispatcher.ts | 18 +- src/dispatcher/payloads.ts | 14 +- .../payloads/ActiveRoomChangedPayload.ts | 14 +- .../payloads/AfterLeaveRoomPayload.ts | 14 +- .../payloads/CancelAskToJoinPayload.ts | 14 +- .../payloads/CheckUpdatesPayload.ts | 14 +- .../payloads/ComposerInsertPayload.ts | 14 +- .../payloads/DoAfterSyncPreparedPayload.ts | 14 +- .../payloads/FocusComposerPayload.ts | 14 +- .../payloads/JoinRoomErrorPayload.ts | 14 +- src/dispatcher/payloads/JoinRoomPayload.ts | 14 +- .../payloads/JoinRoomReadyPayload.ts | 14 +- .../OpenAddExistingToSpaceDialogPayload.ts | 14 +- .../payloads/OpenForwardDialogPayload.ts | 14 +- .../payloads/OpenInviteDialogPayload.ts | 14 +- .../payloads/OpenReportEventDialogPayload.ts | 14 +- .../payloads/OpenSpacePreferencesPayload.ts | 14 +- .../payloads/OpenSpaceSettingsPayload.ts | 14 +- .../payloads/OpenSpotlightPayload.ts | 14 +- src/dispatcher/payloads/OpenToTabPayload.ts | 14 +- .../payloads/OverwriteLoginPayload.ts | 14 +- src/dispatcher/payloads/PlatformSetPayload.ts | 14 +- .../payloads/RecheckThemePayload.ts | 14 +- .../payloads/SettingUpdatedPayload.ts | 14 +- src/dispatcher/payloads/ShowThreadPayload.ts | 14 +- .../payloads/SubmitAskToJoinPayload.ts | 14 +- src/dispatcher/payloads/SwitchSpacePayload.ts | 14 +- src/dispatcher/payloads/ThreadPayload.ts | 14 +- .../payloads/UpdateFontSizeDeltaPayload.ts | 14 +- .../payloads/UpdateSystemFontPayload.ts | 14 +- src/dispatcher/payloads/UploadPayload.ts | 14 +- .../payloads/ViewHomePagePayload.ts | 14 +- .../payloads/ViewRoomDeltaPayload.ts | 14 +- .../payloads/ViewRoomErrorPayload.ts | 14 +- src/dispatcher/payloads/ViewRoomPayload.ts | 14 +- .../payloads/ViewStartChatOrReusePayload.ts | 14 +- src/dispatcher/payloads/ViewUserPayload.ts | 14 +- src/editor/autocomplete.ts | 15 +- src/editor/caret.ts | 15 +- src/editor/commands.tsx | 16 +- src/editor/deserialize.ts | 16 +- src/editor/diff.ts | 15 +- src/editor/dom.ts | 15 +- src/editor/history.ts | 14 +- src/editor/model.ts | 15 +- src/editor/offset.ts | 14 +- src/editor/operations.ts | 14 +- src/editor/parts.ts | 15 +- src/editor/position.ts | 14 +- src/editor/range.ts | 14 +- src/editor/render.ts | 15 +- src/editor/serialize.ts | 16 +- src/effects/ICanvasEffect.ts | 18 +- src/effects/confetti/index.ts | 20 +- src/effects/effect.ts | 18 +- src/effects/fireworks/index.ts | 20 +- src/effects/hearts/index.ts | 18 +- src/effects/index.ts | 18 +- src/effects/rainfall/index.ts | 18 +- src/effects/snowfall/index.ts | 16 +- src/effects/spaceinvaders/index.ts | 16 +- src/effects/utils.ts | 18 +- src/email.ts | 16 +- src/emojipicker/recent.ts | 16 +- src/events/EventTileFactory.tsx | 14 +- src/events/RelationsHelper.ts | 14 +- src/events/forward/getForwardableEvent.ts | 14 +- src/events/index.ts | 14 +- .../location/getShareableLocationEvent.ts | 14 +- src/hooks/room/useGuestAccessInformation.ts | 14 +- src/hooks/room/useRoomCall.ts | 22 +- src/hooks/room/useRoomMemberProfile.ts | 14 +- src/hooks/room/useRoomThreadNotifications.ts | 14 +- src/hooks/room/useTopic.ts | 14 +- src/hooks/spotlight/useDebouncedCallback.ts | 14 +- src/hooks/spotlight/useRecentSearches.ts | 14 +- src/hooks/useAccountData.ts | 14 +- src/hooks/useAnimation.ts | 14 +- src/hooks/useAsyncMemo.ts | 14 +- src/hooks/useAsyncRefreshMemo.ts | 14 +- src/hooks/useAudioDeviceSelection.ts | 14 +- src/hooks/useCall.ts | 14 +- src/hooks/useDispatcher.ts | 14 +- src/hooks/useEncryptionStatus.ts | 14 +- src/hooks/useEventEmitter.ts | 14 +- src/hooks/useFocus.ts | 14 +- src/hooks/useGlobalNotificationState.ts | 14 +- src/hooks/useHover.ts | 14 +- src/hooks/useIsEncrypted.ts | 14 +- src/hooks/useIsInitialSyncComplete.ts | 14 +- src/hooks/useIsReleaseAnnouncementOpen.ts | 16 +- src/hooks/useLatestResult.ts | 14 +- src/hooks/useLocalEcho.ts | 14 +- src/hooks/useLocalStorageState.ts | 14 +- src/hooks/useNotificationSettings.tsx | 14 +- src/hooks/usePermalink.ts | 14 +- src/hooks/usePermalinkEvent.ts | 14 +- src/hooks/usePermalinkMember.ts | 14 +- src/hooks/usePermalinkTargetRoom.ts | 14 +- src/hooks/usePinnedEvents.ts | 206 + src/hooks/useProfileInfo.ts | 14 +- src/hooks/usePublicRoomDirectory.ts | 14 +- src/hooks/usePushers.ts | 14 +- src/hooks/useRoomMembers.ts | 14 +- src/hooks/useRoomName.ts | 14 +- src/hooks/useRoomNotificationState.ts | 14 +- src/hooks/useRoomState.ts | 14 +- src/hooks/useSettings.ts | 14 +- src/hooks/useSlidingSyncRoomSearch.ts | 14 +- src/hooks/useSmoothAnimation.ts | 14 +- src/hooks/useSpaceResults.ts | 14 +- src/hooks/useStateArray.ts | 14 +- src/hooks/useStateCallback.ts | 14 +- src/hooks/useStateToggle.ts | 14 +- src/hooks/useTheme.ts | 14 +- src/hooks/useThreepids.ts | 14 +- src/hooks/useTimeout.ts | 14 +- src/hooks/useTimeoutToggle.ts | 14 +- src/hooks/useTransition.ts | 14 +- src/hooks/useUnreadNotifications.ts | 16 +- src/hooks/useUserDirectory.ts | 14 +- src/hooks/useUserOnboardingContext.ts | 14 +- src/hooks/useUserOnboardingTasks.ts | 14 +- src/hooks/useUserTimezone.ts | 106 + src/hooks/useWindowWidth.ts | 14 +- src/i18n/strings/en_EN.json | 43 +- src/i18n/strings/pl.json | 38 +- src/identifiers.ts | 14 +- src/index.ts | 16 +- src/indexing/BaseEventIndexManager.ts | 14 +- src/indexing/EventIndex.ts | 16 +- src/indexing/EventIndexPeg.ts | 14 +- .../IntegrationManagerInstance.ts | 14 +- src/integrations/IntegrationManagers.ts | 14 +- src/languageHandler.tsx | 18 +- src/linkify-matrix.ts | 16 +- src/mjolnir/BanList.ts | 14 +- src/mjolnir/ListRule.ts | 14 +- src/mjolnir/Mjolnir.ts | 14 +- src/models/Call.ts | 61 +- src/models/LocalRoom.ts | 14 +- src/models/RoomUpload.ts | 14 +- .../NotificationSettings.ts | 14 +- .../notificationsettings/PushRuleDiff.ts | 14 +- .../notificationsettings/PushRuleMap.ts | 14 +- .../reconcileNotificationSettings.ts | 14 +- .../toNotificationSettings.ts | 14 +- src/modules/AppModule.ts | 14 +- src/modules/ModuleComponents.tsx | 14 +- src/modules/ModuleFactory.ts | 14 +- src/modules/ModuleRunner.ts | 14 +- src/modules/ProxiedModuleApi.ts | 14 +- src/notifications/ContentRules.ts | 16 +- src/notifications/NotificationUtils.ts | 16 +- src/notifications/PushRuleVectorState.ts | 16 +- src/notifications/StandardActions.ts | 16 +- .../VectorPushRulesDefinitions.ts | 16 +- src/notifications/index.ts | 16 +- src/performance/entry-names.ts | 14 +- src/performance/index.ts | 14 +- src/phonenumber.ts | 14 +- src/rageshake/rageshake.ts | 18 +- src/rageshake/submit-rageshake.ts | 18 +- src/resizer/distributors/collapse.ts | 16 +- src/resizer/distributors/fixed.ts | 16 +- src/resizer/distributors/percentage.ts | 14 +- src/resizer/index.ts | 14 +- src/resizer/item.ts | 16 +- src/resizer/resizer.ts | 16 +- src/resizer/sizer.ts | 16 +- src/sendTimePerformanceMetrics.ts | 14 +- src/sentry.ts | 14 +- src/settings/SettingLevel.ts | 14 +- src/settings/Settings.tsx | 58 +- src/settings/SettingsStore.ts | 16 +- src/settings/UIFeature.ts | 14 +- src/settings/WatchManager.ts | 15 +- .../controllers/AnalyticsController.ts | 14 +- .../DeviceIsolationModeController.ts | 39 + .../controllers/FontSizeController.ts | 14 +- .../controllers/IncompatibleController.ts | 14 +- .../MatrixClientBackedController.ts | 14 +- .../controllers/NotificationControllers.ts | 16 +- .../controllers/ReducedMotionController.ts | 14 +- .../controllers/ReloadOnChangeController.ts | 14 +- .../ServerSupportUnstableFeatureController.ts | 14 +- src/settings/controllers/SettingController.ts | 16 +- .../controllers/SlidingSyncController.ts | 16 +- .../controllers/SystemFontController.ts | 14 +- src/settings/controllers/ThemeController.ts | 16 +- .../controllers/UIFeatureController.ts | 14 +- src/settings/enums/ImageSize.ts | 14 +- src/settings/enums/Layout.ts | 14 +- src/settings/enums/UseCase.tsx | 14 +- .../AbstractLocalStorageSettingsHandler.ts | 16 +- .../handlers/AccountSettingsHandler.ts | 16 +- .../handlers/ConfigSettingsHandler.ts | 16 +- .../handlers/DefaultSettingsHandler.ts | 16 +- .../handlers/DeviceSettingsHandler.ts | 18 +- src/settings/handlers/LocalEchoWrapper.ts | 16 +- .../MatrixClientBackedSettingsHandler.ts | 14 +- .../handlers/PlatformSettingsHandler.ts | 14 +- .../handlers/RoomAccountSettingsHandler.ts | 16 +- .../handlers/RoomDeviceSettingsHandler.ts | 16 +- src/settings/handlers/RoomSettingsHandler.ts | 16 +- src/settings/handlers/SettingsHandler.ts | 16 +- src/settings/watchers/FontWatcher.ts | 16 +- src/settings/watchers/ThemeWatcher.ts | 16 +- src/settings/watchers/Watcher.ts | 14 +- src/shouldHideEvent.ts | 16 +- src/slash-commands/command.ts | 20 +- src/slash-commands/interface.ts | 20 +- src/slash-commands/join.ts | 20 +- src/slash-commands/op.ts | 20 +- src/slash-commands/utils.ts | 20 +- src/stores/AccountPasswordStore.ts | 14 +- src/stores/ActiveWidgetStore.ts | 15 +- src/stores/AsyncStore.ts | 14 +- src/stores/AsyncStoreWithClient.ts | 14 +- src/stores/AutoRageshakeStore.ts | 14 +- src/stores/BreadcrumbsStore.ts | 16 +- src/stores/CallStore.ts | 14 +- src/stores/LifecycleStore.ts | 14 +- src/stores/MemberListStore.ts | 14 +- src/stores/ModalWidgetStore.ts | 14 +- src/stores/NonUrgentToastStore.ts | 14 +- src/stores/OwnBeaconStore.ts | 14 +- src/stores/OwnProfileStore.ts | 14 +- src/stores/ReadyWatchingStore.ts | 16 +- src/stores/ReleaseAnnouncementStore.ts | 18 +- src/stores/RoomScrollStateStore.ts | 15 +- src/stores/RoomViewStore.tsx | 18 +- src/stores/SetupEncryptionStore.ts | 16 +- src/stores/ThreepidInviteStore.ts | 14 +- src/stores/ToastStore.ts | 14 +- src/stores/TypingStore.ts | 16 +- src/stores/UIStore.ts | 14 +- src/stores/UserProfilesStore.ts | 14 +- src/stores/VoiceRecordingStore.ts | 16 +- src/stores/WidgetEchoStore.ts | 14 +- src/stores/WidgetStore.ts | 14 +- src/stores/local-echo/EchoChamber.ts | 14 +- src/stores/local-echo/EchoContext.ts | 14 +- src/stores/local-echo/EchoStore.ts | 14 +- src/stores/local-echo/EchoTransaction.ts | 14 +- src/stores/local-echo/GenericEchoChamber.ts | 14 +- src/stores/local-echo/RoomEchoChamber.ts | 14 +- src/stores/local-echo/RoomEchoContext.ts | 14 +- .../notifications/ListNotificationState.ts | 16 +- src/stores/notifications/NotificationLevel.ts | 14 +- src/stores/notifications/NotificationState.ts | 14 +- .../notifications/RoomNotificationState.ts | 16 +- .../RoomNotificationStateStore.ts | 16 +- .../notifications/SpaceNotificationState.ts | 16 +- .../notifications/StaticNotificationState.ts | 14 +- .../SummarizedNotificationState.ts | 14 +- src/stores/oidc/OidcClientStore.ts | 14 +- src/stores/right-panel/RightPanelStore.ts | 31 +- .../right-panel/RightPanelStoreIPanelState.ts | 14 +- .../right-panel/RightPanelStorePhases.ts | 14 +- .../action-handlers/View3pidInvite.ts | 14 +- .../right-panel/action-handlers/index.ts | 14 +- src/stores/room-list/Interface.ts | 14 +- src/stores/room-list/ListLayout.ts | 14 +- src/stores/room-list/MessagePreviewStore.ts | 14 +- src/stores/room-list/RoomListLayoutStore.ts | 14 +- src/stores/room-list/RoomListStore.ts | 16 +- src/stores/room-list/SlidingRoomListStore.ts | 14 +- src/stores/room-list/SpaceWatcher.ts | 14 +- src/stores/room-list/algorithms/Algorithm.ts | 14 +- .../list-ordering/ImportanceAlgorithm.ts | 16 +- .../list-ordering/NaturalAlgorithm.ts | 14 +- .../list-ordering/OrderingAlgorithm.ts | 14 +- .../algorithms/list-ordering/index.ts | 14 +- src/stores/room-list/algorithms/models.ts | 14 +- .../tag-sorting/AlphabeticAlgorithm.ts | 14 +- .../algorithms/tag-sorting/IAlgorithm.ts | 14 +- .../algorithms/tag-sorting/ManualAlgorithm.ts | 14 +- .../algorithms/tag-sorting/RecentAlgorithm.ts | 14 +- .../room-list/algorithms/tag-sorting/index.ts | 14 +- .../room-list/filters/IFilterCondition.ts | 14 +- .../room-list/filters/SpaceFilterCondition.ts | 14 +- .../room-list/filters/VisibilityProvider.ts | 14 +- src/stores/room-list/models.ts | 14 +- src/stores/room-list/previews/IPreview.ts | 14 +- .../previews/LegacyCallAnswerEventPreview.ts | 14 +- .../previews/LegacyCallHangupEvent.ts | 14 +- .../previews/LegacyCallInviteEventPreview.ts | 14 +- .../room-list/previews/MessageEventPreview.ts | 14 +- .../previews/PollStartEventPreview.ts | 14 +- .../previews/ReactionEventPreview.ts | 14 +- .../room-list/previews/StickerEventPreview.ts | 14 +- .../previews/VoiceBroadcastPreview.ts | 14 +- src/stores/room-list/previews/utils.ts | 14 +- src/stores/room-list/utils/roomMute.ts | 14 +- src/stores/spaces/SpaceStore.ts | 16 +- .../spaces/SpaceTreeLevelLayoutStore.ts | 14 +- src/stores/spaces/flattenSpaceHierarchy.ts | 14 +- src/stores/spaces/index.ts | 14 +- src/stores/widgets/ElementWidgetActions.ts | 14 +- .../widgets/ElementWidgetCapabilities.ts | 14 +- src/stores/widgets/StopGapWidget.ts | 16 +- src/stores/widgets/StopGapWidgetDriver.ts | 33 +- src/stores/widgets/WidgetLayoutStore.ts | 16 +- src/stores/widgets/WidgetMessagingStore.ts | 14 +- src/stores/widgets/WidgetPermissionStore.ts | 14 +- src/stores/widgets/types.ts | 14 +- src/theme.ts | 14 +- src/toasts/AnalyticsToast.tsx | 14 +- src/toasts/BulkUnverifiedSessionsToast.ts | 14 +- src/toasts/DesktopNotificationsToast.ts | 14 +- src/toasts/IncomingCallToast.tsx | 14 +- src/toasts/IncomingLegacyCallToast.tsx | 20 +- src/toasts/MobileGuideToast.ts | 14 +- src/toasts/ServerLimitToast.tsx | 14 +- src/toasts/SetupEncryptionToast.ts | 14 +- src/toasts/UnverifiedSessionToast.tsx | 14 +- src/toasts/UpdateToast.tsx | 14 +- src/usercontent/index.ts | 14 +- src/utils/AnimationUtils.ts | 14 +- src/utils/AutoDiscoveryUtils.tsx | 14 +- src/utils/BrowserWorkarounds.ts | 14 +- src/utils/DMRoomMap.ts | 16 +- src/utils/DecryptFile.ts | 16 +- src/utils/DialogOpener.ts | 14 +- src/utils/DirectoryUtils.ts | 16 +- src/utils/EditorStateTransfer.ts | 16 +- src/utils/ErrorUtils.tsx | 16 +- src/utils/EventRenderingUtils.ts | 14 +- src/utils/EventUtils.ts | 20 +- src/utils/Feedback.ts | 14 +- src/utils/FileDownloader.ts | 14 +- src/utils/FileUtils.ts | 16 +- src/utils/FixedRollingArray.ts | 14 +- src/utils/FontManager.ts | 16 +- src/utils/FormattingUtils.ts | 16 +- src/utils/IDestroyable.ts | 14 +- src/utils/IdentityServerUtils.ts | 16 +- src/utils/Image.ts | 14 +- src/utils/JSON.ts | 14 +- src/utils/KeyVerificationStateObserver.ts | 14 +- src/utils/LazyValue.ts | 14 +- src/utils/LruCache.ts | 14 +- src/utils/MarkedExecution.ts | 14 +- src/utils/MatrixGlob.ts | 14 +- src/utils/MediaEventHelper.ts | 14 +- src/utils/MegolmExportEncryption.ts | 16 +- src/utils/MessageDiffUtils.tsx | 16 +- src/utils/Mouse.ts | 14 +- src/utils/MultiInviter.ts | 16 +- src/utils/NativeEventUtils.ts | 14 +- src/utils/PasswordScorer.ts | 15 +- src/utils/PhasedRolloutFeature.ts | 15 +- src/utils/PinningUtils.ts | 153 +- src/utils/PreferredRoomVersions.ts | 14 +- src/utils/ReactUtils.tsx | 14 +- src/utils/Reply.ts | 16 +- src/utils/ResizeNotifier.ts | 16 +- src/utils/RoomUpgrade.ts | 14 +- src/utils/SearchInput.ts | 14 +- src/utils/SessionLock.ts | 14 +- src/utils/ShieldUtils.ts | 14 +- src/utils/Singleflight.ts | 14 +- src/utils/SnakedObject.ts | 14 +- src/utils/SortMembers.ts | 14 +- src/utils/StorageAccess.ts | 16 +- src/utils/StorageManager.ts | 14 +- src/utils/Timer.ts | 16 +- src/utils/UrlUtils.ts | 16 +- src/utils/UserInteractiveAuth.ts | 14 +- src/utils/ValidatedServerConfig.ts | 14 +- src/utils/WellKnownUtils.ts | 14 +- src/utils/Whenable.ts | 14 +- src/utils/WidgetUtils.ts | 16 +- src/utils/arrays.ts | 14 +- src/utils/beacon/bounds.ts | 14 +- src/utils/beacon/duration.ts | 14 +- src/utils/beacon/geolocation.ts | 14 +- src/utils/beacon/getShareableLocation.ts | 14 +- src/utils/beacon/index.ts | 14 +- src/utils/beacon/timeline.ts | 14 +- src/utils/beacon/useBeacon.ts | 14 +- src/utils/beacon/useLiveBeacons.ts | 14 +- src/utils/beacon/useOwnLiveBeacons.ts | 14 +- src/utils/blobs.ts | 14 +- src/utils/colour.ts | 14 +- src/utils/connection.ts | 14 +- src/utils/createMatrixClient.ts | 16 +- src/utils/createVoiceMessageContent.ts | 14 +- src/utils/crypto/deviceInfo.ts | 14 +- src/utils/crypto/index.ts | 14 +- .../crypto/shouldForceDisableEncryption.ts | 14 +- src/utils/crypto/shouldSkipSetupEncryption.ts | 14 +- src/utils/device/clientInformation.ts | 14 +- src/utils/device/dehydration.ts | 14 +- src/utils/device/isDeviceVerified.ts | 14 +- src/utils/device/parseUserAgent.ts | 14 +- .../snoozeBulkUnverifiedDeviceReminder.ts | 14 +- src/utils/direct-messages.ts | 14 +- src/utils/dm/createDmLocalRoom.ts | 14 +- src/utils/dm/filterValidMDirect.ts | 14 +- src/utils/dm/findDMForUser.ts | 14 +- src/utils/dm/findDMRoom.ts | 14 +- src/utils/dm/startDm.ts | 14 +- src/utils/enums.ts | 14 +- src/utils/event/getSenderName.ts | 14 +- src/utils/exportUtils/Exporter.ts | 16 +- src/utils/exportUtils/HtmlExport.tsx | 22 +- src/utils/exportUtils/JSONExport.ts | 16 +- src/utils/exportUtils/PlainTextExport.ts | 16 +- src/utils/exportUtils/exportCSS.ts | 14 +- src/utils/exportUtils/exportCustomCSS.css | 14 +- src/utils/exportUtils/exportJS.js | 14 +- src/utils/exportUtils/exportUtils.ts | 14 +- src/utils/humanize.ts | 14 +- src/utils/i18n-helpers.ts | 14 +- src/utils/image-media.ts | 14 +- src/utils/iterables.ts | 14 +- src/utils/leave-behaviour.ts | 14 +- src/utils/local-room.ts | 14 +- src/utils/localRoom/isLocalRoom.ts | 14 +- src/utils/localRoom/isRoomReady.ts | 14 +- src/utils/location/LocationShareErrors.ts | 14 +- src/utils/location/findMapStyleUrl.ts | 14 +- src/utils/location/index.ts | 14 +- src/utils/location/isSelfLocation.ts | 14 +- src/utils/location/links.ts | 14 +- src/utils/location/locationEventGeoUri.ts | 14 +- src/utils/location/map.ts | 14 +- src/utils/location/parseGeoUri.ts | 21 +- src/utils/location/positionFailureMessage.ts | 14 +- src/utils/location/useMap.ts | 14 +- src/utils/login.ts | 14 +- src/utils/maps.ts | 14 +- src/utils/media/requestMediaPermissions.tsx | 14 +- src/utils/membership.ts | 16 +- src/utils/notifications.ts | 14 +- src/utils/numbers.ts | 14 +- src/utils/objects.ts | 14 +- src/utils/oidc/TokenRefresher.ts | 14 +- src/utils/oidc/authorize.ts | 14 +- src/utils/oidc/error.ts | 14 +- src/utils/oidc/getOidcLogoutUrl.ts | 14 +- src/utils/oidc/isUserRegistrationSupported.ts | 14 +- src/utils/oidc/persistOidcSettings.ts | 14 +- src/utils/oidc/registerClient.ts | 14 +- src/utils/pages.ts | 16 +- .../permalinks/ElementPermalinkConstructor.ts | 16 +- .../MatrixSchemePermalinkConstructor.ts | 14 +- .../MatrixToPermalinkConstructor.ts | 14 +- src/utils/permalinks/PermalinkConstructor.ts | 16 +- src/utils/permalinks/Permalinks.ts | 16 +- src/utils/permalinks/navigator.ts | 14 +- src/utils/pillify.tsx | 14 +- src/utils/presence.ts | 14 +- src/utils/promise.ts | 29 +- src/utils/pushRules/monitorSyncedPushRules.ts | 14 +- src/utils/pushRules/updatePushRuleActions.ts | 14 +- src/utils/read-receipts.ts | 14 +- src/utils/room/canInviteTo.ts | 14 +- src/utils/room/getFunctionalMembers.ts | 14 +- .../room/getJoinedNonFunctionalMembers.ts | 14 +- src/utils/room/inviteToRoom.ts | 14 +- src/utils/room/placeCall.ts | 14 +- ...ouldEncryptRoomWithSingle3rdPartyInvite.ts | 14 +- src/utils/room/tagRoom.ts | 14 +- src/utils/rooms.ts | 14 +- src/utils/sets.ts | 14 +- src/utils/space.tsx | 14 +- src/utils/stringOrderField.ts | 14 +- src/utils/strings.ts | 14 +- src/utils/threepids.ts | 14 +- src/utils/tokens/pickling.ts | 18 +- src/utils/tokens/tokens.ts | 109 +- src/utils/tooltipify.tsx | 14 +- src/utils/units.ts | 14 +- src/utils/useId.ts | 14 +- src/utils/validate/index.ts | 14 +- src/utils/validate/numberInRange.ts | 14 +- src/utils/video-rooms.ts | 37 +- src/verification.ts | 16 +- .../audio/VoiceBroadcastRecorder.ts | 14 +- .../components/VoiceBroadcastBody.tsx | 14 +- .../components/atoms/LiveBadge.tsx | 14 +- .../components/atoms/SeekButton.tsx | 14 +- .../atoms/VoiceBroadcastControl.tsx | 14 +- .../components/atoms/VoiceBroadcastError.tsx | 14 +- .../components/atoms/VoiceBroadcastHeader.tsx | 13 +- .../atoms/VoiceBroadcastPlaybackControl.tsx | 16 +- ...VoiceBroadcastRecordingConnectionError.tsx | 14 +- .../atoms/VoiceBroadcastRoomSubtitle.tsx | 14 +- .../ConfirmListenBroadcastStopCurrent.tsx | 14 +- .../molecules/VoiceBroadcastPlaybackBody.tsx | 14 +- .../VoiceBroadcastPreRecordingPip.tsx | 14 +- .../molecules/VoiceBroadcastRecordingBody.tsx | 13 +- .../molecules/VoiceBroadcastRecordingPip.tsx | 14 +- .../VoiceBroadcastSmallPlaybackBody.tsx | 14 +- .../hooks/useCurrentVoiceBroadcastPlayback.ts | 14 +- .../useCurrentVoiceBroadcastPreRecording.ts | 14 +- .../useCurrentVoiceBroadcastRecording.ts | 14 +- .../hooks/useHasRoomLiveVoiceBroadcast.ts | 14 +- .../hooks/useVoiceBroadcastPlayback.ts | 16 +- .../hooks/useVoiceBroadcastRecording.tsx | 16 +- src/voice-broadcast/index.ts | 14 +- .../models/VoiceBroadcastPlayback.ts | 14 +- .../models/VoiceBroadcastPreRecording.ts | 14 +- .../models/VoiceBroadcastRecording.ts | 14 +- .../stores/VoiceBroadcastPlaybacksStore.ts | 14 +- .../stores/VoiceBroadcastPreRecordingStore.ts | 14 +- .../stores/VoiceBroadcastRecordingsStore.ts | 16 +- src/voice-broadcast/types.ts | 14 +- .../utils/VoiceBroadcastChunkEvents.ts | 14 +- .../utils/VoiceBroadcastResumer.ts | 14 +- .../checkVoiceBroadcastPreConditions.tsx | 14 +- .../utils/cleanUpBroadcasts.ts | 14 +- .../utils/determineVoiceBroadcastLiveness.ts | 14 +- ...rCurrentVoiceBroadcastPlaybackIfStopped.ts | 14 +- ...doMaybeSetCurrentVoiceBroadcastPlayback.ts | 14 +- ...RoomLiveVoiceBroadcastFromUserAndDevice.ts | 14 +- src/voice-broadcast/utils/getChunkLength.ts | 14 +- .../utils/getMaxBroadcastLength.ts | 14 +- .../utils/hasRoomLiveVoiceBroadcast.ts | 14 +- .../utils/isRelatedToVoiceBroadcast.ts | 14 +- .../utils/isVoiceBroadcastStartedEvent.ts | 14 +- .../pauseNonLiveBroadcastFromOtherRoom.ts | 14 +- .../utils/retrieveStartedInfoEvent.ts | 14 +- .../utils/setUpVoiceBroadcastPreRecording.ts | 14 +- ...uldDisplayAsVoiceBroadcastRecordingTile.ts | 14 +- ...houldDisplayAsVoiceBroadcastStoppedText.ts | 14 +- .../shouldDisplayAsVoiceBroadcastTile.ts | 14 +- .../utils/showCantStartACallDialog.tsx | 14 +- .../utils/startNewVoiceBroadcastRecording.ts | 14 +- .../textForVoiceBroadcastStoppedEvent.tsx | 14 +- ...orVoiceBroadcastStoppedEventWithoutLink.ts | 14 +- src/widgets/CapabilityText.tsx | 40 +- src/widgets/Jitsi.ts | 14 +- src/widgets/ManagedHybrid.ts | 14 +- src/widgets/WidgetType.ts | 14 +- src/workers/blurhash.worker.ts | 14 +- src/workers/blurhashWorkerFactory.ts | 14 +- src/workers/indexeddb.worker.ts | 14 +- src/workers/indexeddbWorkerFactory.ts | 14 +- src/workers/playback.worker.ts | 14 +- src/workers/playbackWorkerFactory.ts | 14 +- src/workers/worker.ts | 14 +- test/@types/common.ts | 14 +- test/Avatar-test.ts | 14 +- test/ContentMessages-test.ts | 14 +- test/DecryptionFailureTracker-test.ts | 15 +- test/DeviceListener-test.ts | 14 +- test/HtmlUtils-test.tsx | 14 +- test/Image-test.ts | 14 +- test/KeyBindingsManager-test.ts | 14 +- test/LegacyCallHandler-test.ts | 14 +- test/Lifecycle-test.ts | 80 +- test/Markdown-test.ts | 14 +- test/MatrixClientPeg-test.ts | 91 +- test/MediaDeviceHandler-test.ts | 14 +- test/Modal-test.ts | 14 +- test/Notifier-test.ts | 35 +- test/PosthogAnalytics-test.ts | 14 +- test/PreferredRoomVersions-test.ts | 14 +- test/Reply-test.ts | 14 +- test/RoomNotifs-test.ts | 16 +- test/Rooms-test.ts | 14 +- test/ScalarAuthClient-test.ts | 14 +- test/SdkConfig-test.ts | 14 +- test/SecurityManager-test.ts | 14 +- test/SlashCommands-test.tsx | 14 +- test/SlidingSyncManager-test.ts | 14 +- test/SupportedBrowser-test.ts | 18 +- test/Terms-test.tsx | 14 +- test/TestSdkContext.ts | 14 +- test/TextForEvent-test.ts | 19 +- test/TimezoneHandler-test.ts | 23 + test/Unread-test.ts | 14 +- test/UserActivity-test.ts | 15 +- test/WorkerManager-test.ts | 14 +- .../KeyboardShortcutUtils-test.ts | 14 +- .../accessibility/LandmarkNavigation-test.tsx | 14 +- test/accessibility/RovingTabIndex-test.tsx | 16 +- .../handlers/viewUserDeviceSettings-test.ts | 14 +- test/audio/Playback-test.ts | 14 +- test/audio/VoiceMessageRecording-test.ts | 14 +- test/audio/VoiceRecording-test.ts | 14 +- test/autocomplete/EmojiProvider-test.ts | 14 +- test/autocomplete/QueryMatcher-test.ts | 15 +- test/autocomplete/RoomProvider-test.ts | 14 +- test/autocomplete/SpaceProvider-test.ts | 14 +- .../structures/AutocompleteInput-test.tsx | 14 +- .../components/structures/ContextMenu-test.ts | 14 +- test/components/structures/FilePanel-test.tsx | 14 +- .../structures/LargeLoader-test.tsx | 14 +- test/components/structures/LeftPanel-test.tsx | 14 +- .../structures/LegacyCallEventGrouper-test.ts | 14 +- .../structures/LoggedInView-test.tsx | 64 +- test/components/structures/MainSplit-test.tsx | 14 +- .../components/structures/MatrixChat-test.tsx | 77 +- .../MatrixClientContextProvider-test.tsx | 14 +- .../structures/MessagePanel-test.tsx | 16 +- .../PictureInPictureDragger-test.tsx | 14 +- .../structures/PipContainer-test.tsx | 14 +- .../structures/ReleaseAnnouncement-test.tsx | 16 +- .../components/structures/RightPanel-test.tsx | 14 +- .../structures/RoomSearchView-test.tsx | 14 +- .../structures/RoomStatusBar-test.tsx | 14 +- .../RoomStatusBarUnsentMessages-test.tsx | 14 +- test/components/structures/RoomView-test.tsx | 14 +- .../structures/SpaceHierarchy-test.tsx | 14 +- .../components/structures/TabbedView-test.tsx | 14 +- .../structures/ThreadPanel-test.tsx | 16 +- .../components/structures/ThreadView-test.tsx | 16 +- .../structures/TimelinePanel-test.tsx | 16 +- test/components/structures/UploadBar-test.tsx | 14 +- test/components/structures/UserMenu-test.tsx | 14 +- .../components/structures/ViewSource-test.tsx | 14 +- .../__snapshots__/RoomView-test.tsx.snap | 112 +- .../structures/auth/CompleteSecurity-test.tsx | 79 + .../structures/auth/ForgotPassword-test.tsx | 14 +- .../components/structures/auth/Login-test.tsx | 15 +- .../structures/auth/LoginSplashView-test.tsx | 14 +- .../structures/auth/Registration-test.tsx | 63 +- test/components/views/Validation-test.ts | 14 +- .../views/VerificationShowSas-test.tsx | 14 +- .../audio_messages/RecordingPlayback-test.tsx | 14 +- .../views/audio_messages/SeekBar-test.tsx | 14 +- .../views/auth/CountryDropdown-test.tsx | 14 +- .../InteractiveAuthEntryComponents-test.tsx | 62 +- .../views/auth/RegistrationToken-test.tsx | 16 +- ...teractiveAuthEntryComponents-test.tsx.snap | 54 +- .../avatars/DecoratedRoomAvatar-test.tsx | 14 +- .../views/avatars/MemberAvatar-test.tsx | 14 +- .../views/avatars/RoomAvatar-test.tsx | 14 +- .../avatars/WithPresenceIndicator-test.tsx | 14 +- .../views/beacon/BeaconListItem-test.tsx | 14 +- .../views/beacon/BeaconMarker-test.tsx | 14 +- .../views/beacon/BeaconStatus-test.tsx | 14 +- .../views/beacon/BeaconViewDialog-test.tsx | 14 +- .../views/beacon/DialogSidebar-test.tsx | 14 +- .../beacon/LeftPanelLiveShareWarning-test.tsx | 14 +- .../views/beacon/OwnBeaconStatus-test.tsx | 14 +- .../views/beacon/RoomCallBanner-test.tsx | 14 +- .../beacon/RoomLiveShareWarning-test.tsx | 14 +- .../views/beacon/ShareLatestLocation-test.tsx | 14 +- .../beacon/StyledLiveBeaconIcon-test.tsx | 14 +- test/components/views/beta/BetaCard-test.tsx | 14 +- .../views/context_menus/ContextMenu-test.tsx | 14 +- .../views/context_menus/EmbeddedPage-test.tsx | 14 +- .../context_menus/MessageContextMenu-test.tsx | 130 +- .../context_menus/RoomContextMenu-test.tsx | 14 +- .../RoomGeneralContextMenu-test.tsx | 16 +- .../context_menus/SpaceContextMenu-test.tsx | 14 +- .../ThreadListContextMenu-test.tsx | 14 +- .../context_menus/WidgetContextMenu-test.tsx | 14 +- .../AccessSecretStorageDialog-test.tsx | 24 +- .../views/dialogs/AppDownloadDialog-test.tsx | 14 +- .../dialogs/AskInviteAnywayDialog-test.tsx | 14 +- .../views/dialogs/ChangelogDialog-test.tsx | 42 +- .../dialogs/ConfirmRedactDialog-test.tsx | 14 +- .../dialogs/ConfirmUserActionDialog-test.tsx | 14 +- .../views/dialogs/CreateRoomDialog-test.tsx | 14 +- .../views/dialogs/DevtoolsDialog-test.tsx | 14 +- .../views/dialogs/ExportDialog-test.tsx | 14 +- .../views/dialogs/FeedbackDialog-test.tsx | 14 +- .../views/dialogs/ForwardDialog-test.tsx | 14 +- .../views/dialogs/IncomingSasDialog-test.tsx | 14 +- .../dialogs/InteractiveAuthDialog-test.tsx | 16 +- .../views/dialogs/InviteDialog-test.tsx | 14 +- .../views/dialogs/LogoutDialog-test.tsx | 14 +- .../ManageRestrictedJoinRuleDialog-test.tsx | 14 +- ...ManualDeviceKeyVerificationDialog-test.tsx | 14 +- .../dialogs/MessageEditHistoryDialog-test.tsx | 14 +- .../views/dialogs/RoomSettingsDialog-test.tsx | 14 +- .../views/dialogs/ServerPickerDialog-test.tsx | 14 +- .../views/dialogs/ShareDialog-test.tsx | 14 +- .../views/dialogs/SpotlightDialog-test.tsx | 16 +- .../views/dialogs/UnpinAllDialog-test.tsx | 14 +- .../views/dialogs/UserSettingsDialog-test.tsx | 14 +- .../ChangelogDialog-test.tsx.snap | 8 +- ...nageRestrictedJoinRuleDialog-test.tsx.snap | 8 +- ...lDeviceKeyVerificationDialog-test.tsx.snap | 8 +- .../views/dialogs/devtools/Event-test.tsx | 14 +- .../devtools/RoomNotifications-test.tsx | 14 +- .../security/CreateKeyBackupDialog-test.tsx | 14 +- .../CreateSecretStorageDialog-test.tsx | 14 +- .../security/ExportE2eKeysDialog-test.tsx | 14 +- .../security/ImportE2eKeysDialog-test.tsx | 14 +- .../security/RestoreKeyBackupDialog-test.tsx | 51 + .../RestoreKeyBackupDialog-test.tsx.snap | 298 ++ .../PublicRoomResultDetails-test.tsx | 14 +- .../spotlight/RoomResultContextMenus-test.tsx | 14 +- .../views/elements/AccessibleButton-test.tsx | 14 +- .../views/elements/AppTile-test.tsx | 14 +- .../DesktopCapturerSourcePicker-test.tsx | 14 +- .../views/elements/EffectsOverlay-test.tsx | 51 + .../views/elements/EventListSummary-test.tsx | 14 +- .../views/elements/ExternalLink-test.tsx | 12 +- .../views/elements/FacePile-test.tsx | 12 +- test/components/views/elements/Field-test.tsx | 14 +- .../views/elements/FilterDropdown-test.tsx | 14 +- .../views/elements/FilterTabGroup-test.tsx | 14 +- .../views/elements/ImageView-test.tsx | 16 +- .../views/elements/InfoTooltip-test.tsx | 14 +- .../views/elements/InteractiveTooltip-test.ts | 14 +- .../views/elements/LabelledCheckbox-test.tsx | 14 +- .../views/elements/LearnMore-test.tsx | 14 +- test/components/views/elements/Pill-test.tsx | 14 +- .../views/elements/PollCreateDialog-test.tsx | 14 +- .../views/elements/PowerSelector-test.tsx | 14 +- .../views/elements/ProgressBar-test.tsx | 12 +- .../components/views/elements/QRCode-test.tsx | 12 +- .../views/elements/ReplyChain-test.tsx | 14 +- .../views/elements/RoomFacePile-test.tsx | 12 +- .../views/elements/RoomTopic-test.tsx | 14 +- .../views/elements/SearchWarning-test.tsx | 12 +- .../SpellCheckLanguagesDropdown-test.tsx | 14 +- .../views/elements/StyledRadioGroup-test.tsx | 14 +- .../views/elements/SyntaxHighlight-test.tsx | 20 +- .../EffectsOverlay-test.tsx.snap | 12 + .../crypto/VerificationQRCode-test.tsx | 14 +- .../views/emojipicker/EmojiPicker-test.tsx | 14 +- .../location/LiveDurationDropdown-test.tsx | 14 +- .../views/location/LocationPicker-test.tsx | 14 +- .../views/location/LocationShareMenu-test.tsx | 14 +- .../location/LocationViewDialog-test.tsx | 14 +- test/components/views/location/Map-test.tsx | 14 +- .../views/location/MapError-test.tsx | 14 +- .../components/views/location/Marker-test.tsx | 14 +- .../views/location/SmartMarker-test.tsx | 14 +- .../views/location/ZoomButtons-test.tsx | 14 +- .../views/location/shareLocation-test.ts | 14 +- .../views/messages/CallEvent-test.tsx | 14 +- .../views/messages/DateSeparator-test.tsx | 14 +- .../messages/DecryptionFailureBody-test.tsx | 42 +- .../messages/DownloadActionButton-test.tsx | 14 +- .../views/messages/EncryptionEvent-test.tsx | 14 +- .../views/messages/JumpToDatePicker-test.tsx | 14 +- .../views/messages/LegacyCallEvent-test.tsx | 14 +- .../views/messages/MBeaconBody-test.tsx | 14 +- .../views/messages/MImageBody-test.tsx | 14 +- .../messages/MKeyVerificationRequest-test.tsx | 14 +- .../views/messages/MLocationBody-test.tsx | 14 +- .../views/messages/MPollBody-test.tsx | 16 +- .../views/messages/MPollEndBody-test.tsx | 14 +- .../views/messages/MStickerBody-test.tsx | 14 +- .../views/messages/MVideoBody-test.tsx | 14 +- .../views/messages/MessageActionBar-test.tsx | 78 +- .../views/messages/MessageEvent-test.tsx | 14 +- .../views/messages/MessageTimestamp-test.tsx | 14 +- .../messages/ReactionsRowButton-test.tsx | 14 +- .../messages/RoomPredecessorTile-test.tsx | 14 +- .../views/messages/TextualBody-test.tsx | 16 +- .../DecryptionFailureBody-test.tsx.snap | 15 + .../shared/MediaProcessingError-test.tsx | 14 +- .../polls/pollHistory/PollHistory-test.tsx | 14 +- .../polls/pollHistory/PollListItem-test.tsx | 14 +- .../pollHistory/PollListItemEnded-test.tsx | 14 +- .../views/right_panel/ExtensionsCard-test.tsx | 14 +- .../LegacyRoomHeaderButtons-test.tsx | 16 +- .../right_panel/PinnedMessagesCard-test.tsx | 39 +- .../views/right_panel/RightPanelTabs-test.tsx | 14 +- .../right_panel/RoomSummaryCard-test.tsx | 26 +- .../views/right_panel/UserInfo-test.tsx | 39 +- .../right_panel/VerificationPanel-test.tsx | 14 +- .../PinnedMessagesCard-test.tsx.snap | 12 +- .../RoomSummaryCard-test.tsx.snap | 147 + .../RoomProfileSettings-test.tsx | 15 +- .../views/rooms/AppsDrawer-test.tsx | 76 + .../views/rooms/BasicMessageComposer-test.tsx | 14 +- .../views/rooms/EditMessageComposer-test.tsx | 14 +- .../components/views/rooms/EventTile-test.tsx | 16 +- .../EventTile/EventTileThreadToolbar-test.tsx | 14 +- .../components/views/rooms/ExtraTile-test.tsx | 14 +- .../views/rooms/LegacyRoomHeader-test.tsx | 14 +- .../views/rooms/MemberList-test.tsx | 16 +- .../views/rooms/MemberTile-test.tsx | 15 +- .../views/rooms/MessageComposer-test.tsx | 98 +- .../rooms/MessageComposerButtons-test.tsx | 14 +- .../views/rooms/NewRoomIntro-test.tsx | 16 +- .../NotificationBadge-test.tsx | 14 +- .../StatelessNotificationBadge-test.tsx | 14 +- .../UnreadNotificationBadge-test.tsx | 16 +- .../views/rooms/PinnedEventTile-test.tsx | 45 +- .../views/rooms/PinnedMessageBanner-test.tsx | 272 ++ .../views/rooms/PresenceLabel-test.tsx | 14 +- .../views/rooms/ReadReceiptGroup-test.tsx | 14 +- .../views/rooms/ReadReceiptMarker-test.tsx | 71 + .../views/rooms/RoomHeader-test.tsx | 22 +- .../RoomHeader/CallGuestLinkButton-test.tsx | 14 +- .../RoomHeader/VideoRoomChatButton-test.tsx | 18 +- .../views/rooms/RoomKnocksBar-test.tsx | 14 +- test/components/views/rooms/RoomList-test.tsx | 14 +- .../views/rooms/RoomListHeader-test.tsx | 14 +- .../views/rooms/RoomPreviewBar-test.tsx | 14 +- .../views/rooms/RoomPreviewCard-test.tsx | 31 +- .../views/rooms/RoomSearchAuxPanel-test.tsx | 14 +- test/components/views/rooms/RoomTile-test.tsx | 14 +- .../views/rooms/SearchResultTile-test.tsx | 16 +- .../views/rooms/SendMessageComposer-test.tsx | 15 +- .../views/rooms/ThirdPartyMemberInfo-test.tsx | 14 +- .../rooms/VoiceRecordComposerTile-test.tsx | 14 +- .../PinnedEventTile-test.tsx.snap | 88 +- .../PinnedMessageBanner-test.tsx.snap | 482 +++ .../__snapshots__/RoomHeader-test.tsx.snap | 25 +- .../EditWysiwygComposer-test.tsx | 14 +- .../SendWysiwygComposer-test.tsx | 14 +- .../components/FormattingButtons-test.tsx | 14 +- .../components/LinkModal-test.tsx | 14 +- .../components/PlainTextComposer-test.tsx | 14 +- .../components/WysiwygAutocomplete-test.tsx | 14 +- .../components/WysiwygComposer-test.tsx | 14 +- .../hooks/usePlainTextListeners-test.tsx | 14 +- .../hooks/useSuggestion-test.tsx | 14 +- .../wysiwyg_composer/hooks/utils-test.tsx | 14 +- .../views/rooms/wysiwyg_composer/utils.ts | 14 +- .../utils/autocomplete-test.ts | 14 +- .../utils/createMessageContent-test.ts | 14 +- .../wysiwyg_composer/utils/message-test.ts | 14 +- .../settings/AddPrivilegedUsers-test.tsx | 14 +- .../settings/AddRemoveThreepids-test.tsx | 35 +- .../views/settings/AvatarSetting-test.tsx | 14 +- .../views/settings/ChangePassword-test.tsx | 14 +- .../views/settings/CrossSigningPanel-test.tsx | 14 +- .../views/settings/CryptographyPanel-test.tsx | 52 +- .../views/settings/EventIndexPanel-test.tsx | 14 +- .../views/settings/FontScalingPanel-test.tsx | 14 +- .../views/settings/JoinRuleSettings-test.tsx | 14 +- .../views/settings/KeyboardShortcut-test.tsx | 14 +- .../views/settings/LayoutSwitcher-test.tsx | 14 +- .../views/settings/Notifications-test.tsx | 12 +- .../settings/PowerLevelSelector-test.tsx | 16 +- .../views/settings/SecureBackupPanel-test.tsx | 14 +- .../settings/SetIntegrationManager-test.tsx | 14 +- .../views/settings/SettingsFieldset-test.tsx | 12 +- .../views/settings/ThemeChoicePanel-test.tsx | 14 +- .../settings/UserProfileSettings-test.tsx | 14 +- .../SecureBackupPanel-test.tsx.snap | 4 +- .../SetIntegrationManager-test.tsx.snap | 4 +- .../devices/CurrentDeviceSection-test.tsx | 14 +- .../devices/DeviceDetailHeading-test.tsx | 14 +- .../settings/devices/DeviceDetails-test.tsx | 14 +- .../DeviceExpandDetailsButton-test.tsx | 14 +- .../devices/DeviceSecurityCard-test.tsx | 14 +- .../settings/devices/DeviceTile-test.tsx | 14 +- .../settings/devices/DeviceTypeIcon-test.tsx | 14 +- .../DeviceVerificationStatusCard-test.tsx | 14 +- .../devices/FilteredDeviceList-test.tsx | 14 +- .../devices/FilteredDeviceListHeader-test.tsx | 14 +- .../settings/devices/LoginWithQR-test.tsx | 14 +- .../settings/devices/LoginWithQRFlow-test.tsx | 14 +- .../devices/LoginWithQRSection-test.tsx | 14 +- .../devices/SecurityRecommendations-test.tsx | 14 +- .../devices/SelectableDeviceTile-test.tsx | 14 +- .../LoginWithQRFlow-test.tsx.snap | 4 +- .../settings/devices/deleteDevices-test.tsx | 14 +- .../views/settings/devices/filter-test.ts | 14 +- .../discovery/DiscoverySettings-test.tsx | 14 +- .../notifications/Notifications2-test.tsx | 16 +- .../shared/SettingsSubsection-test.tsx | 14 +- .../shared/SettingsSubsectionHeading-test.tsx | 14 +- .../views/settings/tabs/SettingsTab-test.tsx | 14 +- .../room/AdvancedRoomSettingsTab-test.tsx | 14 +- .../tabs/room/BridgeSettingsTab-test.tsx | 14 +- .../room/NotificationSettingsTab-test.tsx | 14 +- .../tabs/room/PeopleRoomSettingsTab-test.tsx | 14 +- .../tabs/room/RolesRoomSettingsTab-test.tsx | 14 +- .../room/SecurityRoomSettingsTab-test.tsx | 14 +- .../tabs/room/VoipRoomSettingsTab-test.tsx | 14 +- .../SecurityRoomSettingsTab-test.tsx.snap | 4 +- .../tabs/user/AccountUserSettingsTab-test.tsx | 13 +- .../user/AppearanceUserSettingsTab-test.tsx | 14 +- .../user/KeyboardUserSettingsTab-test.tsx | 14 +- .../tabs/user/LabsUserSettingsTab-test.tsx | 14 +- .../tabs/user/MjolnirUserSettingsTab-test.tsx | 14 +- .../user/PreferencesUserSettingsTab-test.tsx | 40 +- .../user/SecurityUserSettingsTab-test.tsx | 14 +- .../tabs/user/SessionManagerTab-test.tsx | 14 +- .../tabs/user/SidebarUserSettingsTab-test.tsx | 14 +- .../tabs/user/VoiceUserSettingsTab-test.tsx | 14 +- .../PreferencesUserSettingsTab-test.tsx.snap | 174 +- .../SecurityUserSettingsTab-test.tsx.snap | 72 +- .../spaces/AddExistingToSpaceDialog-test.tsx | 14 +- .../views/spaces/QuickSettingsButton-test.tsx | 14 +- .../views/spaces/QuickThemeSwitcher-test.tsx | 14 +- .../views/spaces/SpacePanel-test.tsx | 14 +- .../SpaceSettingsVisibilityTab-test.tsx | 14 +- .../views/spaces/SpaceTreeLevel-test.tsx | 14 +- .../spaces/ThreadsActivityCentre-test.tsx | 16 +- .../SpaceSettingsVisibilityTab-test.tsx.snap | 4 +- .../spaces/useUnreadThreadRooms-test.tsx | 14 +- .../views/toasts/GenericToast-test.tsx | 14 +- .../toasts/VerificationRequestToast-test.tsx | 14 +- .../views/typography/Caption-test.tsx | 14 +- .../views/typography/Heading-test.tsx | 14 +- .../UserOnboardingList-test.tsx | 14 +- .../UserOnboardingPage-test.tsx | 14 +- test/components/views/voip/CallView-test.tsx | 14 +- test/components/views/voip/DialPad-test.tsx | 14 +- .../LegacyCallViewButtons-test.tsx | 16 +- test/components/views/voip/VideoFeed-test.tsx | 14 +- test/contexts/SdkContext-test.ts | 14 +- test/contexts/ToastContext-test.ts | 14 +- test/createRoom-test.ts | 14 +- test/customisations/Media-test.ts | 14 +- test/dispatcher/dispatcher-test.ts | 14 +- test/editor/caret-test.ts | 14 +- test/editor/deserialize-test.ts | 14 +- test/editor/diff-test.ts | 14 +- test/editor/history-test.ts | 14 +- test/editor/mock.ts | 16 +- test/editor/model-test.ts | 14 +- test/editor/operations-test.ts | 14 +- test/editor/parts-test.ts | 14 +- test/editor/position-test.ts | 14 +- test/editor/range-test.ts | 14 +- test/editor/roundtrip-test.ts | 14 +- test/editor/serialize-test.ts | 14 +- test/email-test.ts | 14 +- test/events/EventTileFactory-test.ts | 13 +- test/events/RelationsHelper-test.ts | 14 +- .../forward/getForwardableEvent-test.ts | 14 +- .../getShareableLocationEvent-test.ts | 14 +- test/globalSetup.ts | 14 +- .../room/useRoomThreadNotifications-test.tsx | 14 +- test/hooks/useDebouncedCallback-test.tsx | 14 +- test/hooks/useLatestResult-test.tsx | 14 +- test/hooks/useNotificationSettings-test.tsx | 14 +- test/hooks/useProfileInfo-test.tsx | 14 +- test/hooks/usePublicRoomDirectory-test.tsx | 14 +- test/hooks/useRoomMembers-test.tsx | 14 +- test/hooks/useSlidingSyncRoomSearch-test.tsx | 14 +- test/hooks/useUnreadNotifications-test.ts | 14 +- test/hooks/useUserDirectory-test.tsx | 14 +- test/hooks/useUserOnboardingTasks-test.tsx | 14 +- test/hooks/useWindowWidth-test.ts | 14 +- test/integrations/IntegrationManagers-test.ts | 14 +- test/languageHandler-test.tsx | 14 +- test/linkify-matrix-test.ts | 14 +- test/models/Call-test.ts | 14 +- test/models/LocalRoom-test.ts | 14 +- .../NotificationSettings-test.ts | 14 +- test/modules/AppModule-test.ts | 14 +- test/modules/MockModule.ts | 14 +- test/modules/ModuleComponents-test.tsx | 14 +- test/modules/ModuleRunner-test.ts | 14 +- test/modules/ProxiedModuleApi-test.tsx | 14 +- test/notifications/ContentRules-test.ts | 16 +- .../notifications/PushRuleVectorState-test.ts | 16 +- test/predictableRandom.ts | 12 +- test/settings/SettingsStore-test.ts | 14 +- .../controllers/AnalyticsController-test.ts | 14 +- .../DeviceIsolationModeController-test.ts | 33 + .../controllers/FontSizeController-test.ts | 14 +- .../IncompatibleController-test.ts | 14 +- ...erSupportUnstableFeatureController-test.ts | 14 +- .../controllers/SystemFontController-test.ts | 14 +- .../controllers/ThemeController-test.ts | 14 +- test/settings/enums/ImageSize-test.ts | 14 +- .../handlers/DeviceSettingsHandler-test.ts | 14 +- .../RoomDeviceSettingsHandler-test.ts | 14 +- test/settings/watchers/FontWatcher-test.tsx | 14 +- test/settings/watchers/ThemeWatcher-test.tsx | 14 +- test/setup/mocks.ts | 14 +- test/setup/setupConfig.ts | 14 +- test/setup/setupLanguage.ts | 14 +- test/setup/setupManualMocks.ts | 14 +- test/setupTests.ts | 14 +- test/slowReporter.cjs | 9 + test/slowReporter.js | 17 - test/stores/AccountPasswordStore-test.ts | 14 +- test/stores/ActiveWidgetStore-test.ts | 14 +- test/stores/AutoRageshakeStore-test.ts | 14 +- test/stores/BreadcrumbsStore-test.ts | 14 +- test/stores/LifecycleStore-test.ts | 14 +- test/stores/MemberListStore-test.ts | 14 +- test/stores/OwnBeaconStore-test.ts | 14 +- test/stores/OwnProfileStore-test.ts | 14 +- test/stores/ReleaseAnnouncementStore-test.tsx | 26 +- .../stores/RoomNotificationStateStore-test.ts | 14 +- test/stores/RoomViewStore-test.ts | 16 +- test/stores/SetupEncryptionStore-test.ts | 14 +- test/stores/SpaceStore-test.ts | 14 +- test/stores/ToastStore-test.ts | 14 +- test/stores/TypingStore-test.ts | 14 +- test/stores/UserProfilesStore-test.ts | 14 +- test/stores/VoiceRecordingStore-test.ts | 14 +- test/stores/WidgetLayoutStore-test.ts | 14 +- .../notifications/NotificationColor-test.ts | 14 +- .../RoomNotificationState-test.ts | 16 +- test/stores/oidc/OidcClientStore-test.ts | 14 +- .../right-panel/RightPanelStore-test.ts | 32 +- .../action-handlers/View3pidInvite-test.ts | 14 +- .../room-list/MessagePreviewStore-test.ts | 14 +- test/stores/room-list/RoomListStore-test.ts | 14 +- .../room-list/SlidingRoomListStore-test.ts | 14 +- test/stores/room-list/SpaceWatcher-test.ts | 14 +- .../room-list/algorithms/Algorithm-test.ts | 14 +- .../algorithms/RecentAlgorithm-test.ts | 14 +- .../list-ordering/ImportanceAlgorithm-test.ts | 14 +- .../list-ordering/NaturalAlgorithm-test.ts | 14 +- .../filters/SpaceFilterCondition-test.ts | 14 +- .../filters/VisibilityProvider-test.ts | 14 +- .../previews/MessageEventPreview-test.ts | 14 +- .../previews/PollStartEventPreview-test.ts | 14 +- .../previews/ReactionEventPreview-test.ts | 14 +- .../previews/VoiceBroadcastPreview-test.ts | 14 +- test/stores/room-list/utils/roomMute-test.ts | 14 +- test/stores/widgets/StopGapWidget-test.ts | 14 +- .../widgets/StopGapWidgetDriver-test.ts | 47 +- .../widgets/WidgetPermissionStore-test.ts | 14 +- test/submit-rageshake-test.ts | 18 +- test/test-utils/audio.ts | 14 +- test/test-utils/beacon.ts | 41 +- test/test-utils/call.ts | 14 +- test/test-utils/client.ts | 18 +- test/test-utils/composer.ts | 14 +- test/test-utils/console.ts | 14 +- test/test-utils/date.ts | 14 +- test/test-utils/events.ts | 14 +- test/test-utils/index.ts | 14 +- test/test-utils/location.ts | 14 +- test/test-utils/oidc.ts | 14 +- test/test-utils/platform.ts | 14 +- test/test-utils/poll.ts | 14 +- test/test-utils/pushRules.ts | 14 +- test/test-utils/relations.ts | 14 +- test/test-utils/room.ts | 15 +- test/test-utils/test-utils.ts | 25 +- test/test-utils/threads.ts | 14 +- test/test-utils/utilities.ts | 14 +- test/test-utils/wrappers.tsx | 14 +- test/theme-test.ts | 14 +- test/toasts/IncomingCallToast-test.tsx | 14 +- test/toasts/IncomingLegacyCallToast-test.tsx | 14 +- test/toasts/UnverifiedSessionToast-test.tsx | 14 +- test/useTopic-test.tsx | 14 +- test/utils/AnimationUtils-test.ts | 14 +- test/utils/AutoDiscoveryUtils-test.tsx | 14 +- test/utils/DMRoomMap-test.ts | 14 +- test/utils/DateUtils-test.ts | 14 +- test/utils/ErrorUtils-test.ts | 14 +- test/utils/EventRenderingUtils-test.ts | 14 +- test/utils/EventUtils-test.ts | 14 +- test/utils/Feedback-test.ts | 14 +- test/utils/FixedRollingArray-test.ts | 14 +- test/utils/FormattingUtils-test.tsx | 14 +- test/utils/LruCache-test.ts | 14 +- test/utils/MegolmExportEncryption-test.ts | 14 +- test/utils/MessageDiffUtils-test.tsx | 14 +- test/utils/MultiInviter-test.ts | 14 +- test/utils/PhasedRolloutFeature-test.ts | 14 +- test/utils/PinningUtils-test.ts | 289 ++ test/utils/SearchInput-test.ts | 14 +- test/utils/SessionLock-test.ts | 14 +- test/utils/ShieldUtils-test.ts | 14 +- test/utils/Singleflight-test.ts | 14 +- test/utils/SnakedObject-test.ts | 14 +- test/utils/StorageAccess-test.ts | 14 +- test/utils/StorageManager-test.ts | 14 +- test/utils/UrlUtils-test.ts | 14 +- test/utils/WidgetUtils-test.ts | 14 +- test/utils/arrays-test.ts | 14 +- test/utils/beacon/bounds-test.ts | 14 +- test/utils/beacon/duration-test.ts | 14 +- test/utils/beacon/geolocation-test.ts | 14 +- test/utils/beacon/timeline-test.ts | 14 +- test/utils/colour-test.ts | 14 +- test/utils/connection-test.ts | 14 +- test/utils/createVoiceMessageContent-test.ts | 14 +- test/utils/crypto/deviceInfo-test.ts | 14 +- .../shouldForceDisableEncryption-test.ts | 14 +- test/utils/device/clientInformation-test.ts | 14 +- test/utils/device/parseUserAgent-test.ts | 14 +- ...snoozeBulkUnverifiedDeviceReminder-test.ts | 14 +- test/utils/direct-messages-test.ts | 14 +- test/utils/dm/createDmLocalRoom-test.ts | 14 +- test/utils/dm/filterValidMDirect-test.ts | 14 +- test/utils/dm/findDMForUser-test.ts | 14 +- test/utils/dm/findDMRoom-test.ts | 16 +- test/utils/enums-test.ts | 14 +- test/utils/export-test.tsx | 14 +- test/utils/exportUtils/HTMLExport-test.ts | 16 +- test/utils/exportUtils/JSONExport-test.ts | 14 +- .../utils/exportUtils/PlainTextExport-test.ts | 14 +- .../__snapshots__/HTMLExport-test.ts.snap | 2 +- test/utils/exportUtils/exportCSS-test.ts | 14 +- test/utils/i18n-helpers-test.ts | 14 +- test/utils/iterables-test.ts | 14 +- test/utils/leave-behaviour-test.ts | 14 +- test/utils/local-room-test.ts | 14 +- test/utils/localRoom/isLocalRoom-test.ts | 14 +- test/utils/localRoom/isRoomReady-test.ts | 14 +- test/utils/location/isSelfLocation-test.ts | 14 +- .../location/locationEventGeoUri-test.ts | 14 +- test/utils/location/map-test.ts | 14 +- test/utils/location/parseGeoUri-test.ts | 23 +- .../location/positionFailureMessage-test.ts | 14 +- test/utils/maps-test.ts | 14 +- .../media/requestMediaPermissions-test.tsx | 14 +- test/utils/membership-test.ts | 14 +- test/utils/notifications-test.ts | 14 +- test/utils/numbers-test.ts | 14 +- test/utils/objects-test.ts | 14 +- test/utils/oidc/TokenRefresher-test.ts | 14 +- test/utils/oidc/authorize-test.ts | 14 +- test/utils/oidc/persistOidcSettings-test.ts | 14 +- test/utils/oidc/registerClient-test.ts | 14 +- .../MatrixSchemePermalinkConstructor-test.ts | 14 +- .../MatrixToPermalinkConstructor-test.ts | 14 +- test/utils/permalinks/Permalinks-test.ts | 16 +- test/utils/pillify-test.tsx | 14 +- test/utils/promise-test.ts | 57 + test/utils/room/canInviteTo-test.ts | 14 +- .../getJoinedNonFunctionalMembers-test.ts | 14 +- .../room/getRoomFunctionalMembers-test.ts | 14 +- test/utils/room/inviteToRoom-test.ts | 14 +- ...ncryptRoomWithSingle3rdPartyInvite-test.ts | 14 +- test/utils/room/tagRoom-test.ts | 14 +- test/utils/rooms-test.ts | 14 +- test/utils/sets-test.ts | 14 +- test/utils/stringOrderField-test.ts | 14 +- test/utils/threepids-test.ts | 14 +- test/utils/tooltipify-test.tsx | 14 +- test/utils/validate/numberInRange-test.ts | 14 +- .../audio/VoiceBroadcastRecorder-test.ts | 14 +- .../components/VoiceBroadcastBody-test.tsx | 14 +- .../components/atoms/LiveBadge-test.tsx | 14 +- .../atoms/VoiceBroadcastControl-test.tsx | 14 +- .../atoms/VoiceBroadcastHeader-test.tsx | 13 +- .../VoiceBroadcastPlaybackControl-test.tsx | 16 +- .../VoiceBroadcastPlaybackBody-test.tsx | 16 +- .../VoiceBroadcastPreRecordingPip-test.tsx | 14 +- .../VoiceBroadcastRecordingBody-test.tsx | 16 +- .../VoiceBroadcastRecordingPip-test.tsx | 14 +- .../VoiceBroadcastSmallPlaybackBody-test.tsx | 14 +- .../models/VoiceBroadcastPlayback-test.tsx | 14 +- .../models/VoiceBroadcastPreRecording-test.ts | 14 +- .../models/VoiceBroadcastRecording-test.ts | 14 +- .../VoiceBroadcastPlaybacksStore-test.ts | 14 +- .../VoiceBroadcastPreRecordingStore-test.ts | 14 +- .../VoiceBroadcastRecordingsStore-test.ts | 14 +- .../utils/VoiceBroadcastChunkEvents-test.ts | 14 +- .../utils/VoiceBroadcastResumer-test.ts | 14 +- .../utils/cleanUpBroadcasts-test.ts | 14 +- .../determineVoiceBroadcastLiveness-test.ts | 14 +- ...iveVoiceBroadcastFromUserAndDevice-test.ts | 14 +- .../utils/getChunkLength-test.ts | 14 +- .../utils/getMaxBroadcastLength-test.ts | 14 +- .../utils/hasRoomLiveVoiceBroadcast-test.ts | 14 +- .../utils/isRelatedToVoiceBroadcast-test.ts | 14 +- ...pauseNonLiveBroadcastFromOtherRoom-test.ts | 14 +- .../utils/retrieveStartedInfoEvent-test.ts | 14 +- .../setUpVoiceBroadcastPreRecording-test.ts | 14 +- ...splayAsVoiceBroadcastRecordingTile-test.ts | 14 +- .../shouldDisplayAsVoiceBroadcastTile-test.ts | 14 +- .../startNewVoiceBroadcastRecording-test.ts | 14 +- test/voice-broadcast/utils/test-utils.ts | 14 +- ...textForVoiceBroadcastStoppedEvent-test.tsx | 14 +- ...ceBroadcastStoppedEventWithoutLink-test.ts | 14 +- test/widgets/ManagedHybrid-test.ts | 14 +- tsconfig.json | 1 + yarn.lock | 3690 ++++++++--------- 2530 files changed, 17001 insertions(+), 31482 deletions(-) create mode 100644 .github/labels.yml create mode 100644 .github/workflows/sync-labels.yml delete mode 100644 LICENSE create mode 100644 LICENSE-AGPL-3.0 create mode 100644 LICENSE-GPL-3.0 create mode 100644 playwright/e2e/crypto/invisible-crypto.spec.ts create mode 100644 playwright/snapshots/messages/messages.spec.ts/reply-message-ltr-ltrdisplayname-linux.png create mode 100644 playwright/snapshots/messages/messages.spec.ts/reply-message-ltr-rtldisplayname-linux.png create mode 100644 playwright/snapshots/messages/messages.spec.ts/reply-message-trl-ltrdisplayname-linux.png create mode 100644 playwright/snapshots/messages/messages.spec.ts/reply-message-trl-rtldisplayname-linux.png create mode 100644 playwright/snapshots/pinned-messages/pinned-messages.spec.ts/pinned-message-banner-1-Msg1-linux.png create mode 100644 playwright/snapshots/pinned-messages/pinned-messages.spec.ts/pinned-message-banner-2-Msg1-linux.png create mode 100644 playwright/snapshots/pinned-messages/pinned-messages.spec.ts/pinned-message-banner-2-Msg2-linux.png create mode 100644 playwright/snapshots/pinned-messages/pinned-messages.spec.ts/pinned-message-banner-4-Msg1-linux.png create mode 100644 playwright/snapshots/pinned-messages/pinned-messages.spec.ts/pinned-message-banner-4-Msg2-linux.png create mode 100644 playwright/snapshots/pinned-messages/pinned-messages.spec.ts/pinned-message-banner-4-Msg3-linux.png create mode 100644 playwright/snapshots/pinned-messages/pinned-messages.spec.ts/pinned-message-banner-4-Msg4-linux.png delete mode 100644 playwright/snapshots/pinned-messages/pinned-messages.spec.ts/pinned-messages-list-messages-2-linux.png delete mode 100644 playwright/snapshots/pinned-messages/pinned-messages.spec.ts/pinned-messages-list-messages-3-linux.png create mode 100644 res/css/structures/auth/_MobileRegistration.pcss create mode 100644 res/css/views/rooms/_PinnedMessageBanner.pcss create mode 100644 src/TimezoneHandler.ts create mode 100644 src/components/views/rooms/PinnedMessageBanner.tsx delete mode 100644 src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx create mode 100644 src/hooks/usePinnedEvents.ts create mode 100644 src/hooks/useUserTimezone.ts create mode 100644 src/settings/controllers/DeviceIsolationModeController.ts create mode 100644 test/TimezoneHandler-test.ts create mode 100644 test/components/structures/auth/CompleteSecurity-test.tsx create mode 100644 test/components/views/dialogs/security/RestoreKeyBackupDialog-test.tsx create mode 100644 test/components/views/dialogs/security/__snapshots__/RestoreKeyBackupDialog-test.tsx.snap create mode 100644 test/components/views/elements/EffectsOverlay-test.tsx create mode 100644 test/components/views/elements/__snapshots__/EffectsOverlay-test.tsx.snap create mode 100644 test/components/views/rooms/AppsDrawer-test.tsx create mode 100644 test/components/views/rooms/PinnedMessageBanner-test.tsx create mode 100644 test/components/views/rooms/ReadReceiptMarker-test.tsx create mode 100644 test/components/views/rooms/__snapshots__/PinnedMessageBanner-test.tsx.snap create mode 100644 test/settings/controllers/DeviceIsolationModeController-test.ts create mode 100644 test/slowReporter.cjs delete mode 100644 test/slowReporter.js create mode 100644 test/utils/PinningUtils-test.ts create mode 100644 test/utils/promise-test.ts diff --git a/.editorconfig b/.editorconfig index 331e39380..c4328ae91 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,16 +1,8 @@ +# Copyright 2024 New Vector Ltd. # Copyright 2017 Aviral Dasgupta -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# +# SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +# Please see LICENSE files in the repository root for full details. root = true diff --git a/.eslintrc.js b/.eslintrc.js index 444388d49..a3c7eb4f8 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -122,8 +122,6 @@ module.exports = { "!matrix-js-sdk/src/crypto/aes", "!matrix-js-sdk/src/crypto/keybackup", "!matrix-js-sdk/src/crypto/deviceinfo", - "!matrix-js-sdk/src/crypto/key_passphrase", - "!matrix-js-sdk/src/crypto/recoverykey", "!matrix-js-sdk/src/crypto/dehydration", "!matrix-js-sdk/src/oidc", "!matrix-js-sdk/src/oidc/discovery", diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e7963c267..e7a976a7b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,17 +1,18 @@ -* @matrix-org/element-web-reviewers -/.github/workflows/** @matrix-org/element-web-team -/package.json @matrix-org/element-web-team -/yarn.lock @matrix-org/element-web-team +* @element-hq/element-web-reviewers +/.github/workflows/** @element-hq/element-web-team +/package.json @element-hq/element-web-team +/yarn.lock @element-hq/element-web-team -/src/SecurityManager.ts @matrix-org/element-crypto-web-reviewers -/test/SecurityManager-test.ts @matrix-org/element-crypto-web-reviewers -/src/async-components/views/dialogs/security/ @matrix-org/element-crypto-web-reviewers -/src/components/views/dialogs/security/ @matrix-org/element-crypto-web-reviewers -/test/components/views/dialogs/security/ @matrix-org/element-crypto-web-reviewers -/src/stores/SetupEncryptionStore.ts @matrix-org/element-crypto-web-reviewers -/test/stores/SetupEncryptionStore-test.ts @matrix-org/element-crypto-web-reviewers +/src/SecurityManager.ts @element-hq/element-crypto-web-reviewers +/test/SecurityManager-test.ts @element-hq/element-crypto-web-reviewers +/src/async-components/views/dialogs/security/ @element-hq/element-crypto-web-reviewers +/src/components/views/dialogs/security/ @element-hq/element-crypto-web-reviewers +/test/components/views/dialogs/security/ @element-hq/element-crypto-web-reviewers +/src/stores/SetupEncryptionStore.ts @element-hq/element-crypto-web-reviewers +/test/stores/SetupEncryptionStore-test.ts @element-hq/element-crypto-web-reviewers # Ignore translations as those will be updated by GHA for Localazy download /src/i18n/strings # Ignore the synapse plugin as this is updated by GHA for docker image updating /playwright/plugins/homeserver/synapse/index.ts + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d4997def5..2571bc145 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -5,4 +5,4 @@ - [ ] Tests written for new code (and old code if feasible). - [ ] New or updated `public`/`exported` symbols have accurate [TSDoc](https://tsdoc.org/) documentation. - [ ] Linter and other CI checks pass. -- [ ] Sign-off given on the changes (see [CONTRIBUTING.md](https://github.com/matrix-org/matrix-react-sdk/blob/develop/CONTRIBUTING.md)). +- [ ] I have licensed the changes to Element by completing the [Contributor License Agreement (CLA)](https://cla-assistant.io/element-hq/matrix-react-sdk) diff --git a/.github/labels.yml b/.github/labels.yml new file mode 100644 index 000000000..7c4b66d7f --- /dev/null +++ b/.github/labels.yml @@ -0,0 +1,28 @@ +- name: "A-Timesheet-1" + description: "Log any time spent on this into the A-Timesheet-1 project" + color: "5319E7" +- name: "backport staging" + description: "Label to automatically backport PR to staging branch" + color: "B60205" +- name: "Dependencies" + description: "Pull requests that update a dependency file" + color: "0366d6" +- name: "Sponsored" + color: "b506d8" +- name: "T-Deprecation" + description: "A pull request that makes something deprecated" + color: "98e6ae" +- name: "X-Blocked" + description: "The PR cannot move forward in any capacity until an action is made" + color: "ff7979" +- name: "X-Breaking-Change" + color: "ff7979" +- name: "X-Upcoming-Release-Blocker" + description: "This does not affect the current release cycle but will affect the next one" + color: "e99695" +- name: "Z-Community-PR" + description: "Issue is solved by a community member's PR" + color: "ededed" +- name: "Z-Experiment" + description: "Experimental PR, primarily up for its Netlify build, high likelihood of never making it beyond here." + color: "b60205" diff --git a/.github/workflows/notify-element-web.yml b/.github/workflows/notify-element-web.yml index 522a089ed..442a2f108 100644 --- a/.github/workflows/notify-element-web.yml +++ b/.github/workflows/notify-element-web.yml @@ -9,7 +9,7 @@ jobs: name: "Notify Element Web" runs-on: ubuntu-latest # Only respect triggers from our develop branch, ignore that of forks - if: github.repository == 'matrix-org/matrix-react-sdk' + if: github.repository == 'element-hq/matrix-react-sdk' steps: - name: Notify element-web repo that a new SDK build is on develop uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # v3 diff --git a/.github/workflows/playwright-image-updates.yaml b/.github/workflows/playwright-image-updates.yaml index 761d8a8b6..4d4c08f56 100644 --- a/.github/workflows/playwright-image-updates.yaml +++ b/.github/workflows/playwright-image-updates.yaml @@ -20,7 +20,7 @@ jobs: - name: Create Pull Request id: cpr - uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6 + uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7 with: token: ${{ secrets.ELEMENT_BOT_TOKEN }} branch: actions/playwright-image-updates diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index eddca8355..9d1cb6e2d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,9 @@ concurrency: ${{ github.workflow }} jobs: release: uses: matrix-org/matrix-js-sdk/.github/workflows/release-make.yml@develop - secrets: inherit + secrets: + ELEMENT_BOT_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} with: final: ${{ inputs.mode == 'final' }} npm: ${{ inputs.npm }} diff --git a/.github/workflows/sync-labels.yml b/.github/workflows/sync-labels.yml new file mode 100644 index 000000000..bb22292a6 --- /dev/null +++ b/.github/workflows/sync-labels.yml @@ -0,0 +1,21 @@ +name: Sync labels +on: + workflow_dispatch: {} + schedule: + - cron: "0 1 * * *" # 1am every day + push: + branches: + - develop + paths: + - .github/labels.yml +jobs: + sync-labels: + uses: element-hq/element-meta/.github/workflows/sync-labels.yml@develop + with: + LABELS: | + element-hq/element-meta + .github/labels.yml + DELETE: true + WET: true + secrets: + ELEMENT_BOT_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e8418a951..3bf5700f0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -39,7 +39,7 @@ jobs: - name: Checkout code uses: actions/checkout@v4 with: - repository: ${{ inputs.matrix-js-sdk-sha && 'matrix-org/matrix-react-sdk' || github.repository }} + repository: ${{ inputs.matrix-js-sdk-sha && 'element-hq/matrix-react-sdk' || github.repository }} - name: Yarn cache uses: actions/setup-node@v4 @@ -89,14 +89,18 @@ jobs: coverage !coverage/lcov-report - skip_sonar: - name: Skip SonarCloud in merge queue - if: github.event_name == 'merge_group' || inputs.disable_coverage == 'true' - runs-on: ubuntu-latest + complete: + name: jest-tests needs: jest + if: always() + runs-on: ubuntu-latest steps: - - name: Skip SonarCloud - uses: Sibz/github-status-action@071b5370da85afbb16637d6eed8524a06bc2053e # v1 + - if: needs.jest.result != 'skipped' && needs.jest.result != 'success' + run: exit 1 + + - name: Skip SonarCloud in merge queue + if: github.event_name == 'merge_group' || inputs.disable_coverage == 'true' + uses: Sibz/github-status-action@faaa4d96fecf273bd762985e0e7f9f933c774918 # v1 with: authToken: ${{ secrets.GITHUB_TOKEN }} state: success @@ -111,7 +115,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - repository: ${{ inputs.matrix-js-sdk-sha && 'matrix-org/matrix-react-sdk' || github.repository }} + repository: ${{ inputs.matrix-js-sdk-sha && 'element-hq/matrix-react-sdk' || github.repository }} - uses: actions/setup-node@v4 with: diff --git a/CHANGELOG.md b/CHANGELOG.md index 2faa32bce..ad4596091 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,55 @@ +Changes in [3.112.0](https://github.com/element-hq/matrix-react-sdk/releases/tag/v3.112.0) (2024-10-08) +======================================================================================================= +## ✨ Features + +* Roll back change to device isolation mode ([#104](https://github.com/element-hq/matrix-react-sdk/pull/104)). Contributed by @richvdh. +* Remove right panel toggling behaviour on room header buttons ([#100](https://github.com/element-hq/matrix-react-sdk/pull/100)). Contributed by @t3chguy. +* Improve error display for messages sent from insecure devices ([#93](https://github.com/element-hq/matrix-react-sdk/pull/93)). Contributed by @richvdh. +* Add labs option to exclude unverified devices ([#92](https://github.com/element-hq/matrix-react-sdk/pull/92)). Contributed by @richvdh. +* Improve contrast for timestamps, date separators \& spotlight trigger ([#91](https://github.com/element-hq/matrix-react-sdk/pull/91)). Contributed by @t3chguy. +* Open room settings on room header avatar click ([#88](https://github.com/element-hq/matrix-react-sdk/pull/88)). Contributed by @t3chguy. +* Use `strong` over `b` for improved a11y semantics ([#41](https://github.com/element-hq/matrix-react-sdk/pull/41)). Contributed by @t3chguy. +* Grant Element Call widget capabilities for "raise hand" feature ([#82](https://github.com/element-hq/matrix-react-sdk/pull/82)). Contributed by @AndrewFerr. +* Mobile registration optimizations and tests ([#62](https://github.com/element-hq/matrix-react-sdk/pull/62)). Contributed by @langleyd. +* Ignore chat effect when older than 48h ([#48](https://github.com/element-hq/matrix-react-sdk/pull/48)). Contributed by @florianduros. + +## 🐛 Bug Fixes + +* Fix untranslated keys being rendered in `/help` dialog ([#90](https://github.com/element-hq/matrix-react-sdk/pull/90)). Contributed by @t3chguy. +* Ensure timeline search results are visible even in video rooms ([#96](https://github.com/element-hq/matrix-react-sdk/pull/96)). Contributed by @t3chguy. +* Pop right panel timeline when unmaximising widget to avoid double timeline ([#94](https://github.com/element-hq/matrix-react-sdk/pull/94)). Contributed by @t3chguy. +* Fix accessible label on left panel spotlight trigger ([#87](https://github.com/element-hq/matrix-react-sdk/pull/87)). Contributed by @t3chguy. +* Crypto: fix display of device key ([#86](https://github.com/element-hq/matrix-react-sdk/pull/86)). Contributed by @richvdh. + + +Changes in [3.111.0](https://github.com/element-hq/matrix-react-sdk/releases/tag/v3.111.0) (2024-10-01) +======================================================================================================= +## ✨ Features + +* [Backport staging] Allow joining calls and video rooms without enabling the labs flags ([#106](https://github.com/element-hq/matrix-react-sdk/pull/106)). Contributed by @RiotRobot. + + +Changes in [3.110.0](https://github.com/element-hq/matrix-react-sdk/releases/tag/v3.110.0) (2024-09-24) +======================================================================================================= +## ✨ Features + +* Add Release announcement for the pinning message list ([#46](https://github.com/element-hq/matrix-react-sdk/pull/46)). Contributed by @florianduros. +* Unlabs feature pinning ([#22](https://github.com/element-hq/matrix-react-sdk/pull/22)). Contributed by @florianduros. +* Add mobile registration ([#42](https://github.com/element-hq/matrix-react-sdk/pull/42)). Contributed by @langleyd. +* Add support for `org.matrix.cross_signing_reset` UIA stage flow ([#34](https://github.com/element-hq/matrix-react-sdk/pull/34)). Contributed by @t3chguy. +* Add timezone to user profile ([#20](https://github.com/element-hq/matrix-react-sdk/pull/20)). Contributed by @Half-Shot. +* Add config option to force verification ([#29](https://github.com/element-hq/matrix-react-sdk/pull/29)). Contributed by @dbkr. +* Reduce pinned message banner size ([#28](https://github.com/element-hq/matrix-react-sdk/pull/28)). Contributed by @florianduros. +* Enable message pinning labs by default ([#25](https://github.com/element-hq/matrix-react-sdk/pull/25)). Contributed by @florianduros. +* Remove release announcement of the new header ([#23](https://github.com/element-hq/matrix-react-sdk/pull/23)). Contributed by @florianduros. + +## 🐛 Bug Fixes + +* Fix timeout type ([#40](https://github.com/element-hq/matrix-react-sdk/pull/40)). Contributed by @dbkr. +* Fix huge usage bandwidth and performance issue of pinned message banner. ([#37](https://github.com/element-hq/matrix-react-sdk/pull/37)). Contributed by @florianduros. +* Reverse order of pinned message list ([#19](https://github.com/element-hq/matrix-react-sdk/pull/19)). Contributed by @florianduros. + + Changes in [3.108.0](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v3.108.0) (2024-08-27) ======================================================================================================= ## ✨ Features diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a6497b1d4..792c6a3d0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,5 @@ # Contributing code to matrix-react-sdk -matrix-react-sdk follows the same pattern as https://github.com/vector-im/element-web/blob/develop/CONTRIBUTING.md +Everyone is welcome to contribute code to matrix-react-sdk, provided that they are willing to license their contributions to Element under a [Contributor License Agreement](https://cla-assistant.io/element-hq/matrix-react-sdk) (CLA). This ensures that their contribution will be made available under an OSI-approved open-source license, currently licensed under Affero General Public License v3 (AGPLv3) or General Public License v3 (GPLv3) at your choice. + +matrix-react-sdk follows the same pattern as element-web, please find more contributing guidelines at https://github.com/vector-im/element-web/blob/develop/CONTRIBUTING.md diff --git a/LICENSE b/LICENSE deleted file mode 100644 index f433b1a53..000000000 --- a/LICENSE +++ /dev/null @@ -1,177 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS diff --git a/LICENSE-AGPL-3.0 b/LICENSE-AGPL-3.0 new file mode 100644 index 000000000..bae94e189 --- /dev/null +++ b/LICENSE-AGPL-3.0 @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. \ No newline at end of file diff --git a/LICENSE-GPL-3.0 b/LICENSE-GPL-3.0 new file mode 100644 index 000000000..e72bfddab --- /dev/null +++ b/LICENSE-GPL-3.0 @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/__mocks__/maplibre-gl.js b/__mocks__/maplibre-gl.js index 6c94f7c77..c410e4f24 100644 --- a/__mocks__/maplibre-gl.js +++ b/__mocks__/maplibre-gl.js @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ const EventEmitter = require("events"); diff --git a/__mocks__/workerFactoryMock.js b/__mocks__/workerFactoryMock.js index 56dc085cd..956f5b04a 100644 --- a/__mocks__/workerFactoryMock.js +++ b/__mocks__/workerFactoryMock.js @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export default function workerFactory(options) { diff --git a/jest.config.ts b/jest.config.ts index 7293e5b3b..ae1051fd7 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { env } from "process"; @@ -53,7 +45,7 @@ if (env["GITHUB_ACTIONS"] !== undefined) { // if we're running against the develop branch, also enable the slow test reporter if (env["GITHUB_REF"] == "refs/heads/develop") { - reporters.push("/test/slowReporter.js"); + reporters.push("/test/slowReporter.cjs"); } config.reporters = reporters; } diff --git a/package.json b/package.json index 8f6a05b32..a857daa7a 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "name": "matrix-react-sdk", "version": "0.0.0", - "version-matrix": "3.108.0", + "version-matrix": "3.112.0", "description": "SDK for matrix.org using React for Tchap", "author": "DINUM", "repository": { "type": "git", "url": "https://github.com/tchapgouv/matrix-react-sdk-tchap" }, - "license": "Apache-2.0", + "license": "AGPL-3.0-only OR GPL-3.0-only", "files": [ "lib", "res", @@ -28,9 +28,7 @@ "node": ">=20.0.0" }, "main": "./lib/index.ts", - "matrix_src_main": "./src/index.ts", - "matrix_lib_main": "./lib/index.ts", - "matrix_lib_typings": "./lib/index.d.ts", + "typings": "./lib/index.d.ts", "matrix_i18n_extra_translation_funcs": [ "UserFriendlyError" ], @@ -65,20 +63,19 @@ }, "resolutions": { "@types/react-dom": "17.0.25", - "@types/react": "17.0.80", + "@types/react": "17.0.82", "@types/seedrandom": "3.0.8", "oidc-client-ts": "3.0.1", "jwt-decode": "4.0.0", "@floating-ui/react": "0.26.11", "@radix-ui/react-id": "1.1.0", - "caniuse-lite": "1.0.30001643", - "electron-to-chromium": "1.5.2" + "caniuse-lite": "1.0.30001655" }, "dependencies": { "@babel/runtime": "^7.12.5", - "@matrix-org/analytics-events": "^0.24.0", + "@matrix-org/analytics-events": "^0.25.0", "@matrix-org/emojibase-bindings": "^1.1.2", - "@matrix-org/matrix-wysiwyg": "2.37.8", + "@matrix-org/matrix-wysiwyg": "2.37.9", "@matrix-org/olm": "3.2.15", "@matrix-org/react-sdk-module-api": "^2.4.0", "@matrix-org/spec": "^1.7.0", @@ -96,10 +93,9 @@ "classnames": "^2.2.6", "commonmark": "^0.31.0", "counterpart": "^0.18.6", - "css-tree": "^2.3.1", + "css-tree": "^3.0.0", "diff-dom": "^5.0.0", "diff-match-patch": "^1.0.5", - "electron-to-chromium": "^1.5.2", "emojibase-regex": "15.3.2", "escape-html": "^1.0.3", "file-saver": "^2.0.5", @@ -120,16 +116,16 @@ "maplibre-gl": "^2.0.0", "matrix-encrypt-attachment": "^1.0.3", "matrix-events-sdk": "0.0.1", - "matrix-js-sdk": "34.4.0", - "matrix-widget-api": "^1.8.2", + "matrix-js-sdk": "34.7.0", + "matrix-widget-api": "^1.9.0", "memoize-one": "^6.0.0", "minimist": "^1.2.5", "oidc-client-ts": "^3.0.1", "opus-recorder": "^8.0.3", "pako": "^2.0.3", "png-chunks-extract": "^1.0.0", - "posthog-js": "1.149.1", - "qrcode": "1.5.3", + "posthog-js": "1.157.2", + "qrcode": "1.5.4", "re-resizable": "^6.9.0", "react": "17.0.2", "react-beautiful-dnd": "^13.1.0", @@ -189,11 +185,11 @@ "@types/node-fetch": "^2.6.2", "@types/pako": "^2.0.0", "@types/qrcode": "^1.3.5", - "@types/react": "17.0.80", + "@types/react": "17.0.82", "@types/react-beautiful-dnd": "^13.0.0", "@types/react-dom": "17.0.25", "@types/react-transition-group": "^4.4.0", - "@types/sanitize-html": "2.11.0", + "@types/sanitize-html": "2.13.0", "@types/sdp-transform": "^2.4.6", "@types/seedrandom": "3.0.8", "@types/tar-js": "^0.3.2", @@ -201,10 +197,10 @@ "@types/uuid": "^10.0.0", "@typescript-eslint/eslint-plugin": "^7.0.0", "@typescript-eslint/parser": "^7.0.0", - "axe-core": "4.9.1", + "axe-core": "4.10.0", "babel-jest": "^29.0.0", "blob-polyfill": "^9.0.0", - "eslint": "8.57.0", + "eslint": "8.57.1", "eslint-config-google": "^0.14.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-deprecate": "0.8.5", @@ -214,13 +210,13 @@ "eslint-plugin-matrix-org": "1.2.1", "eslint-plugin-react": "^7.28.0", "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-unicorn": "^54.0.0", + "eslint-plugin-unicorn": "^55.0.0", "express": "^4.18.2", "fake-indexeddb": "^6.0.0", "fetch-mock-jest": "^1.5.1", "fs-extra": "^11.0.0", "glob": "^11.0.0", - "husky": "^8.0.3", + "husky": "^9.0.0", "jest": "^29.6.2", "jest-canvas-mock": "^2.5.2", "jest-environment-jsdom": "^29.6.2", @@ -241,7 +237,7 @@ "stylelint-config-standard": "^36.0.0", "stylelint-scss": "^6.0.0", "ts-node": "^10.9.1", - "typescript": "5.5.4", + "typescript": "5.6.2", "web-streams-polyfill": "^4.0.0" }, "peerDependencies": { @@ -252,6 +248,5 @@ "outputDirectory": "coverage", "outputName": "jest-sonar-report.xml", "relativePaths": true - }, - "typings": "./lib/index.d.ts" + } } diff --git a/playwright.config.ts b/playwright.config.ts index a9fcf2242..2df59fcfb 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { defineConfig } from "@playwright/test"; diff --git a/playwright/@types/playwright-core.d.ts b/playwright/@types/playwright-core.d.ts index 0ef2ca0ec..9701b2dda 100644 --- a/playwright/@types/playwright-core.d.ts +++ b/playwright/@types/playwright-core.d.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ declare module "playwright-core/lib/utils" { diff --git a/playwright/Dockerfile b/playwright/Dockerfile index 29e7f83f1..f054d4100 100644 --- a/playwright/Dockerfile +++ b/playwright/Dockerfile @@ -1,9 +1,10 @@ -FROM mcr.microsoft.com/playwright:v1.45.3-jammy +FROM mcr.microsoft.com/playwright:v1.46.1-jammy WORKDIR /work/matrix-react-sdk VOLUME ["/work/element-web/node_modules"] -RUN apt-get update && apt-get -y install docker.io +# fonts-dejavu is needed for the same RTL rendering as on CI +RUN apt-get update && apt-get -y install docker.io fonts-dejavu COPY docker-entrypoint.sh /opt/docker-entrypoint.sh ENTRYPOINT ["bash", "/opt/docker-entrypoint.sh"] diff --git a/playwright/e2e/accessibility/keyboard-navigation.spec.ts b/playwright/e2e/accessibility/keyboard-navigation.spec.ts index b4b74f518..18983bde0 100644 --- a/playwright/e2e/accessibility/keyboard-navigation.spec.ts +++ b/playwright/e2e/accessibility/keyboard-navigation.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/app-loading/feature-detection.spec.ts b/playwright/e2e/app-loading/feature-detection.spec.ts index 0c78d9d01..16e17a805 100644 --- a/playwright/e2e/app-loading/feature-detection.spec.ts +++ b/playwright/e2e/app-loading/feature-detection.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/app-loading/guest-registration.spec.ts b/playwright/e2e/app-loading/guest-registration.spec.ts index 17ec36935..4455baed2 100644 --- a/playwright/e2e/app-loading/guest-registration.spec.ts +++ b/playwright/e2e/app-loading/guest-registration.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* diff --git a/playwright/e2e/app-loading/stored-credentials.spec.ts b/playwright/e2e/app-loading/stored-credentials.spec.ts index f720a5455..34cbb5aea 100644 --- a/playwright/e2e/app-loading/stored-credentials.spec.ts +++ b/playwright/e2e/app-loading/stored-credentials.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { expect, test } from "../../element-web-test"; diff --git a/playwright/e2e/audio-player/audio-player.spec.ts b/playwright/e2e/audio-player/audio-player.spec.ts index e60d27329..a8f483a37 100644 --- a/playwright/e2e/audio-player/audio-player.spec.ts +++ b/playwright/e2e/audio-player/audio-player.spec.ts @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Suguru Hirahara Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Locator, Page } from "@playwright/test"; diff --git a/playwright/e2e/chat-export/html-export.spec.ts b/playwright/e2e/chat-export/html-export.spec.ts index 30c356f49..0e12e8d93 100644 --- a/playwright/e2e/chat-export/html-export.spec.ts +++ b/playwright/e2e/chat-export/html-export.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import os from "node:os"; diff --git a/playwright/e2e/composer/CIDER.spec.ts b/playwright/e2e/composer/CIDER.spec.ts index 779babdaf..2052b9683 100644 --- a/playwright/e2e/composer/CIDER.spec.ts +++ b/playwright/e2e/composer/CIDER.spec.ts @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/composer/RTE.spec.ts b/playwright/e2e/composer/RTE.spec.ts index 53599d532..d76a33731 100644 --- a/playwright/e2e/composer/RTE.spec.ts +++ b/playwright/e2e/composer/RTE.spec.ts @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; @@ -249,5 +241,110 @@ test.describe("Composer", () => { ); }); }); + + test.describe("Drafts", () => { + test("drafts with rich and plain text", async ({ page, app }) => { + // Set up a second room to swtich to, to test drafts + const firstRoomname = "Composing Room"; + const secondRoomname = "Second Composing Room"; + await app.client.createRoom({ name: secondRoomname }); + + // Composer is visible + const composer = page.locator("div[contenteditable=true]"); + await expect(composer).toBeVisible(); + + // Type some formatted text + await composer.pressSequentially("my "); + await composer.press(`${CtrlOrMeta}+KeyB`); + await composer.pressSequentially("bold"); + + // Change to plain text mode + await page.getByRole("button", { name: "Hide formatting" }).click(); + + // Change to another room and back again + await app.viewRoomByName(secondRoomname); + await app.viewRoomByName(firstRoomname); + + // assert the markdown + await expect(page.locator("div[contenteditable=true]", { hasText: "my __bold__" })).toBeVisible(); + + // Change to plain text mode and assert the markdown + await page.getByRole("button", { name: "Show formatting" }).click(); + + // Change to another room and back again + await app.viewRoomByName(secondRoomname); + await app.viewRoomByName(firstRoomname); + + // Send the message and assert the message + await page.getByRole("button", { name: "Send message" }).click(); + await expect(page.locator(".mx_EventTile_last .mx_EventTile_body").getByText("my bold")).toBeVisible(); + }); + + test("draft with replies", async ({ page, app }) => { + // Set up a second room to swtich to, to test drafts + const firstRoomname = "Composing Room"; + const secondRoomname = "Second Composing Room"; + await app.client.createRoom({ name: secondRoomname }); + + // Composer is visible + const composer = page.locator("div[contenteditable=true]"); + await expect(composer).toBeVisible(); + + // Send a message + await composer.pressSequentially("my first message"); + await page.getByRole("button", { name: "Send message" }).click(); + + // Click reply + const tile = page.locator(".mx_EventTile_last"); + await tile.hover(); + await tile.getByRole("button", { name: "Reply", exact: true }).click(); + + // Type reply text + await composer.pressSequentially("my reply"); + + // Change to another room and back again + await app.viewRoomByName(secondRoomname); + await app.viewRoomByName(firstRoomname); + + // Assert reply mode and reply text + await expect(page.getByText("Replying")).toBeVisible(); + await expect(page.locator("div[contenteditable=true]", { hasText: "my reply" })).toBeVisible(); + }); + + test("draft in threads", async ({ page, app }) => { + // Set up a second room to swtich to, to test drafts + const firstRoomname = "Composing Room"; + const secondRoomname = "Second Composing Room"; + await app.client.createRoom({ name: secondRoomname }); + + // Composer is visible + const composer = page.locator("div[contenteditable=true]"); + await expect(composer).toBeVisible(); + + // Send a message + await composer.pressSequentially("my first message"); + await page.getByRole("button", { name: "Send message" }).click(); + + // Click reply + const tile = page.locator(".mx_EventTile_last"); + await tile.hover(); + await tile.getByRole("button", { name: "Reply in thread" }).click(); + + const thread = page.locator(".mx_ThreadView"); + const threadComposer = thread.locator("div[contenteditable=true]"); + + // Type threaded text + await threadComposer.pressSequentially("my threaded message"); + + // Change to another room and back again + await app.viewRoomByName(secondRoomname); + await app.viewRoomByName(firstRoomname); + + // Assert threaded draft + await expect( + thread.locator("div[contenteditable=true]", { hasText: "my threaded message" }), + ).toBeVisible(); + }); + }); }); }); diff --git a/playwright/e2e/create-room/create-room.spec.ts b/playwright/e2e/create-room/create-room.spec.ts index c46de21da..51a135ca0 100644 --- a/playwright/e2e/create-room/create-room.spec.ts +++ b/playwright/e2e/create-room/create-room.spec.ts @@ -1,17 +1,9 @@ /* -Copyright 2022-2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/crypto/backups.spec.ts b/playwright/e2e/crypto/backups.spec.ts index 75c8e3eed..da162474f 100644 --- a/playwright/e2e/crypto/backups.spec.ts +++ b/playwright/e2e/crypto/backups.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { type Page } from "@playwright/test"; diff --git a/playwright/e2e/crypto/complete-security.spec.ts b/playwright/e2e/crypto/complete-security.spec.ts index f6d58e2fc..e5c5f8e9a 100644 --- a/playwright/e2e/crypto/complete-security.spec.ts +++ b/playwright/e2e/crypto/complete-security.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/crypto/crypto.spec.ts b/playwright/e2e/crypto/crypto.spec.ts index 3f4621f90..427df8098 100644 --- a/playwright/e2e/crypto/crypto.spec.ts +++ b/playwright/e2e/crypto/crypto.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022-2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Page } from "@playwright/test"; diff --git a/playwright/e2e/crypto/decryption-failure-messages.spec.ts b/playwright/e2e/crypto/decryption-failure-messages.spec.ts index bcefa947a..ce7ca34d8 100644 --- a/playwright/e2e/crypto/decryption-failure-messages.spec.ts +++ b/playwright/e2e/crypto/decryption-failure-messages.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022-2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { EmittedEvents, Preset } from "matrix-js-sdk/src/matrix"; diff --git a/playwright/e2e/crypto/dehydration.spec.ts b/playwright/e2e/crypto/dehydration.spec.ts index eb9efde4e..1161902d0 100644 --- a/playwright/e2e/crypto/dehydration.spec.ts +++ b/playwright/e2e/crypto/dehydration.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Locator, type Page } from "@playwright/test"; diff --git a/playwright/e2e/crypto/device-verification.spec.ts b/playwright/e2e/crypto/device-verification.spec.ts index 929da0910..e01e5bbd8 100644 --- a/playwright/e2e/crypto/device-verification.spec.ts +++ b/playwright/e2e/crypto/device-verification.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import jsQR from "jsqr"; diff --git a/playwright/e2e/crypto/event-shields.spec.ts b/playwright/e2e/crypto/event-shields.spec.ts index b242dd060..fa9d1959d 100644 --- a/playwright/e2e/crypto/event-shields.spec.ts +++ b/playwright/e2e/crypto/event-shields.spec.ts @@ -1,22 +1,21 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022-2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { expect, test } from "../../element-web-test"; -import { autoJoin, createSharedRoomWithUser, enableKeyBackup, logIntoElement, logOutOfElement, verify } from "./utils"; -import { Bot } from "../../pages/bot"; +import { + autoJoin, + createSecondBotDevice, + createSharedRoomWithUser, + enableKeyBackup, + logIntoElement, + logOutOfElement, + verify, +} from "./utils"; test.describe("Cryptography", function () { test.use({ @@ -49,16 +48,14 @@ test.describe("Cryptography", function () { }); }); - test("should show the correct shield on e2e events", async ({ page, app, bot: bob, homeserver }) => { + test("should show the correct shield on e2e events", async ({ + page, + app, + bot: bob, + homeserver, + }, workerInfo) => { // Bob has a second, not cross-signed, device - const bobSecondDevice = new Bot(page, homeserver, { - bootstrapSecretStorage: false, - bootstrapCrossSigning: false, - }); - bobSecondDevice.setCredentials( - await homeserver.loginUser(bob.credentials.userId, bob.credentials.password), - ); - await bobSecondDevice.prepareClient(); + const bobSecondDevice = await createSecondBotDevice(page, homeserver, bob); await bob.sendEvent(testRoomId, null, "m.room.encrypted", { algorithm: "m.megolm.v1.aes-sha2", @@ -125,7 +122,10 @@ test.describe("Cryptography", function () { await lastTileE2eIcon.focus(); await expect(page.getByRole("tooltip")).toContainText("Encrypted by a device not verified by its owner."); - /* Should show a grey padlock for a message from an unknown device */ + /* In legacy crypto: should show a grey padlock for a message from a deleted device. + * In rust crypto: should show a red padlock for a message from an unverified device. + * Rust crypto remembers the verification state of the sending device, so it will know that the device was + * unverified, even if it gets deleted. */ // bob deletes his second device await bobSecondDevice.evaluate((cli) => cli.logout(true)); @@ -156,7 +156,11 @@ test.describe("Cryptography", function () { await expect(last).toContainText("test encrypted from unverified"); await expect(lastE2eIcon).toHaveClass(/mx_EventTile_e2eIcon_warning/); await lastE2eIcon.focus(); - await expect(page.getByRole("tooltip")).toContainText("Encrypted by an unknown or deleted device."); + await expect(page.getByRole("tooltip")).toContainText( + workerInfo.project.name === "Legacy Crypto" + ? "Encrypted by an unknown or deleted device." + : "Encrypted by a device not verified by its owner.", + ); }); test("Should show a grey padlock for a key restored from backup", async ({ @@ -212,14 +216,7 @@ test.describe("Cryptography", function () { test("should show the correct shield on edited e2e events", async ({ page, app, bot: bob, homeserver }) => { // bob has a second, not cross-signed, device - const bobSecondDevice = new Bot(page, homeserver, { - bootstrapSecretStorage: false, - bootstrapCrossSigning: false, - }); - bobSecondDevice.setCredentials( - await homeserver.loginUser(bob.credentials.userId, bob.credentials.password), - ); - await bobSecondDevice.prepareClient(); + const bobSecondDevice = await createSecondBotDevice(page, homeserver, bob); // verify Bob await verify(app, bob); @@ -265,5 +262,41 @@ test.describe("Cryptography", function () { page.locator(".mx_EventTile", { hasText: "Hee!" }).locator(".mx_EventTile_e2eIcon_warning"), ).not.toBeVisible(); }); + + test("should show correct shields on events sent by devices which have since been deleted", async ({ + page, + app, + bot: bob, + homeserver, + }) => { + // Our app is blocked from syncing while Bob sends his messages. + await app.client.network.goOffline(); + + // Bob sends a message from his verified device + await bob.sendMessage(testRoomId, "test encrypted from verified"); + + // And one from a second, not cross-signed, device + const bobSecondDevice = await createSecondBotDevice(page, homeserver, bob); + await bobSecondDevice.waitForNextSync(); // make sure the client knows the room is encrypted + await bobSecondDevice.sendMessage(testRoomId, "test encrypted from unverified"); + + // ... and then logs out both devices. + await bob.evaluate((cli) => cli.logout(true)); + await bobSecondDevice.evaluate((cli) => cli.logout(true)); + + // Let our app start syncing again + await app.client.network.goOnline(); + + // Wait for the messages to arrive + const last = page.locator(".mx_EventTile_last"); + await expect(last).toContainText("test encrypted from unverified"); + const lastE2eIcon = last.locator(".mx_EventTile_e2eIcon"); + await expect(lastE2eIcon).toHaveClass(/mx_EventTile_e2eIcon_warning/); + await lastE2eIcon.focus(); + await expect(page.getByRole("tooltip")).toContainText("Encrypted by a device not verified by its owner."); + + const penultimate = page.locator(".mx_EventTile").filter({ hasText: "test encrypted from verified" }); + await expect(penultimate.locator(".mx_EventTile_e2eIcon")).not.toBeVisible(); + }); }); }); diff --git a/playwright/e2e/crypto/invisible-crypto.spec.ts b/playwright/e2e/crypto/invisible-crypto.spec.ts new file mode 100644 index 000000000..c53bacd32 --- /dev/null +++ b/playwright/e2e/crypto/invisible-crypto.spec.ts @@ -0,0 +1,56 @@ +/* +Copyright 2024 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. +*/ + +import { expect, test } from "../../element-web-test"; +import { autoJoin, createSecondBotDevice, createSharedRoomWithUser, verify } from "./utils"; +import { bootstrapCrossSigningForClient } from "../../pages/client.ts"; + +/** Tests for the "invisible crypto" behaviour -- i.e., when the "exclude insecure devices" setting is enabled */ +test.describe("Invisible cryptography", () => { + test.use({ + displayName: "Alice", + botCreateOpts: { displayName: "Bob" }, + labsFlags: ["feature_exclude_insecure_devices"], + }); + + test("Messages fail to decrypt when sender is previously verified", async ({ + page, + bot: bob, + user: aliceCredentials, + app, + homeserver, + }) => { + await app.client.bootstrapCrossSigning(aliceCredentials); + await autoJoin(bob); + + // create an encrypted room + const testRoomId = await createSharedRoomWithUser(app, bob.credentials.userId, { + name: "TestRoom", + initial_state: [ + { + type: "m.room.encryption", + state_key: "", + content: { + algorithm: "m.megolm.v1.aes-sha2", + }, + }, + ], + }); + + // Verify Bob + await verify(app, bob); + + // Bob logs in a new device and resets cross-signing + const bobSecondDevice = await createSecondBotDevice(page, homeserver, bob); + await bootstrapCrossSigningForClient(await bobSecondDevice.prepareClient(), bob.credentials, true); + + /* should show an error for a message from a previously verified device */ + await bobSecondDevice.sendMessage(testRoomId, "test encrypted from user that was previously verified"); + const lastTile = page.locator(".mx_EventTile_last"); + await expect(lastTile).toContainText("Verified identity has changed"); + }); +}); diff --git a/playwright/e2e/crypto/logout.spec.ts b/playwright/e2e/crypto/logout.spec.ts index eca4e24d0..b88ae0de7 100644 --- a/playwright/e2e/crypto/logout.spec.ts +++ b/playwright/e2e/crypto/logout.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/crypto/migration.spec.ts b/playwright/e2e/crypto/migration.spec.ts index 0faef52d6..048b39f06 100644 --- a/playwright/e2e/crypto/migration.spec.ts +++ b/playwright/e2e/crypto/migration.spec.ts @@ -1,17 +1,9 @@ /* -Copyright 2023-2024 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2023, 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import path from "path"; diff --git a/playwright/e2e/crypto/test_indexeddb_cryptostore_dump/load.js b/playwright/e2e/crypto/test_indexeddb_cryptostore_dump/load.js index ab167ced5..4f5090b55 100644 --- a/playwright/e2e/crypto/test_indexeddb_cryptostore_dump/load.js +++ b/playwright/e2e/crypto/test_indexeddb_cryptostore_dump/load.js @@ -1,17 +1,9 @@ /* -Copyright 2023-2024 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2023, 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* Browser-side javascript to fetch the indexeddb dump file, and populate indexeddb. */ diff --git a/playwright/e2e/crypto/user-verification.spec.ts b/playwright/e2e/crypto/user-verification.spec.ts index eac0fb639..f1def9846 100644 --- a/playwright/e2e/crypto/user-verification.spec.ts +++ b/playwright/e2e/crypto/user-verification.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { type Preset, type Visibility } from "matrix-js-sdk/src/matrix"; diff --git a/playwright/e2e/crypto/utils.ts b/playwright/e2e/crypto/utils.ts index 3c1e26711..c19863373 100644 --- a/playwright/e2e/crypto/utils.ts +++ b/playwright/e2e/crypto/utils.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { expect, JSHandle, type Page } from "@playwright/test"; @@ -385,3 +377,14 @@ export async function awaitVerifier( return verificationRequest.verifier; }); } + +/** Log in a second device for the given bot user */ +export async function createSecondBotDevice(page: Page, homeserver: HomeserverInstance, bob: Bot) { + const bobSecondDevice = new Bot(page, homeserver, { + bootstrapSecretStorage: false, + bootstrapCrossSigning: false, + }); + bobSecondDevice.setCredentials(await homeserver.loginUser(bob.credentials.userId, bob.credentials.password)); + await bobSecondDevice.prepareClient(); + return bobSecondDevice; +} diff --git a/playwright/e2e/editing/editing.spec.ts b/playwright/e2e/editing/editing.spec.ts index 7ed5d136f..2cc47f8ed 100644 --- a/playwright/e2e/editing/editing.spec.ts +++ b/playwright/e2e/editing/editing.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Locator, Page } from "@playwright/test"; diff --git a/playwright/e2e/file-upload/image-upload.spec.ts b/playwright/e2e/file-upload/image-upload.spec.ts index b886bc2a1..eb473d83b 100644 --- a/playwright/e2e/file-upload/image-upload.spec.ts +++ b/playwright/e2e/file-upload/image-upload.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/forgot-password/forgot-password.spec.ts b/playwright/e2e/forgot-password/forgot-password.spec.ts index 260242ebc..c148900af 100644 --- a/playwright/e2e/forgot-password/forgot-password.spec.ts +++ b/playwright/e2e/forgot-password/forgot-password.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { expect, test } from "../../element-web-test"; diff --git a/playwright/e2e/integration-manager/get-openid-token.spec.ts b/playwright/e2e/integration-manager/get-openid-token.spec.ts index a0f099cb6..48d52d35f 100644 --- a/playwright/e2e/integration-manager/get-openid-token.spec.ts +++ b/playwright/e2e/integration-manager/get-openid-token.spec.ts @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Page } from "@playwright/test"; diff --git a/playwright/e2e/integration-manager/kick.spec.ts b/playwright/e2e/integration-manager/kick.spec.ts index afe2de0f1..59c2703a1 100644 --- a/playwright/e2e/integration-manager/kick.spec.ts +++ b/playwright/e2e/integration-manager/kick.spec.ts @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Page } from "@playwright/test"; diff --git a/playwright/e2e/integration-manager/read_events.spec.ts b/playwright/e2e/integration-manager/read_events.spec.ts index 2e2ee8d18..791d5bd72 100644 --- a/playwright/e2e/integration-manager/read_events.spec.ts +++ b/playwright/e2e/integration-manager/read_events.spec.ts @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Page } from "@playwright/test"; diff --git a/playwright/e2e/integration-manager/send_event.spec.ts b/playwright/e2e/integration-manager/send_event.spec.ts index ea2c35530..363719d8f 100644 --- a/playwright/e2e/integration-manager/send_event.spec.ts +++ b/playwright/e2e/integration-manager/send_event.spec.ts @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Page } from "@playwright/test"; diff --git a/playwright/e2e/integration-manager/utils.ts b/playwright/e2e/integration-manager/utils.ts index 0ea59e6ff..289085f11 100644 --- a/playwright/e2e/integration-manager/utils.ts +++ b/playwright/e2e/integration-manager/utils.ts @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { ElementAppPage } from "../../pages/ElementAppPage"; diff --git a/playwright/e2e/invite/invite-dialog.spec.ts b/playwright/e2e/invite/invite-dialog.spec.ts index d9e086aaa..c8bd8eb40 100644 --- a/playwright/e2e/invite/invite-dialog.spec.ts +++ b/playwright/e2e/invite/invite-dialog.spec.ts @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Suguru Hirahara Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/knock/create-knock-room.spec.ts b/playwright/e2e/knock/create-knock-room.spec.ts index 9e610766d..12a5a666e 100644 --- a/playwright/e2e/knock/create-knock-room.spec.ts +++ b/playwright/e2e/knock/create-knock-room.spec.ts @@ -1,17 +1,9 @@ /* -Copyright 2022-2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/knock/knock-into-room.spec.ts b/playwright/e2e/knock/knock-into-room.spec.ts index 5ee366fcf..e04806f84 100644 --- a/playwright/e2e/knock/knock-into-room.spec.ts +++ b/playwright/e2e/knock/knock-into-room.spec.ts @@ -1,19 +1,11 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Mikhail Aheichyk Copyright 2023 Nordeck IT + Consulting GmbH. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { type Visibility } from "matrix-js-sdk/src/matrix"; diff --git a/playwright/e2e/knock/manage-knocks.spec.ts b/playwright/e2e/knock/manage-knocks.spec.ts index 3fb5c6855..b2e1fc9a3 100644 --- a/playwright/e2e/knock/manage-knocks.spec.ts +++ b/playwright/e2e/knock/manage-knocks.spec.ts @@ -1,19 +1,11 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Mikhail Aheichyk Copyright 2023 Nordeck IT + Consulting GmbH. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/lazy-loading/lazy-loading.spec.ts b/playwright/e2e/lazy-loading/lazy-loading.spec.ts index 1a20100d1..0d15e03e9 100644 --- a/playwright/e2e/lazy-loading/lazy-loading.spec.ts +++ b/playwright/e2e/lazy-loading/lazy-loading.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Bot } from "../../pages/bot"; diff --git a/playwright/e2e/left-panel/left-panel.spec.ts b/playwright/e2e/left-panel/left-panel.spec.ts index 98e491085..649302d7b 100644 --- a/playwright/e2e/left-panel/left-panel.spec.ts +++ b/playwright/e2e/left-panel/left-panel.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Suguru Hirahara -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/location/location.spec.ts b/playwright/e2e/location/location.spec.ts index e3f6120ef..e0c23d6c2 100644 --- a/playwright/e2e/location/location.spec.ts +++ b/playwright/e2e/location/location.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Locator, Page } from "@playwright/test"; diff --git a/playwright/e2e/login/consent.spec.ts b/playwright/e2e/login/consent.spec.ts index c24a71f8a..4d8dd821e 100644 --- a/playwright/e2e/login/consent.spec.ts +++ b/playwright/e2e/login/consent.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/login/login.spec.ts b/playwright/e2e/login/login.spec.ts index bbadf02d0..48c9fb90a 100644 --- a/playwright/e2e/login/login.spec.ts +++ b/playwright/e2e/login/login.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { expect, test } from "../../element-web-test"; diff --git a/playwright/e2e/login/overwrite_login.spec.ts b/playwright/e2e/login/overwrite_login.spec.ts index 7ef8769c9..6d06bbc42 100644 --- a/playwright/e2e/login/overwrite_login.spec.ts +++ b/playwright/e2e/login/overwrite_login.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/login/soft_logout.spec.ts b/playwright/e2e/login/soft_logout.spec.ts index a9becad0a..140875b9b 100644 --- a/playwright/e2e/login/soft_logout.spec.ts +++ b/playwright/e2e/login/soft_logout.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Page } from "@playwright/test"; diff --git a/playwright/e2e/login/utils.ts b/playwright/e2e/login/utils.ts index 2cfc0d452..dc856d586 100644 --- a/playwright/e2e/login/utils.ts +++ b/playwright/e2e/login/utils.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Page, expect } from "@playwright/test"; diff --git a/playwright/e2e/messages/messages.spec.ts b/playwright/e2e/messages/messages.spec.ts index f34fa15e8..0d5a5da47 100644 --- a/playwright/e2e/messages/messages.spec.ts +++ b/playwright/e2e/messages/messages.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ @@ -24,7 +16,34 @@ async function sendMessage(page: Page, message: string): Promise { await page.getByRole("textbox", { name: "Send a message…" }).fill(message); await page.getByRole("button", { name: "Send message" }).click(); - const msgTile = await page.locator(".mx_EventTile_last"); + const msgTile = page.locator(".mx_EventTile_last"); + await msgTile.locator(".mx_EventTile_receiptSent").waitFor(); + return msgTile; +} + +async function sendMultilineMessages(page: Page, messages: string[]) { + await page.getByRole("textbox", { name: "Send a message…" }).focus(); + for (let i = 0; i < messages.length; i++) { + await page.keyboard.type(messages[i]); + if (i < messages.length - 1) await page.keyboard.press("Shift+Enter"); + } + + await page.getByRole("button", { name: "Send message" }).click(); + + const msgTile = page.locator(".mx_EventTile_last"); + await msgTile.locator(".mx_EventTile_receiptSent").waitFor(); + return msgTile; +} + +async function replyMessage(page: Page, message: Locator, replyMessage: string): Promise { + const line = message.locator(".mx_EventTile_line"); + await line.hover(); + await line.getByRole("button", { name: "Reply", exact: true }).click(); + + await page.getByRole("textbox", { name: "Send a reply…" }).fill(replyMessage); + await page.getByRole("button", { name: "Send message" }).click(); + + const msgTile = page.locator(".mx_EventTile_last"); await msgTile.locator(".mx_EventTile_receiptSent").waitFor(); return msgTile; } @@ -88,6 +107,22 @@ test.describe("Message rendering", () => { }); }); + test("should render a reply of a LTR message", async ({ page, user, app, room }) => { + await page.goto(`#/room/${room.roomId}`); + + const msgTile = await sendMultilineMessages(page, [ + "Fist line", + "Second line", + "Third line", + "Fourth line", + ]); + + await replyMessage(page, msgTile, "response to multiline message"); + await expect(msgTile).toMatchScreenshot(`reply-message-ltr-${direction}displayname.png`, { + mask: [page.locator(".mx_MessageTimestamp")], + }); + }); + test("should render a basic RTL text message", async ({ page, user, app, room }) => { await page.goto(`#/room/${room.roomId}`); @@ -122,6 +157,22 @@ test.describe("Message rendering", () => { mask: [page.locator(".mx_MessageTimestamp")], }); }); + + test("should render a reply of a RTL message", async ({ page, user, app, room }) => { + await page.goto(`#/room/${room.roomId}`); + + const msgTile = await sendMultilineMessages(page, [ + "مرحبا بالعالم!", + "مرحبا بالعالم!", + "مرحبا بالعالم!", + "مرحبا بالعالم!", + ]); + + await replyMessage(page, msgTile, "مرحبا بالعالم!"); + await expect(msgTile).toMatchScreenshot(`reply-message-trl-${direction}displayname.png`, { + mask: [page.locator(".mx_MessageTimestamp")], + }); + }); }); }); }); diff --git a/playwright/e2e/oidc/index.ts b/playwright/e2e/oidc/index.ts index 61b9aa688..9403406d8 100644 --- a/playwright/e2e/oidc/index.ts +++ b/playwright/e2e/oidc/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { API, Messages } from "mailhog"; diff --git a/playwright/e2e/oidc/oidc-aware.spec.ts b/playwright/e2e/oidc/oidc-aware.spec.ts index 45e99e06b..a2f1e6271 100644 --- a/playwright/e2e/oidc/oidc-aware.spec.ts +++ b/playwright/e2e/oidc/oidc-aware.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect, registerAccountMas } from "."; diff --git a/playwright/e2e/oidc/oidc-native.spec.ts b/playwright/e2e/oidc/oidc-native.spec.ts index 6860dc110..0990f11d3 100644 --- a/playwright/e2e/oidc/oidc-native.spec.ts +++ b/playwright/e2e/oidc/oidc-native.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect, registerAccountMas } from "."; diff --git a/playwright/e2e/one-to-one-chat/one-to-one-chat.spec.ts b/playwright/e2e/one-to-one-chat/one-to-one-chat.spec.ts index 3070d5fad..1e59a9a9b 100644 --- a/playwright/e2e/one-to-one-chat/one-to-one-chat.spec.ts +++ b/playwright/e2e/one-to-one-chat/one-to-one-chat.spec.ts @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Ahmad Kadri Copyright 2023 Nordeck IT + Consulting GmbH. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test as base, expect } from "../../element-web-test"; diff --git a/playwright/e2e/permalinks/permalinks.spec.ts b/playwright/e2e/permalinks/permalinks.spec.ts index 6b3a10a4d..bd7884ea7 100644 --- a/playwright/e2e/permalinks/permalinks.spec.ts +++ b/playwright/e2e/permalinks/permalinks.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Locator } from "@playwright/test"; diff --git a/playwright/e2e/pinned-messages/index.ts b/playwright/e2e/pinned-messages/index.ts index a67df09d8..61e09a811 100644 --- a/playwright/e2e/pinned-messages/index.ts +++ b/playwright/e2e/pinned-messages/index.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { Page } from "@playwright/test"; @@ -100,13 +92,35 @@ export class Helpers { } /** - * Pin the given message + * Pin the given message from the quick actions + * @param message + * @param unpin + */ + async pinMessageFromQuickActions(message: string, unpin = false) { + const timelineMessage = this.page.locator(".mx_MTextBody", { hasText: message }); + await timelineMessage.hover(); + await this.page.getByRole("button", { name: unpin ? "Unpin" : "Pin", exact: true }).click(); + } + + /** + * Pin the given messages from the quick actions + * @param messages + * @param unpin + */ + async pinMessagesFromQuickActions(messages: string[], unpin = false) { + for (const message of messages) { + await this.pinMessageFromQuickActions(message, unpin); + } + } + + /** + * Pin the given message from the contextual menu * @param message */ async pinMessage(message: string) { const timelineMessage = this.page.locator(".mx_MTextBody", { hasText: message }); await timelineMessage.click({ button: "right" }); - await this.page.getByRole("menuitem", { name: "Pin" }).click(); + await this.page.getByRole("menuitem", { name: "Pin", exact: true }).click(); } /** @@ -146,9 +160,8 @@ export class Helpers { /** * Return the right panel - * @private */ - private getRightPanel() { + public getRightPanel() { return this.page.locator("#mx_RightPanel"); } @@ -161,7 +174,6 @@ export class Helpers { await expect(rightPanel.getByRole("heading", { name: "Pinned messages" })).toHaveText( `${messages.length} Pinned messages`, ); - await expect(rightPanel).toMatchScreenshot(`pinned-messages-list-messages-${messages.length}.png`); const list = rightPanel.getByRole("list"); await expect(list.getByRole("listitem")).toHaveCount(messages.length); @@ -221,6 +233,36 @@ export class Helpers { await item.getByRole("button").click(); await this.page.getByRole("menu", { name: "Open menu" }).getByRole("menuitem", { name: "Unpin" }).click(); } + + /** + * Return the banner + * @private + */ + public getBanner() { + return this.page.getByTestId("pinned-message-banner"); + } + + /** + * Assert that the banner contains the given message + * @param msg + */ + async assertMessageInBanner(msg: string) { + await expect(this.getBanner().getByText(msg)).toBeVisible(); + } + + /** + * Return the view all button + */ + public getViewAllButton() { + return this.page.getByRole("button", { name: "View all" }); + } + + /** + * Return the close list button + */ + public getCloseListButton() { + return this.page.getByRole("button", { name: "Close list" }); + } } export { expect }; diff --git a/playwright/e2e/pinned-messages/pinned-messages.spec.ts b/playwright/e2e/pinned-messages/pinned-messages.spec.ts index be1c92223..f9d2abbb0 100644 --- a/playwright/e2e/pinned-messages/pinned-messages.spec.ts +++ b/playwright/e2e/pinned-messages/pinned-messages.spec.ts @@ -1,27 +1,15 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { test } from "./index"; import { expect } from "../../element-web-test"; test.describe("Pinned messages", () => { - test.use({ - labsFlags: ["feature_pinning"], - }); - test("should show the empty state when there are no pinned messages", async ({ page, app, room1, util }) => { await util.goTo(room1); await util.openRoomInfo(); @@ -76,4 +64,75 @@ test.describe("Pinned messages", () => { await util.backPinnedMessagesList(); await util.assertPinnedCountInRoomInfo(0); }); + + test("should be able to pin and unpin from the quick actions", async ({ page, app, room1, util }) => { + await util.goTo(room1); + await util.receiveMessages(room1, ["Msg1", "Msg2", "Msg3", "Msg4"]); + await util.pinMessagesFromQuickActions(["Msg1"]); + await util.openRoomInfo(); + await util.assertPinnedCountInRoomInfo(1); + + await util.pinMessagesFromQuickActions(["Msg1"], true); + await util.assertPinnedCountInRoomInfo(0); + }); + + test("should display one message in the banner", async ({ page, app, room1, util }) => { + await util.goTo(room1); + await util.receiveMessages(room1, ["Msg1"]); + await util.pinMessages(["Msg1"]); + await util.assertMessageInBanner("Msg1"); + await expect(util.getBanner()).toMatchScreenshot("pinned-message-banner-1-Msg1.png"); + }); + + test("should display 2 messages in the banner", async ({ page, app, room1, util }) => { + await util.goTo(room1); + await util.receiveMessages(room1, ["Msg1", "Msg2"]); + await util.pinMessages(["Msg1", "Msg2"]); + + await util.assertMessageInBanner("Msg2"); + await expect(util.getBanner()).toMatchScreenshot("pinned-message-banner-2-Msg2.png"); + + await util.getBanner().click(); + await util.assertMessageInBanner("Msg1"); + await expect(util.getBanner()).toMatchScreenshot("pinned-message-banner-2-Msg1.png"); + + await util.getBanner().click(); + await util.assertMessageInBanner("Msg2"); + await expect(util.getBanner()).toMatchScreenshot("pinned-message-banner-2-Msg2.png"); + }); + + test("should display 4 messages in the banner", async ({ page, app, room1, util }) => { + await util.goTo(room1); + await util.receiveMessages(room1, ["Msg1", "Msg2", "Msg3", "Msg4"]); + await util.pinMessages(["Msg1", "Msg2", "Msg3", "Msg4"]); + + for (const msg of ["Msg4", "Msg3", "Msg2", "Msg1"]) { + await util.assertMessageInBanner(msg); + await expect(util.getBanner()).toMatchScreenshot(`pinned-message-banner-4-${msg}.png`); + await util.getBanner().click(); + } + }); + + test("should open the pinned messages list from the banner", async ({ page, app, room1, util }) => { + await util.goTo(room1); + await util.receiveMessages(room1, ["Msg1", "Msg2"]); + await util.pinMessages(["Msg1", "Msg2"]); + + await util.getViewAllButton().click(); + await util.assertPinnedMessagesList(["Msg1", "Msg2"]); + + await expect(util.getCloseListButton()).toBeVisible(); + }); + + test("banner should listen to pinned message list", async ({ page, app, room1, util }) => { + await util.goTo(room1); + await util.receiveMessages(room1, ["Msg1", "Msg2"]); + await util.pinMessages(["Msg1", "Msg2"]); + + await expect(util.getViewAllButton()).toBeVisible(); + + await util.openRoomInfo(); + await util.openPinnedMessagesList(); + await expect(util.getCloseListButton()).toBeVisible(); + }); }); diff --git a/playwright/e2e/polls/pollHistory.spec.ts b/playwright/e2e/polls/pollHistory.spec.ts index 20a8b912f..b9250bace 100644 --- a/playwright/e2e/polls/pollHistory.spec.ts +++ b/playwright/e2e/polls/pollHistory.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; import type { Bot } from "../../pages/bot"; diff --git a/playwright/e2e/polls/polls.spec.ts b/playwright/e2e/polls/polls.spec.ts index c4a8ae1bb..4fd819558 100644 --- a/playwright/e2e/polls/polls.spec.ts +++ b/playwright/e2e/polls/polls.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/presence/presence.spec.ts b/playwright/e2e/presence/presence.spec.ts index e52b97844..47b3440e6 100644 --- a/playwright/e2e/presence/presence.spec.ts +++ b/playwright/e2e/presence/presence.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/read-receipts/editing-messages-in-threads.spec.ts b/playwright/e2e/read-receipts/editing-messages-in-threads.spec.ts index 62394cccb..277de6287 100644 --- a/playwright/e2e/read-receipts/editing-messages-in-threads.spec.ts +++ b/playwright/e2e/read-receipts/editing-messages-in-threads.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/editing-messages-main-timeline.spec.ts b/playwright/e2e/read-receipts/editing-messages-main-timeline.spec.ts index e03a011a4..027ab08e2 100644 --- a/playwright/e2e/read-receipts/editing-messages-main-timeline.spec.ts +++ b/playwright/e2e/read-receipts/editing-messages-main-timeline.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/editing-messages-thread-roots.spec.ts b/playwright/e2e/read-receipts/editing-messages-thread-roots.spec.ts index 279845f5d..e653b5d9b 100644 --- a/playwright/e2e/read-receipts/editing-messages-thread-roots.spec.ts +++ b/playwright/e2e/read-receipts/editing-messages-thread-roots.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/high-level.spec.ts b/playwright/e2e/read-receipts/high-level.spec.ts index a3c2c0de3..7d4f4eb13 100644 --- a/playwright/e2e/read-receipts/high-level.spec.ts +++ b/playwright/e2e/read-receipts/high-level.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/index.ts b/playwright/e2e/read-receipts/index.ts index 1b6719290..f097ec839 100644 --- a/playwright/e2e/read-receipts/index.ts +++ b/playwright/e2e/read-receipts/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { JSHandle, Page } from "@playwright/test"; @@ -403,6 +395,9 @@ class Helpers { */ async closeThreadsPanel() { await this.page.locator(".mx_RoomHeader").getByLabel("Threads").click(); + if (await this.page.locator("#thread-panel").isVisible()) { + await this.page.locator(".mx_RoomHeader").getByLabel("Threads").click(); + } await expect(this.page.locator(".mx_RightPanel")).not.toBeVisible(); } diff --git a/playwright/e2e/read-receipts/message-ordering.spec.ts b/playwright/e2e/read-receipts/message-ordering.spec.ts index 73c640d35..65875cf4a 100644 --- a/playwright/e2e/read-receipts/message-ordering.spec.ts +++ b/playwright/e2e/read-receipts/message-ordering.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/missing-referents.spec.ts b/playwright/e2e/read-receipts/missing-referents.spec.ts index 28313ee35..f798d7d45 100644 --- a/playwright/e2e/read-receipts/missing-referents.spec.ts +++ b/playwright/e2e/read-receipts/missing-referents.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/new-messages-in-threads.spec.ts b/playwright/e2e/read-receipts/new-messages-in-threads.spec.ts index 37b43bae1..91d850fac 100644 --- a/playwright/e2e/read-receipts/new-messages-in-threads.spec.ts +++ b/playwright/e2e/read-receipts/new-messages-in-threads.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/new-messages-main-timeline.spec.ts b/playwright/e2e/read-receipts/new-messages-main-timeline.spec.ts index eb528f281..2000e444d 100644 --- a/playwright/e2e/read-receipts/new-messages-main-timeline.spec.ts +++ b/playwright/e2e/read-receipts/new-messages-main-timeline.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/new-messages-thread-roots.spec.ts b/playwright/e2e/read-receipts/new-messages-thread-roots.spec.ts index 526bac4bf..878d0d441 100644 --- a/playwright/e2e/read-receipts/new-messages-thread-roots.spec.ts +++ b/playwright/e2e/read-receipts/new-messages-thread-roots.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/notifications.spec.ts b/playwright/e2e/read-receipts/notifications.spec.ts index 5d87de1bb..3050987be 100644 --- a/playwright/e2e/read-receipts/notifications.spec.ts +++ b/playwright/e2e/read-receipts/notifications.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/reactions-in-threads.spec.ts b/playwright/e2e/read-receipts/reactions-in-threads.spec.ts index dcd97ac43..bc4a18474 100644 --- a/playwright/e2e/read-receipts/reactions-in-threads.spec.ts +++ b/playwright/e2e/read-receipts/reactions-in-threads.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/reactions-main-timeline.spec.ts b/playwright/e2e/read-receipts/reactions-main-timeline.spec.ts index 54f0c89af..59d6eaea4 100644 --- a/playwright/e2e/read-receipts/reactions-main-timeline.spec.ts +++ b/playwright/e2e/read-receipts/reactions-main-timeline.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/reactions-thread-roots.spec.ts b/playwright/e2e/read-receipts/reactions-thread-roots.spec.ts index 9c1be63e5..219a73d5e 100644 --- a/playwright/e2e/read-receipts/reactions-thread-roots.spec.ts +++ b/playwright/e2e/read-receipts/reactions-thread-roots.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/read-receipts.spec.ts b/playwright/e2e/read-receipts/read-receipts.spec.ts index dac679f6a..3056cc4a5 100644 --- a/playwright/e2e/read-receipts/read-receipts.spec.ts +++ b/playwright/e2e/read-receipts/read-receipts.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { JSHandle } from "@playwright/test"; diff --git a/playwright/e2e/read-receipts/redactions-in-threads.spec.ts b/playwright/e2e/read-receipts/redactions-in-threads.spec.ts index 323748e7e..715bb4e9f 100644 --- a/playwright/e2e/read-receipts/redactions-in-threads.spec.ts +++ b/playwright/e2e/read-receipts/redactions-in-threads.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/redactions-main-timeline.spec.ts b/playwright/e2e/read-receipts/redactions-main-timeline.spec.ts index cb7393a63..c1dceda6a 100644 --- a/playwright/e2e/read-receipts/redactions-main-timeline.spec.ts +++ b/playwright/e2e/read-receipts/redactions-main-timeline.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/redactions-thread-roots.spec.ts b/playwright/e2e/read-receipts/redactions-thread-roots.spec.ts index 0ded3957f..a8dc38c47 100644 --- a/playwright/e2e/read-receipts/redactions-thread-roots.spec.ts +++ b/playwright/e2e/read-receipts/redactions-thread-roots.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/read-receipts/room-list-order.spec.ts b/playwright/e2e/read-receipts/room-list-order.spec.ts index 2b4302291..052e2d756 100644 --- a/playwright/e2e/read-receipts/room-list-order.spec.ts +++ b/playwright/e2e/read-receipts/room-list-order.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* See readme.md for tips on writing these tests. */ diff --git a/playwright/e2e/register/email.spec.ts b/playwright/e2e/register/email.spec.ts index 3ab408ae2..7a80f0bbf 100644 --- a/playwright/e2e/register/email.spec.ts +++ b/playwright/e2e/register/email.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/register/register.spec.ts b/playwright/e2e/register/register.spec.ts index edb06ac2d..8ea64f8a6 100644 --- a/playwright/e2e/register/register.spec.ts +++ b/playwright/e2e/register/register.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/regression-tests/pills-click-in-app.spec.ts b/playwright/e2e/regression-tests/pills-click-in-app.spec.ts index 6a038db43..f19e8c896 100644 --- a/playwright/e2e/regression-tests/pills-click-in-app.spec.ts +++ b/playwright/e2e/regression-tests/pills-click-in-app.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/release-announcement/index.ts b/playwright/e2e/release-announcement/index.ts index d5ea4f291..81146be70 100644 --- a/playwright/e2e/release-announcement/index.ts +++ b/playwright/e2e/release-announcement/index.ts @@ -1,19 +1,9 @@ /* - * + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { Page } from "@playwright/test"; diff --git a/playwright/e2e/release-announcement/releaseAnnouncement.spec.ts b/playwright/e2e/release-announcement/releaseAnnouncement.spec.ts index 24854560c..57c27caf1 100644 --- a/playwright/e2e/release-announcement/releaseAnnouncement.spec.ts +++ b/playwright/e2e/release-announcement/releaseAnnouncement.spec.ts @@ -1,19 +1,9 @@ /* - * + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { test, expect } from "./"; diff --git a/playwright/e2e/right-panel/file-panel.spec.ts b/playwright/e2e/right-panel/file-panel.spec.ts index 52dd11331..b508222f0 100644 --- a/playwright/e2e/right-panel/file-panel.spec.ts +++ b/playwright/e2e/right-panel/file-panel.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Suguru Hirahara -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Download, type Page } from "@playwright/test"; diff --git a/playwright/e2e/right-panel/notification-panel.spec.ts b/playwright/e2e/right-panel/notification-panel.spec.ts index aa7dedf73..1d10af979 100644 --- a/playwright/e2e/right-panel/notification-panel.spec.ts +++ b/playwright/e2e/right-panel/notification-panel.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Suguru Hirahara -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/right-panel/right-panel.spec.ts b/playwright/e2e/right-panel/right-panel.spec.ts index f7b295850..ba610532c 100644 --- a/playwright/e2e/right-panel/right-panel.spec.ts +++ b/playwright/e2e/right-panel/right-panel.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Locator, type Page } from "@playwright/test"; diff --git a/playwright/e2e/right-panel/utils.ts b/playwright/e2e/right-panel/utils.ts index 5e2e39be0..b82698b93 100644 --- a/playwright/e2e/right-panel/utils.ts +++ b/playwright/e2e/right-panel/utils.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { type Page, expect } from "@playwright/test"; diff --git a/playwright/e2e/room-directory/room-directory.spec.ts b/playwright/e2e/room-directory/room-directory.spec.ts index 5068f8e5c..f078a858a 100644 --- a/playwright/e2e/room-directory/room-directory.spec.ts +++ b/playwright/e2e/room-directory/room-directory.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Preset, Visibility } from "matrix-js-sdk/src/matrix"; diff --git a/playwright/e2e/room/room-header.spec.ts b/playwright/e2e/room/room-header.spec.ts index ca49f1190..6ecf4b3b3 100644 --- a/playwright/e2e/room/room-header.spec.ts +++ b/playwright/e2e/room/room-header.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Suguru Hirahara -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Page } from "@playwright/test"; @@ -53,8 +45,8 @@ test.describe("Room Header", () => { await expect(header.getByRole("button", { name: "Threads" })).toBeVisible(); await expect(header.getByRole("button", { name: "Notifications" })).toBeVisible(); - // Assert that there are six buttons in total - await expect(header.getByRole("button")).toHaveCount(7); + // Assert that there are eight buttons in total + await expect(header.getByRole("button")).toHaveCount(8); await expect(header).toMatchScreenshot("room-header.png"); }); @@ -127,7 +119,7 @@ test.describe("Room Header", () => { await expect(header.getByRole("button", { name: "Notifications" })).toBeVisible(); // Assert that there is not a button except those buttons - await expect(header.getByRole("button")).toHaveCount(6); + await expect(header.getByRole("button")).toHaveCount(7); await expect(header).toMatchScreenshot("room-header-video-room.png"); }); diff --git a/playwright/e2e/room/room.spec.ts b/playwright/e2e/room/room.spec.ts index 5b60e6f3b..76fa64a64 100644 --- a/playwright/e2e/room/room.spec.ts +++ b/playwright/e2e/room/room.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { EventType } from "matrix-js-sdk/src/matrix"; diff --git a/playwright/e2e/room_options/marked_unread.spec.ts b/playwright/e2e/room_options/marked_unread.spec.ts index 799acf225..ec5b1d367 100644 --- a/playwright/e2e/room_options/marked_unread.spec.ts +++ b/playwright/e2e/room_options/marked_unread.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/settings/account-user-settings-tab.spec.ts b/playwright/e2e/settings/account-user-settings-tab.spec.ts index 5ec149f04..ce54995d4 100644 --- a/playwright/e2e/settings/account-user-settings-tab.spec.ts +++ b/playwright/e2e/settings/account-user-settings-tab.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Suguru Hirahara -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/settings/appearance-user-settings-tab/appearance-user-settings-tab.spec.ts b/playwright/e2e/settings/appearance-user-settings-tab/appearance-user-settings-tab.spec.ts index 471d9c992..de6c9c527 100644 --- a/playwright/e2e/settings/appearance-user-settings-tab/appearance-user-settings-tab.spec.ts +++ b/playwright/e2e/settings/appearance-user-settings-tab/appearance-user-settings-tab.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Suguru Hirahara -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { expect, test } from "."; diff --git a/playwright/e2e/settings/appearance-user-settings-tab/index.ts b/playwright/e2e/settings/appearance-user-settings-tab/index.ts index e8641306e..d2810b021 100644 --- a/playwright/e2e/settings/appearance-user-settings-tab/index.ts +++ b/playwright/e2e/settings/appearance-user-settings-tab/index.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { Locator, Page } from "@playwright/test"; diff --git a/playwright/e2e/settings/appearance-user-settings-tab/message-layout-panel.ts b/playwright/e2e/settings/appearance-user-settings-tab/message-layout-panel.ts index 1a22696da..a0288baf1 100644 --- a/playwright/e2e/settings/appearance-user-settings-tab/message-layout-panel.ts +++ b/playwright/e2e/settings/appearance-user-settings-tab/message-layout-panel.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Suguru Hirahara -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { expect, test } from "."; diff --git a/playwright/e2e/settings/appearance-user-settings-tab/theme-choice-panel.spec.ts b/playwright/e2e/settings/appearance-user-settings-tab/theme-choice-panel.spec.ts index 2b1e8cc14..4c8f3b3c0 100644 --- a/playwright/e2e/settings/appearance-user-settings-tab/theme-choice-panel.spec.ts +++ b/playwright/e2e/settings/appearance-user-settings-tab/theme-choice-panel.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Suguru Hirahara -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { expect, test } from "."; diff --git a/playwright/e2e/settings/device-management.spec.ts b/playwright/e2e/settings/device-management.spec.ts index b4595610b..cc7d033d6 100644 --- a/playwright/e2e/settings/device-management.spec.ts +++ b/playwright/e2e/settings/device-management.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/settings/general-room-settings-tab.spec.ts b/playwright/e2e/settings/general-room-settings-tab.spec.ts index 123c21428..47582bf0c 100644 --- a/playwright/e2e/settings/general-room-settings-tab.spec.ts +++ b/playwright/e2e/settings/general-room-settings-tab.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Suguru Hirahara -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/settings/preferences-user-settings-tab.spec.ts b/playwright/e2e/settings/preferences-user-settings-tab.spec.ts index 368935e91..0880853ee 100644 --- a/playwright/e2e/settings/preferences-user-settings-tab.spec.ts +++ b/playwright/e2e/settings/preferences-user-settings-tab.spec.ts @@ -1,22 +1,19 @@ /* -Copyright 2023 Suguru Hirahara +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. +Copyright 2023 Suguru Hirahara -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; +test.use({ + locale: "en-GB", + timezoneId: "Europe/London", +}); + test.describe("Preferences user settings tab", () => { test.use({ displayName: "Bob", @@ -26,9 +23,9 @@ test.describe("Preferences user settings tab", () => { }, }); - test("should be rendered properly", async ({ app, user }) => { + test("should be rendered properly", async ({ app, page, user }) => { + page.setViewportSize({ width: 1024, height: 3300 }); const tab = await app.settings.openUserSettings("Preferences"); - // Assert that the top heading is rendered await expect(tab.getByRole("heading", { name: "Preferences" })).toBeVisible(); await expect(tab).toMatchScreenshot("Preferences-user-settings-tab-should-be-rendered-properly-1.png"); @@ -53,4 +50,19 @@ test.describe("Preferences user settings tab", () => { // Assert that the default value is rendered again await expect(languageInput.getByText("English")).toBeVisible(); }); + + test("should be able to change the timezone", async ({ uut, user }) => { + // Check language and region setting dropdown + const timezoneInput = uut.locator(".mx_dropdownUserTimezone"); + const timezoneValue = uut.locator("#mx_dropdownUserTimezone_value"); + await timezoneInput.scrollIntoViewIfNeeded(); + // Check the default value + await expect(timezoneValue.getByText("Browser default")).toBeVisible(); + // Click the button to display the dropdown menu + await timezoneInput.getByRole("button", { name: "Set timezone" }).click(); + // Select a different value + timezoneInput.getByRole("option", { name: /Africa\/Abidjan/ }).click(); + // Check the new value + await expect(timezoneValue.getByText("Africa/Abidjan")).toBeVisible(); + }); }); diff --git a/playwright/e2e/settings/roles-permissions-room-settings-tab.spec.ts b/playwright/e2e/settings/roles-permissions-room-settings-tab.spec.ts index 8d8c2ebff..b9fc7c10e 100644 --- a/playwright/e2e/settings/roles-permissions-room-settings-tab.spec.ts +++ b/playwright/e2e/settings/roles-permissions-room-settings-tab.spec.ts @@ -1,19 +1,9 @@ /* - * + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { Locator } from "@playwright/test"; diff --git a/playwright/e2e/settings/security-user-settings-tab.spec.ts b/playwright/e2e/settings/security-user-settings-tab.spec.ts index 8d1f442ba..6eab83062 100644 --- a/playwright/e2e/settings/security-user-settings-tab.spec.ts +++ b/playwright/e2e/settings/security-user-settings-tab.spec.ts @@ -1,18 +1,10 @@ /* -Copyright 2023 Suguru Hirahara +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. +Copyright 2023 Suguru Hirahara -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/sliding-sync/sliding-sync.spec.ts b/playwright/e2e/sliding-sync/sliding-sync.spec.ts index e1efa7ec6..885948980 100644 --- a/playwright/e2e/sliding-sync/sliding-sync.spec.ts +++ b/playwright/e2e/sliding-sync/sliding-sync.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Page, Request } from "@playwright/test"; diff --git a/playwright/e2e/spaces/spaces.spec.ts b/playwright/e2e/spaces/spaces.spec.ts index 0e7aa0e4f..575450c64 100644 --- a/playwright/e2e/spaces/spaces.spec.ts +++ b/playwright/e2e/spaces/spaces.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Locator, Page } from "@playwright/test"; diff --git a/playwright/e2e/spaces/threads-activity-centre/index.ts b/playwright/e2e/spaces/threads-activity-centre/index.ts index 8b013c44b..9c965faf1 100644 --- a/playwright/e2e/spaces/threads-activity-centre/index.ts +++ b/playwright/e2e/spaces/threads-activity-centre/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { JSHandle, Locator, Page } from "@playwright/test"; diff --git a/playwright/e2e/spaces/threads-activity-centre/threadsActivityCentre.spec.ts b/playwright/e2e/spaces/threads-activity-centre/threadsActivityCentre.spec.ts index 66a3bc58e..20e4db807 100644 --- a/playwright/e2e/spaces/threads-activity-centre/threadsActivityCentre.spec.ts +++ b/playwright/e2e/spaces/threads-activity-centre/threadsActivityCentre.spec.ts @@ -1,19 +1,9 @@ /* - * + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { expect, test } from "."; diff --git a/playwright/e2e/spotlight/spotlight.spec.ts b/playwright/e2e/spotlight/spotlight.spec.ts index 5d10937b6..4a6b5611d 100644 --- a/playwright/e2e/spotlight/spotlight.spec.ts +++ b/playwright/e2e/spotlight/spotlight.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/threads/threads.spec.ts b/playwright/e2e/threads/threads.spec.ts index 7898457d0..e41b34786 100644 --- a/playwright/e2e/threads/threads.spec.ts +++ b/playwright/e2e/threads/threads.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { SettingLevel } from "../../../src/settings/SettingLevel"; import { Layout } from "../../../src/settings/enums/Layout"; diff --git a/playwright/e2e/timeline/timeline.spec.ts b/playwright/e2e/timeline/timeline.spec.ts index b00179c0c..1abf229e2 100644 --- a/playwright/e2e/timeline/timeline.spec.ts +++ b/playwright/e2e/timeline/timeline.spec.ts @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as fs from "node:fs"; diff --git a/playwright/e2e/toasts/analytics-toast.spec.ts b/playwright/e2e/toasts/analytics-toast.spec.ts index 2ce2f8296..b1faf7a77 100644 --- a/playwright/e2e/toasts/analytics-toast.spec.ts +++ b/playwright/e2e/toasts/analytics-toast.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test } from "../../element-web-test"; diff --git a/playwright/e2e/update/update.spec.ts b/playwright/e2e/update/update.spec.ts index 6af46e83e..d073a3343 100644 --- a/playwright/e2e/update/update.spec.ts +++ b/playwright/e2e/update/update.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/user-menu/user-menu.spec.ts b/playwright/e2e/user-menu/user-menu.spec.ts index 84e849c15..0ad21dbde 100644 --- a/playwright/e2e/user-menu/user-menu.spec.ts +++ b/playwright/e2e/user-menu/user-menu.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/user-onboarding/user-onboarding-new.spec.ts b/playwright/e2e/user-onboarding/user-onboarding-new.spec.ts index 0799dc0f6..f561eb961 100644 --- a/playwright/e2e/user-onboarding/user-onboarding-new.spec.ts +++ b/playwright/e2e/user-onboarding/user-onboarding-new.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/user-onboarding/user-onboarding-old.spec.ts b/playwright/e2e/user-onboarding/user-onboarding-old.spec.ts index d9be78f34..e1454311c 100644 --- a/playwright/e2e/user-onboarding/user-onboarding-old.spec.ts +++ b/playwright/e2e/user-onboarding/user-onboarding-old.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/user-view/user-view.spec.ts b/playwright/e2e/user-view/user-view.spec.ts index 1ff2e6568..218c63fe7 100644 --- a/playwright/e2e/user-view/user-view.spec.ts +++ b/playwright/e2e/user-view/user-view.spec.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/utils.ts b/playwright/e2e/utils.ts index e7587c7df..b357b5ca9 100644 --- a/playwright/e2e/utils.ts +++ b/playwright/e2e/utils.ts @@ -1,19 +1,11 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Mikhail Aheichyk Copyright 2023 Nordeck IT + Consulting GmbH. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { uniqueId } from "lodash"; diff --git a/playwright/e2e/widgets/events.spec.ts b/playwright/e2e/widgets/events.spec.ts index a336bd2cf..c2c8c8d30 100644 --- a/playwright/e2e/widgets/events.spec.ts +++ b/playwright/e2e/widgets/events.spec.ts @@ -1,19 +1,11 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2023 The Matrix.org Foundation C.I.C. Copyright 2022 Mikhail Aheichyk Copyright 2022 Nordeck IT + Consulting GmbH. -Copyright 2023 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test } from "../../element-web-test"; diff --git a/playwright/e2e/widgets/layout.spec.ts b/playwright/e2e/widgets/layout.spec.ts index a5dd856a9..41cfece6e 100644 --- a/playwright/e2e/widgets/layout.spec.ts +++ b/playwright/e2e/widgets/layout.spec.ts @@ -1,19 +1,11 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2023 The Matrix.org Foundation C.I.C. Copyright 2022 Oliver Sand Copyright 2022 Nordeck IT + Consulting GmbH. -Copyright 2023 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/widgets/stickers.spec.ts b/playwright/e2e/widgets/stickers.spec.ts index 37aaea58c..ff5526a6e 100644 --- a/playwright/e2e/widgets/stickers.spec.ts +++ b/playwright/e2e/widgets/stickers.spec.ts @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Page } from "@playwright/test"; diff --git a/playwright/e2e/widgets/widget-pip-close.spec.ts b/playwright/e2e/widgets/widget-pip-close.spec.ts index c8073a340..1ee2246a2 100644 --- a/playwright/e2e/widgets/widget-pip-close.spec.ts +++ b/playwright/e2e/widgets/widget-pip-close.spec.ts @@ -1,19 +1,11 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2023 The Matrix.org Foundation C.I.C. Copyright 2022 Mikhail Aheichyk Copyright 2022 Nordeck IT + Consulting GmbH. -Copyright 2023 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { IWidget } from "matrix-widget-api/src/interfaces/IWidget"; diff --git a/playwright/element-web-test.ts b/playwright/element-web-test.ts index debe0d0f1..9d9da67a0 100644 --- a/playwright/element-web-test.ts +++ b/playwright/element-web-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { test as base, expect as baseExpect, Locator, Page, ExpectMatcherState, ElementHandle } from "@playwright/test"; @@ -353,6 +345,7 @@ export const expect = baseExpect.extend({ if (!options?.showTooltips) { css += ` + [role="tooltip"], .mx_Tooltip_visible { visibility: hidden !important; } diff --git a/playwright/flaky-reporter.ts b/playwright/flaky-reporter.ts index 3fcdc406f..243699eba 100644 --- a/playwright/flaky-reporter.ts +++ b/playwright/flaky-reporter.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/playwright/global.d.ts b/playwright/global.d.ts index 9663b9310..0ff5bc84d 100644 --- a/playwright/global.d.ts +++ b/playwright/global.d.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type * as Matrix from "matrix-js-sdk/src/matrix"; diff --git a/playwright/pages/ElementAppPage.ts b/playwright/pages/ElementAppPage.ts index af7999435..c769a935f 100644 --- a/playwright/pages/ElementAppPage.ts +++ b/playwright/pages/ElementAppPage.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { type Locator, type Page, expect } from "@playwright/test"; diff --git a/playwright/pages/Spotlight.ts b/playwright/pages/Spotlight.ts index dcd4b73f8..a5f1318de 100644 --- a/playwright/pages/Spotlight.ts +++ b/playwright/pages/Spotlight.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Locator, Page } from "@playwright/test"; diff --git a/playwright/pages/bot.ts b/playwright/pages/bot.ts index 3b4613010..d50a0e84e 100644 --- a/playwright/pages/bot.ts +++ b/playwright/pages/bot.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { JSHandle, Page } from "@playwright/test"; @@ -22,7 +14,7 @@ import type { Logger } from "matrix-js-sdk/src/logger"; import type { SecretStorageKeyDescription } from "matrix-js-sdk/src/secret-storage"; import type { Credentials, HomeserverInstance } from "../plugins/homeserver"; import type { GeneratedSecretStorageKey } from "matrix-js-sdk/src/crypto-api"; -import { Client } from "./client"; +import { bootstrapCrossSigningForClient, Client } from "./client"; export interface CreateBotOpts { /** @@ -98,9 +90,13 @@ export class Bot extends Client { } protected async getClientHandle(): Promise> { - if (this.handlePromise) return this.handlePromise; + if (!this.handlePromise) this.handlePromise = this.buildClient(); + return this.handlePromise; + } - this.handlePromise = this.page.evaluateHandle( + private async buildClient(): Promise> { + const credentials = await this.getCredentials(); + const clientHandle = await this.page.evaluateHandle( async ({ homeserver, credentials, opts }) => { function getLogger(loggerName: string): Logger { const logger = { @@ -180,53 +176,50 @@ export class Bot extends Client { }); } - if (!opts.startClient) { - return cli; - } - - await cli.initRustCrypto({ useIndexedDB: false }); - cli.setGlobalErrorOnUnknownDevices(false); - await cli.startClient(); - - if (opts.bootstrapCrossSigning) { - // XXX: workaround https://github.com/element-hq/element-web/issues/26755 - // wait for out device list to be available, as a proxy for the device keys having been uploaded. - await cli.getCrypto()!.getUserDeviceInfo([credentials.userId]); - - await cli.getCrypto()!.bootstrapCrossSigning({ - authUploadDeviceSigningKeys: async (func) => { - await func({ - type: "m.login.password", - identifier: { - type: "m.id.user", - user: credentials.userId, - }, - password: credentials.password, - }); - }, - }); - } - - if (opts.bootstrapSecretStorage) { - const passphrase = "new passphrase"; - const recoveryKey = await cli.getCrypto().createRecoveryKeyFromPassphrase(passphrase); - Object.assign(cli, { __playwright_recovery_key: recoveryKey }); - - await cli.getCrypto()!.bootstrapSecretStorage({ - setupNewSecretStorage: true, - setupNewKeyBackup: true, - createSecretStorageKey: () => Promise.resolve(recoveryKey), - }); - } - return cli; }, { homeserver: this.homeserver.config, - credentials: await this.getCredentials(), + credentials, opts: this.opts, }, ); - return this.handlePromise; + + // If we weren't configured to start the client, bail out now. + if (!this.opts.startClient) { + return clientHandle; + } + + await clientHandle.evaluate(async (cli) => { + await cli.initRustCrypto({ useIndexedDB: false }); + cli.setGlobalErrorOnUnknownDevices(false); + await cli.startClient(); + }); + + if (this.opts.bootstrapCrossSigning) { + // XXX: workaround https://github.com/element-hq/element-web/issues/26755 + // wait for out device list to be available, as a proxy for the device keys having been uploaded. + await clientHandle.evaluate(async (cli, credentials) => { + await cli.getCrypto()!.getUserDeviceInfo([credentials.userId]); + }, credentials); + + await bootstrapCrossSigningForClient(clientHandle, credentials); + } + + if (this.opts.bootstrapSecretStorage) { + await clientHandle.evaluate(async (cli) => { + const passphrase = "new passphrase"; + const recoveryKey = await cli.getCrypto().createRecoveryKeyFromPassphrase(passphrase); + Object.assign(cli, { __playwright_recovery_key: recoveryKey }); + + await cli.getCrypto()!.bootstrapSecretStorage({ + setupNewSecretStorage: true, + setupNewKeyBackup: true, + createSecretStorageKey: () => Promise.resolve(recoveryKey), + }); + }); + } + + return clientHandle; } } diff --git a/playwright/pages/client.ts b/playwright/pages/client.ts index 94ee5d881..06e05fdcf 100644 --- a/playwright/pages/client.ts +++ b/playwright/pages/client.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { JSHandle, Page } from "@playwright/test"; @@ -364,24 +356,11 @@ export class Client { } /** - * Boostraps cross-signing. + * Bootstraps cross-signing. */ public async bootstrapCrossSigning(credentials: Credentials): Promise { const client = await this.prepareClient(); - return client.evaluate(async (client, credentials) => { - await client.getCrypto().bootstrapCrossSigning({ - authUploadDeviceSigningKeys: async (func) => { - await func({ - type: "m.login.password", - identifier: { - type: "m.id.user", - user: credentials.userId, - }, - password: credentials.password, - }); - }, - }); - }, credentials); + return bootstrapCrossSigningForClient(client, credentials); } /** @@ -447,3 +426,31 @@ export class Client { ); } } + +/** Call `CryptoApi.bootstrapCrossSigning` on the given Matrix client, using the given credentials to authenticate + * the UIA request. + */ +export function bootstrapCrossSigningForClient( + client: JSHandle, + credentials: Credentials, + resetKeys: boolean = false, +) { + return client.evaluate( + async (client, { credentials, resetKeys }) => { + await client.getCrypto().bootstrapCrossSigning({ + authUploadDeviceSigningKeys: async (func) => { + await func({ + type: "m.login.password", + identifier: { + type: "m.id.user", + user: credentials.userId, + }, + password: credentials.password, + }); + }, + setupNewCrossSigning: resetKeys, + }); + }, + { credentials, resetKeys }, + ); +} diff --git a/playwright/pages/crypto.ts b/playwright/pages/crypto.ts index 183f5629e..f221412a7 100644 --- a/playwright/pages/crypto.ts +++ b/playwright/pages/crypto.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { APIRequestContext, Page, expect } from "@playwright/test"; diff --git a/playwright/pages/network.ts b/playwright/pages/network.ts index f53c32ad9..8a2692543 100644 --- a/playwright/pages/network.ts +++ b/playwright/pages/network.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Page, Request } from "@playwright/test"; diff --git a/playwright/pages/settings.ts b/playwright/pages/settings.ts index 1b7d099c6..6a1caf155 100644 --- a/playwright/pages/settings.ts +++ b/playwright/pages/settings.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Locator, Page } from "@playwright/test"; diff --git a/playwright/pages/timeline.ts b/playwright/pages/timeline.ts index de9a9a58e..baf8306a7 100644 --- a/playwright/pages/timeline.ts +++ b/playwright/pages/timeline.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Locator, Page } from "@playwright/test"; diff --git a/playwright/pages/toasts.ts b/playwright/pages/toasts.ts index 436ea4295..a90e18251 100644 --- a/playwright/pages/toasts.ts +++ b/playwright/pages/toasts.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Page, expect, Locator } from "@playwright/test"; diff --git a/playwright/plugins/docker/index.ts b/playwright/plugins/docker/index.ts index 2b193c2fb..895a7d0f1 100644 --- a/playwright/plugins/docker/index.ts +++ b/playwright/plugins/docker/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as os from "os"; diff --git a/playwright/plugins/homeserver/dendrite/index.ts b/playwright/plugins/homeserver/dendrite/index.ts index 0ddaecc1b..0886dc158 100644 --- a/playwright/plugins/homeserver/dendrite/index.ts +++ b/playwright/plugins/homeserver/dendrite/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as path from "node:path"; diff --git a/playwright/plugins/homeserver/index.ts b/playwright/plugins/homeserver/index.ts index b14ba7008..c17ea15f5 100644 --- a/playwright/plugins/homeserver/index.ts +++ b/playwright/plugins/homeserver/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export interface HomeserverConfig { diff --git a/playwright/plugins/homeserver/synapse/index.ts b/playwright/plugins/homeserver/synapse/index.ts index 86490bb0f..64c246586 100644 --- a/playwright/plugins/homeserver/synapse/index.ts +++ b/playwright/plugins/homeserver/synapse/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as path from "node:path"; @@ -28,7 +20,7 @@ import { randB64Bytes } from "../../utils/rand"; // Docker tag to use for synapse docker image. // We target a specific digest as every now and then a Synapse update will break our CI. // This digest is updated by the playwright-image-updates.yaml workflow periodically. -const DOCKER_TAG = "develop@sha256:92bd527fb219e2b8bad770f25140c0117fe08fd948b991bf669c3f86bf4f2c61"; +const DOCKER_TAG = "develop@sha256:117a94ee66e4049eb6f40d04cc70d4fc83f7022dacc9871448c141e7756492f9"; async function cfgDirFromTemplate(opts: StartHomeserverOpts): Promise> { const templateDir = path.join(__dirname, "templates", opts.template); diff --git a/playwright/plugins/mailhog/index.ts b/playwright/plugins/mailhog/index.ts index 684aaee5e..e9e5f08b7 100644 --- a/playwright/plugins/mailhog/index.ts +++ b/playwright/plugins/mailhog/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import mailhog from "mailhog"; diff --git a/playwright/plugins/matrix-authentication-service/index.ts b/playwright/plugins/matrix-authentication-service/index.ts index 40649159e..eaad350b8 100644 --- a/playwright/plugins/matrix-authentication-service/index.ts +++ b/playwright/plugins/matrix-authentication-service/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import path, { basename } from "node:path"; diff --git a/playwright/plugins/oauth_server/index.ts b/playwright/plugins/oauth_server/index.ts index 065436ef3..4f855d3dc 100644 --- a/playwright/plugins/oauth_server/index.ts +++ b/playwright/plugins/oauth_server/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import http from "http"; diff --git a/playwright/plugins/oauth_server/res/oauth/auth.html b/playwright/plugins/oauth_server/res/oauth/auth.html index bb01a3e80..cb5ac9b0b 100644 --- a/playwright/plugins/oauth_server/res/oauth/auth.html +++ b/playwright/plugins/oauth_server/res/oauth/auth.html @@ -1,17 +1,9 @@ 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 D8E^d^ diff --git a/playwright/snapshots/timeline/timeline.spec.ts/collapsed-gels-bubble-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/collapsed-gels-bubble-layout-linux.png index 9d59bfa56fc241ba636a50663b968ee7aafe1e6e..596c189f45a0a9ba086966a4b5353e4e9520f1d3 100644 GIT binary patch literal 38726 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/configured-room-irc-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/configured-room-irc-layout-linux.png index 1c07ac36974654609428d6d692c22acc08843d0d..ad144f7345088779448e63c14c84bae7ee3e3419 100644 GIT binary patch literal 38741 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/event-line-inline-start-margin-irc-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/event-line-inline-start-margin-irc-layout-linux.png index 48e82f72af1fe4da258dd0936b5a9fe20617e9d7..4745d81d22c0c7398d67760ecddc706bde6a409a 100644 GIT binary patch literal 48500 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 literal 48482 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 H^!fh)rZB=e diff --git a/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-and-messages-irc-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-and-messages-irc-layout-linux.png index eb5a0fca3bc4049ab9361b7aaa5a8199683df937..273be0a2697e6c2cbeff7d381aa2f4a575af4e67 100644 GIT binary patch literal 52727 zcmd?Rbx>U2)-6gDm*Bw(7Cb?NhbBOP;BHNDclRV%g1bv_cMDD+!QI`pad-MIe&?L` zzI(r_SGVfk{~mNz_wK#++G{VFbB-~`>K}44;^-(uC+t1f}Px8OL zR=_K>E>|rpFPYcwEzx#R-hDQ!;Z@S)(8?tr%D=;7h&B={r(0DNKcn< zct{4<22$M9>e#<_=A&T*h=5xn{2W$PaCrEDAje9<`t;$$w??dow_o7|4{bvbh9W(@ zX?3AK0&idbU5I7P@8R3`|1Lyu40$-D_;(?x>>9q;SEpx=7H-$=VOQH}s1<>NhPW>v z8u2^TZ$_<$#TGM?%B5L*X|EHjNuNJlI;3y&E_ueJ_Fe7i#{M5VRj9W|1YJ#q>1M2x zXR&+8PP+M671y_iCLolrr4it7#zGfJ2<$29DvBfvo+)!G@prtt{A4fc^w3(li?sxT zp5zzDnH3`NmjX##laZ>QA1?0crvw?g0Iab1pFUVKZ` z!LDpU)A>IgtB~1P1|EK@t@jvJ?AK~g3GQa>m=o*6bs<_I3(j_ww@%8g#X4|RbrnZf z#oIEx=IZ$u;Ov+He$d(N+3Z;D%et#)qJKX@zNePRNcrGTSoZT(RVt}ibz#!!R=yi7 z$!(Up55J=3JCWehebdKV%eFIDAnm*=1D%lU3FZwIKfj4MS;S*;nrYJwQuh$Q*OSmd z`2=S*&+=!8;&pEn`v}p7uE(PWJ5M# z+h!LRdzPkFui~0hTio2)H=x405lT{=lao7p`(x#vnst9#4@Mi>niOS%>g^{h0=j=$ zKGCcij&pC}Fc5;e*v^xdOQbg{#VTtfwXolodSOo(zu7w8Nfb)l3=_Ji@ck73=J%fu zg6<3m2po0?l_$_fNk*es6_w#8Vu*Ny#AfJ3PO)ZB;o@Lgkn1Q3gsq}thmExnFV2N7 zb)V&1#!93}=fIh*^ZxdnHp{$35-v6b1trMpFHMgCYp}rO(q%^Px(AVRii()1 zsC-&Ju-xCC$U?rSrI9}@kGwieo~yUcPBV=^N6KrI8 z^>}JhNc4yJU>>W249RNcP@L_2}3b z2RC;br#XI9_geqD%{$E+i}Ko9>yfM<&CSh8Nwa>a1bOO>QDZDDED%{Wc0#o0KDI|I ze}Dd@ke2Q@?2VOQ&(6+1+32sVsu~*_Dl03C=eCBLZnwlK4h?3{G`gM`nV6VV8ug!^ zp3=%BU+&G;CUINy^6{CQnyRa-Th7)(M5yu=9^k=o2g_^MOjr3JlE@A^?{`^H@PV< z+>aK5RITsT>U0&RZrfhb4|Jl0AGzqdjUXm8M5|9!YPoVMD=V+>?UCZ(WM*X#_gn<&;qL`3X0j|RryN=ZpF zf<~^VhjD*Sn&ndK6O!%jg2YA%I(lN$;J~V+x%WGFE8rTPfc~lZ>1K1$p{g zl->-zji5=>6kfGn8vh@e{xxiDKl2ao_4gOr>DEUGT22wkeHTnJ^rsBYq7r~{K{dD5 zL26-sb785ca_xf|i}9)y%6B@r{bx;_)UrruW9+qhB zsWJU$Boh)6=Ib4$BqY>ZyabeWFZSns!w(M+larGh8ygqBZlrZ|gcukC;nAnVnc}80 zvgT%HMg|61xw(T$++kQ1wyPakS=3LS_|VCw8WWW@w|! zQtMYbnPjzJHk6cErlUEcqM~Vno(!z4s;a6w<$8Yu@ffpUdfkyU9UUEwVd7zAG`_xm zevZ3S5mz8cHxLFb=5uI*)-~q>Ib1=4P+KRDsRGH27LKPJX?~cmW=~liPX$3sUd2 z*Ta~eqo}C(cVK;ZauaG_kdq@O&0*Shr$g!}*6>Kn1$a`uZbtg7RQ0KadUVc|h#2h? z@j8i&ETy%xXpTvOiKD%d>JMAGLL$9J8`>dhT3#_O$Mlq0ou4TK&}cj`KB0HJG|Gu; zXBVvS$q47&E%fyT*I$MOIFonh$!C&~l7^895D^n6B`1>*5Y#&D%@k|af^|BPB`%Mt zl9h%ELJxO~qM1fXPgQw!buESK6-T$u^VsTnDrx9!eN4Iqs-)D`nP0VoG-XSV9i^%) zFGe|)FMmry?8!9_d+nI+&%JIM)u##$>8L#^!JVj%=t(_%k-U3Vz?Auh1EbM=TS~wR zJ%m+ROdkVJ_zN^4S2hiw720Q1ncu12+tJe#h;@8~{C%$qpjPyLYSnlz+-+^4G3Y2pCpe(nhS$jVx(m@5O;Cn=v(Uw8NRLeov~OZGnlAOu{>EzMosT%Y))qY6c5 zcuPn&Fz;AZH(4a)b`FCcE5eMT`!0A0N;|ZgUw9w4ovm(`h-nA8pRY)xH$+`2yH7aY z>~G9`9_jx0^N+0!9pq!**R@I8m!+$0D;Ppdx2?PQQ^KOs30}WvDDUDg*SU|vK zVP;lYac5f52zDLw} zv6P}^r(AHc^a67KJ?+)9`yq%|o2gW-={y)-M>gKe`rMk)W8)`zUff3&Ve)V|Mn^|` z5iTjVhencRYt=Jco*KE`dALnGmlsRqN=^1$>XqU5pXCPM-8!l=WNlLJa zDyk@7--&%M4+*AQ%zm|c)D}Cz96ZAn=lsS2yooCS7=o_Qd2UHl+Q&DmNgN#$?Z)fq zXun&KO@Hkh!=GxnIy7D*&b^FjgRk7;FOlAtxU=J0&(l->dx8`lk$Iod^-ehGWC`P;5!oQZ$MZ|pt5qr)b>ay1a3G)eS!b>Ao{X+e;NN5`#9r`mc( z8b$b|3~gE2VzqjDxyQ6wkIm#*>=yB}I*hXx`ad-#{a&^y((aqBi`Q&OBvv2ae&!xc zwC=YUZ-`ni28OJclUkTadR#@|N?B1e71Qh=K>Uc)?Q?xjXvd)WlQn{18!E1+ujn68 zQJy8IXGG}gXTHU4D?1c1B=Cmu1lJz^fYIJ(z6u~q3o*CX71A7`HB_3Uj&7wk~4Vo%~EgH3c&TPLfQn36XN^)~5h8oJS-!@4 zpZPlfH4o;_F5kQ~CFbr!DU&q-trbv&*fObBfVBx<^LuTkQLvx6dn4mC!5w=d8u)NC ziu9QtRM(OH7Fph;@ZCH@+l15HnGxQ%SMEKi&6Y&UvdYu3(IwghO ze1kPp3`5m{2?60a;9sN$QpvwKj{k4^;y-o&i{ohZ`}ei~;y9Kd{~|=5{;L5tl>gUQ zlmB1eHalYr;ipWw+HPPE1AbD!Q6&$Fs5qE86hdgvaqN{FZt5Ic(2cvOidGRBJpXG823T7GkIa$6> z0u)+5bE4qIFi`{YYACO4dN)uqHY4+LfP&THQjLjAhWrV_dnzTUe78~MLtRf@b=yH4 zm%a5sh~Z{7KK6c^{iU&NS%0}j5>%kJ9QIQwoPf)N3BMT|9DiKquK>ruNWAy)>n!>B z?B7%LzfYqj5X#P^@Vz~&6MnE841pL3L>QWy4KP1?df9Bt4~mNH^z`yxw&NuSET83H zIUfw0&5X6TH>GmqO?}NiXre9Wj0dzC5%roMg=|4VL3%o6^?ZCd^cYlt?*W_12f%~rlKE5{`9Ml%VqN3Rt z$B>_?U4C)DpCEkkSUy0(k^vBTZ85FG*NE@*nuIs=bf~28JEK$G z+3py2l9GnzixU$AgF+O%3^SdRrQ(>m^oltfo8Bw^A@#VNHmyq~+6@;6(GG1@2=AMd+8`IInNdV?UKlIxVeM^Sg+cL>_xHoY!xws;lj7Y@!YLw|zEC#W>@W;%YzNKgJA$ zYBxAt9G%Tp7%~R^jjW+hC)Q@k^xQa25PpI%163%#8&pS^V{a>y7}FfAr)V z56QrKuWC>r%64hvx`~3e2xzzmdKfQ~LpX#dGz0s(e*R zSs4+7L=Fn|+UQgF^lU=i9NgK0P0h^Y=jXp9B)Yu0;^E<~DK9%bKYz>3-h%7+73+9w zICHsO{CsOzAAa97Rx>nWwz4`J*Kd@@V_%bzp?6V|Qest-(Gd=>=e|D5LWX|!{z-Iu z6p)rG=suAt9#*2wM@LI5;C1T)8w1nlQ*0xB`lDXMs=-vgi`j3Bn$>1_SW9V9QGnz4 zyU-+1YcXwMZk}6IG}q|L&dSP)A0&zn<{97ooYu3Bz-IH8=Qar8eA<@Gq5+5Vt*!x=9Qr&Bf>b1$78XMcO_$xb`CI;t&*nWOd(V8p+MWfGU0>Je8ScJg2q=(O--xG?(FJhbAV;QH#{&fFomy1Q%y}S#{G257Jh#R zfU%mox^|0~4;D5F$)8z#c*k_z$pI?C9$#5n52{}%rO-beomX}0@Z6`|RM9sy)XCNL zZw#aAjE2VXhU7@})E7fC%LbX0i4yJ6YIAP=RTbax=xE%9VL`wv-yF0YVJ_W2xyf&o zJ1(JF)I~smJz4X6kMx4ysL0GvI6B7A<#>T|W0>Wv9sJhZ#3Vi;0Z{!!FHOzN z*n$$2u68C%U!sYXLYwl!ngrZWYVipP``{59sXoTCY1oj)oAYeJ>+9wsEHU^Bp4ra*DqrmgS=R}S1I+EWZ;uZa zTfA30m>C%hiMg%J@(LBFsVRMh1_V8?u`0IC3MVr%@ZJlha{NZ+v|IZQ5Zm?D^(>#m z!B}@mTtI^~BJp%0w&=!iO;r^W0|T%3y$39b`+&W2p~<~d^F!OCtOJc>U~PX2zK0?~ z%20xkL=Gu3r~z>B^zi)U)$VIuzTMp0*qMaWh@kl*b;yhk=Jh%+GO1zQJkl9m&9%`DA_=x7FNQ+Rn~SJG`AS_r60_S@}qk z*AeysDP1ND8yIsqEHGgN*q^}L!M%AYvpjFSOKXY* z{U5&_3eHuE?~BBtlWBH2dPQxp(h))|lO`aF#N)IZU$yrgS#4ri(01ji&+m5*hX>)| z5&)j#d_=KcY!;DLd@@zy$!FRS>k;q>ArI505$oew=TKRNeSxat$QbS{FjwQi7G6nh zk!!Mh-AeYb=}i|-vaA#Pq~CJr9y-BEj|>&eE5GqY~S(-ZBg`%P*FhiL|0ow2Nnk;7QzF1iP!eh_LioIn7gurjBe(#lL zz5!_sz#ThW_a)eG4$SgR!S5~>ZwbnkCjrOs1o3>DZ%P~x z+?R(hNJ&%Hd*ecgI2E9edM5-a|NLGMv>UVn=4BvN!1?MJ4-@kOT(Glc5>#-ou~AUE z7>tEIRGP-NsGJU1j6&67Nl8h-&lVYK_A+a7@$v8+ZK#loc(DcNzV7Miaeqa1bFmW# z=(m@3baZs?V_Wi|7ouuNuYnQUiz!rb+?m)D9`Wf_E%}tjRjtnMxxmC+OuKWhaj~@A z4y>qVRr%B}TamLQnLkdoNEWxcq~-xId|62)#%fW!!k#=g@Gql5 zUV&MFpII0={p>0lh=y@7HX~>PK$sf!hBZqmJ11uMu3@)>6ws9Z0p_C;`bwXq&DePX zfiUCOC>iTVI^NQVc zP}V%1tMG(@NLNjhSw-{ZJW>~`Fou$nlGlypy+1l}Z%;2WrQ!NIF}K+5{p>eh_w`AC z^quU27R%Xlji6^l1fqLVkQ+SW;Ht%F4I2A5i+?ZT1V18AHtp9=I=`)vD-0+2=JAe) zXWDV!<1_pbr0eUQ_w4jE@CCGA{)fBX2j0KbQ}vNE1>6dYdBxD5hA5Hv6E?k3uB ze{E4$RlQ)(9X#Eg?j6tGgpDsZJ_&z(W@)*HK`zK54!=9ynn zVRr_zQH@J2DcSD~B`t0K#t)vu*7?H0)={%gPgzv-nX=j)Bh?UVw%c;TsIiu|+x6u& z%|Z+75N@o25HX5V{W>;{p*dAeucqAf)}LZ!Db zXdTA4TDBkS2F?88hj^ENpRqY?0&doh-FaZQJpi-C<$k3rqTPO@Z=ufqVrOh@Yb$72 zoDSXbb zTfZRHQs^qCnvxF0Srqvq8^kuvGSVTa3 z6d<267QEqRh0F96Bd>OrLhB@dK1(DO`+V|ariVi_&C6a2`^OM^T;#FRSiRKud-FCb zrvTgrS(K;rv;N_YiEDg>cih?(7UeDNe)oF$&C5$SKr^zI1M;<0V! zxUrkSV{c?`ZVqrmUlRAl*!JjYP#77zM%~P4<+Q~)Ym4vp7HsR`B;RJ=GTCSTc;BK|h$ivG! z!&}eWa?hK2{f%E&chproS;+fqP7bwL@TIz_D9yWf@0jmWTA8j%{k!7oLT zx_kTCx!E&&X4R^?`@6GsR7AA3P3p>R&CS{xLtMR}g3@Lc)v98VR{jqS;5{SbFot4WHK5`|%EcpL$;~YbB(mLoQ0w(}j&xRBoL1 zkSJdsu%U(gqEiPxiGhIu< zUSPA_=9k1}37ebV2Zm?Um-Ne94vu#KZG06*O_+!;@pGEk^g`M* zZa*g+sdsXRp1)lU@|b`B{=K|xE+r`$|F@6RybTe9@O?~eb=5mhm;(Tlz$Vd{8n1RB z8NH2C??c1XAtw3YEE*A7A`{2rv}`_ceRFeyGHt;Xq^zt09q_gd&dD)Sp}nZx{PO6D zYB5w>Nl8sb#p!S;od)QWoTU9~05!3)x)Ya}*z@@fz*$pFPG{JONO!k)lf^ed>U{=m zQZ}5l{HBz#r2f@md4;$dHD-9_wo#>}vgoUrC@31W`=u)@D}!mM9l^vG zTSxlHH`w)zk`=7aow+Kg(kb9&Dv# z1vBW)@^Rn&&k$AVU2Z=ii}ED3wy)m~P>&&b%#@T-Ma4y)o=z27nfD_Uh`{)YR0cM2@e`cJIG> zW7~A4@!jR#H57hh?u8`hmDRq=a)yTSvrc8%qHgMvPoQyGpBEi2`07q zoc&7COQ8@P-6_`5kl^wG zzvDE~cs@Qhc71U`K#04xx?`+s`T`qUG6wao=kP*GM=fQF)ITk+m?^H9RhgRqw(zQC z2G1QJv$MlPB;=Icr6oda-a2RNL2v`nGa3gAnmNkt3kiuDKi@*un#3W}Pg?~)?s9IO zz40r5(2&2r3|+eGLSJ;g^D+Q58;tgk*!T8jIaL$SyX*1s>dj1XOkC24Z}TB74X!7# zRB*nc@aDB@J5(&qq~vCOT$otc%B4ex8r53nI(K*^t#O-;@ke zfyjRhYk*1$qw{}Hf0;f!-E$$sgFHPmGhX&h4)_~I|7;jGT&=q%G$S^qpxTX7jw9m4 z=;(1t_s{NU($piN45iIzixlaAfV}iJ>QANGTLE!lL}O#~biJeIr%y}=t3Q8>{Atb> zi%w)>41Di$j7|vSS@RqEWieZ$Jxpn1IaLN7ru;51+fi_j8U5uN=MAX!d3PaeXHy0k zG!X2{3E^}|+}(G(L28VffRsUig)8*JwjZV}D7aAZOfJe$^aYY^^CJ-fkfvGlhsQtV zoG(tg`=6p(b=g$@yY0?25N0Eylbr6V2j&?fQv%;@ER(i9T^Uy>H8@__4nn2v-ok={ zi6UfY`x6^SM@&o|Ky!%3fPlHh^9IA%SQQab9P%Ad<^N!2CVX>1B<=5~f>&=`>E-zz zv2x3Qi+*!57?3OvK~TeP+@He$CcrzshK=?06P3z`q6M5RB~}9N=RmtfF3orQr^K{v z{^|YoeEl>z&#{oIs&lEJ=jzHzt=0U-3T$I<55#qJ1$>|-_vNpAlX*Nl#UC!8W(2C-&d!5dd0POvJmbZ# zH%FdF_B&_kt{*!6I1Pg2U$!_sy^MdXwB+r#YbnmoqyHa_a#YhyEzbQ+EXKA>%pl5aj*1FOO6pAHT(;m! z(r7%D+Rl=A06OeOw;CE63_~t}fY9+Sc6M}hc5>1#*Q2o}&n%_jK)?^G2F#VSvn(QF zC+KVtsw;33Fl+2?l9vH62Obhgkz%@;D1Ct<3n-8F=IW9PD$UkmwySi!@80?Q^}nX4 zUnalx3BWk2Y5VfXr^af!V>aQTTZ*;%Z~AFD7|6`j%g4zCJ%FDz0XYP)dK;WXM=-y= zcgc91Gi{)&%kFk+lgMTW8_DifiX(DYHCwsriwV&DB6&j*k5%FBY|wMENx+gE658Bl5Nk1qB|N?excUbG(<=`E%)wlpqQDz@ zJYTM@ogEx<0v#2o4APIVu-fu+5H~DYGf+`c@xn&x>~jZnez}~%I1^i4{*>fb235BD zU*2Aw6l+dy4kQtC2^0Y~>d3ad(zsuvPA?{J9~*n+sxuHPGAYiRZezmtXjQdTOO)Jy z>Jhc?2XS$oMw@**r7_S902GGMDBv1Oizy%#bq50IUU_-Y;3gOPg6lNzbl-hnh zJ8&^nUXO!!O6jpc>&IHWg}l96f`D!*Fz}VH#X{Bk@p>=d0ONTbk3qHoJmLHC;CkHk ztu5dO|CmpfST9tG{yds*pt?8^dIOk2dPQ1tAuqkjl6h>EJhImP`3Nu)Wc)6z-=3Z5 z>*>X@XbO)vdR+Cy4`+IMG&bG1m8%u~`Qz>z{_B?ud&9qf z|L%^Aobf!}4a_b4@$J}tO%Sra)or_E(XI!+Ayn{rp7Xn*A-uOOWBsz`ic(*%sCI`||x0Gv51s zPdZgh=v^{k3;66DY`tTT0~2LDlZNLP5)z$k92(+I!xLq^E`7aUT%%+Vk?`+sMi~zf zylwfEz@@*r?|B<>YGWq_&NFoP^$hg&Pu?KGIF+@17J>zcXirhDKnI{r4CJ9S(Ho2a-oZ)CRw+snrn!}<*2()*nJ z-6uSm1g^~QSL^yRUgnCuqEfN8Ekp2#`$AF}Z!&5FO`K)&@v5ae>j~^iw1H&Rta3L(>ofFIJE*MA@1s+E+2QG<+kIQDc zx9gq4S^E9T@K2sCS?WULXBT0NJ6jiSce?xW+?6%>RC~AOP9J4Od<>p0;ytaU%bukQ6(`YDt!WtCbpc&nXlUS6--6l{c(du{BoL-g~K$VK6# z_o;cWd0G9Qmq`eHdcaxU;h{C6nip7=K;L{kxG!?N$>IUOB%rD zq1uxJ1%(oN$`6{FNmy;4-yl%}PS_Uff;EP~`~NObrd+@SZ?P$VUY`JD1Cus#?>%qGBO$md}-H zO8qLuA^FHaNalWlUD$cPe1|A5zW>!85AU~-QwD<)CIvTLZEg}VXRRtLCKQzyM2*Pc zDFzpsR#sMlN5{cA2qS!(tQtU&mH)$ZrRj#lN8*ml<^~?x*WVA!|E0Cgcm{T0j>hH8 zA^HwC2I;v^Y;0^;*hQnOJ-}oPPSMozO{22Uo;A6-E7feuinn-A{^}-DA7!pp5 zhZhqVh{DNP4V%0^G&i2NTJ1n5!PwmB*94iE7Pm8${t9*V1QivK7IWS{Knp?J?nOsO zXREB3sWlfz>UN3yt)ufApfW1)P(s40JZNe}gv8xj_p}%q2jO(Q51dnzz2@!y->0U2 zg_2sHo+Tl3#3Ur>T3SjY>Eg5J@5(9h!PO-bIkV|%_)Oce_`W>W99n`8D)nGV{7={r za!i@t5IdA2XL1l(g!+&i# zPda2IBqU_bHCb7{>U~<3v>r=e9*sX48XN2DS-W>6fAe{%V7w6I%7N+;gN(PzpqpID z_4DV?E|(g#mEelGD$^h!ig-`;z~IRNqCtwF;gHk(?(XhcA_x)w8+c4~a-mjN?EV1@ z^)B+o#{0*u0;zaR?XxF07nxzc{%I}ndPncKK?$FXy76_xOSEDPNDT=ep#Zr{c|lK4udAwSPq2}5%o;JZnM+}5?+xYwpx34E zKwj;W5oa2S`|@aBEy+4>`2GI8yAz0_Y%Wr3YnPhJg@wO%OLWVo3A%!` zLz`ca3%8>L^sDhu>(>ixY(Ndkr1EpxZxsEyyo5PwX=x>Lm{x%JVS=_e-`(W3GY+=z z^Zdd>0`Ci!gB%vg&!1a>%ZrErIhTvM24~jSZ{(CdjsWTh6$Ooq&uDkNa1v}OkU|{{7Z^`Rtu>5G$!-kQ8#g=r1x*@(ly}G_` zX=+Me5L#1n4zi!Q(wO#6w)55Ys+Ti1*M{zAu=UNw!9mv6jt+mgcPyk=1VXE>seW_) z{POBz=ku)X$_Gj~PKtp0M3@kIZfYYQHrw!AAICeFp8)}z0B&@KZ3@!sAFmD7STcLw z-9ASrTiKhh-G-+zue?weR`T%;|AGMDP2L6hVI&SbA|gF2qy0_tp%yrT4mmj{rt`HE zwa&js`2*8yezfu@c{w=~E#57yKPkv{gg_E8JY4Sjqlxbw+dPoZ1G$S%%X@3qQW##r zfkuWCB)us}Bko_g7dx0`czhfPO8V2hS=`gkpu4<1Zyra39ND1GVUn|sj)12CGC?|} z*}q49F}nrF1O{vmSl^jmH9=mt{TZUDEnZg@9#?@S^YzDRPH1HBmY{lVfLV6GI8WyC zENE4Tq6@e`Tn%e*KG3eQs7uJ-{&sbeUEIoUyW;x;r!(!Ht=oE!vXzxp5dOVNQ)qpC zVncwt*L`j?)bpzM&ckz6Pv3cOW*%rrwsl8c)#6Af!X#}9zg10tHe z?qIN)li^H6$Dzzz;{#&u5>x?Pl#tOy#Cs@C^ZDVj59rTqNq|?yLJ8k`|K=ABP?-eT zIj?&@Yr1;Br|^5x%SwAC~Wumh2hr>JsP-CFka5KN!glYW3E_yPrwojg35Z=!YGy z(#iCtuqVAC1cr9oYB9x&1duL%e$u70Z-l8yfS3$qr-{ni+6H@LOM}CLj4P+l=Nnix z8oQ=`#bo$=>sW6O2owG)%&b|hQD^oH4*x{7chnXc8EM$7GFN9G@K=wAkB?RBv>`$_ zWIv>khlDknEwx1=Y zd4&LnJr$3aiA~TXBSLPHT-%I2bn__2p#b)Zoq@{U@9MQ{$M@How${zYqq1FA6 zS|MEd_OLCebGUSY+Q4pVMLanDPnpx(ot4RE^A?PLX~!LEF;MmkkudbN*m>ctqEx9s zQzU~us*~Wv69TuF&Tpd4wH|7-^KX>P8axOZENM(|S&`@$|NfgIRD>6?|H8s5hc0dD zq0Ab(Yr0Ljx6tM0#a2%R15ZtULHhA3gLmzV`L!upP~b}=1uL%7eYW1g+GtoNbX?(P z{s~|33~te|QgQ4IA}A4#e%uD{a!GD-Z~Gy8fMQ-v0Cu!c-uPGVe`mx1ljJ9vF!ZvN z?R5wBztS z=DChd*1265&d?ri0FXAdnaFOyrfVQfV8?X8ueug*obRD>S^Ys&uphYe;FFvM+N3iL zt^qzh*MkoFOGhd}s)k!}!ME%w!h#<4+*oZ@i-*b(LU>s}Nx7wY(25SrV?jP1Cq##_ z;ySSqKU{>B0hFV-+f~ux+fHk&u{A+*KH1n4{9tS1RQd8q4JIfWMF zPSXcz_e_lrx4gv!h$* zMob6}Ib1?GSc__N&3FFayA8E9S7(S|mHg)da0|Y(Y8BALY1hfoR&donjZDu8bxYbm z+wam!+Arp;8pk7j*bU9004k*RbwD>M-NJf0-X8u?{K%xwH9Z8>se~y4Ow5-KA0WfW zCG}~$#q*%x6wG9C=O`Ph#jM#I>Qz`&6Q9fj8?@f#RxNoBpAcIoT1~nlZ znvc0IC;9d{e!bbrVWleEXpg;_aZ?|cc78ZJVm4NaTw})t7V*99X`#lRsFW;~O{#I} zTMS8tkc%P#P-e_KL_iT)V<;*8PhQjcS%_l}$!+_qE1#l z_N&0Z=T8@<%79Vzm>@X&g@p6GF&t~eyGGnN&8d3$c*^n#vwQrQST8t;c*;T7;twvR>Y%eS>}0{f`zPa(c9{-^So!X8|tqW<*_ILlse-pd7SV zeX17!BT7PFq3 z`JNECUisG@32t~ZTzYP6AjgsNmZdpcUl2V^5d;cm64u+Wn$VmU?IaU}@kal>cn7m? z_*;0?(jy2_zV+gG*+1R=k^{D>fjU0-$@+H;@=Z>1e)mZU*uOTSx-~QH^j?U3FGpH$ ze?iE8nGMc_k;H7@@=!Tj`w@haqiURv{8sn)H~EYMdu*}ahLIbGeTe2u>4Y~UzhWY4 zoJJAS7NDtCxAwMBa&QsuW7qVL+P5=XHpb1-$cL)!3upSxGARmIf#f zlI{1YHe~9-P9+)RwnjG;G|2$Dgw(%KQei z5uppX*AIzFFgHJ5cRyb5|2>DY{c>lhDmE&vh52|1uA>w0a%O}EpVRQrWCt~VG3i3h z&dknTzP6uCtUcM1=*gs`KmPvkLj~^zZ9H|g<&b zF6o!H`1tCWvW=U*+G-N8lM&&|3b594@)Z>e4ZqGZaw2TOh`qlXb~$NNW{f@d);he= zGt=8oPPle+1NaSG@LrdY1VeoI?HFp~Xpi%%RZ?Q&7*w272&yJ8pPrLLd+-Ys`dMz? z*om60paKQD!5=ue16kSG-Z$s{f3m8bbxLjZ#jDN616wpqO}D?cU~1R7-R&jS(qv}? z(z>RG)caO<>&w#n=RWdx8Db0K^2o2eYlu9rVE0eFjg5@@FAcAY5?ZhzAgXn{>=Mcy zOz!XM$}7-INQ{5_^fH8u6Kq1g zab`{D+A^`8 z#~z-IazA9HqB;pk6KnK_r@O7{cLrGImKp!JoQn7{kQE^K5v^!l|f=Y6vZ6Wo3|L+H{O4QMPXbHm`g=2ntD_Fu&^SW?+J zIIxHwwt#u)gcI2P=s^Ygr&i&1GJcN_NT!nmGmC?&U_%2f7ue*Vij`4ZOzOFvTvzv! z(qL@sh}&x6mG9Oz41<*GS9ST(Y}F~CVdLUdu^{Ik_7BgF1YHhobmiqQXU>#X8_h|? zLrG-F@hGz_HGA*x9s~XVOl_r;6HxPTY+aoY_+shnuabKcf^ET0*L~AK8l$*9b7ns5 zR$mXY50OeZTT+0O_?_;~ig^K4kYs#bk^M$E5CDT8cGO#JeKt2QM8qV6{vs4rPUWz@ zT@h^=Z+i}W^%vgGM;HO^%T-*}Sze%%mMn?FhtlgPJ{A-;cYXrSorV`J$LlmzC^5ufV z*;?y`=DWOO&gC8IQraQaDOPq@zgg$ql^Ak<2Vd3u*@K{b2;A%U2-<@|8PjnosV2-F zNY19skxeSfI6hd9r;MVN!y#a`4NHDWSoM<@&|-fIL9z+Y{^q*e8zT(c_JbUx#aCKU z6@CGYs@!Ce!-=8|HlHYZ$yuD9{({RA#rqj@Au^$W*;DJ8LRsqthtF`Y#%;kSf&3qB zZEcA~1P}Km|8?*oc(U}D>IOO?$0rlN#>U&@V-!cnY9J$G(YU3fG#H0f-&~M8IP4DB z+0!B3?1NqV$_fRh_tGf^8xqp%V(UZgsV#He-4TfZI2YyR0WnMKeE;+3a42hDdiw9A ziShAeX>&7E1)MQ;BXCO-1e->=;BSLze%P?28LVDc(*nXmQ+Xhjuf^i3VCkz! zgOl?NXG+%)%OPW+%Tx{$uFV!cg{Pxby`uaK! zBrqu9c3o8T@2w+s5p8K6XyQ@>2>HU5&WJB!et5AM?@$r ze3$>@Y=^4ZE(|k_X8&`CxPU-OUwav4GlS*#h#u# zWIQ~>g*ouE1=ATQXlo0PE6gua2jSj14Mjy3C$W}e4mNV$-GyL6BP_Y3yNCo}+}|9C zutJ;Nj*epjj29pM7B1GP{v;(OWP5xHNDX`YlRQ3qzNsmtXw?UK0MPN@-+gvwVHmLeJt{|%;t#}!Q3$*D%? zeOapyGT=^WrAb&_IYBEB_$RM*I1c!_yShlYDSdmgpPn9Uwiup>!LB&FyD`N=Ub5QI zkY~GJSb39AwYz^iov`FnDTekY73LP+oJv%*rqJkR{tx!vGAhn&?G{ZZjRy&upuq_m z+#!$n9-PA6DclOz!a0lXz4s^Q`_8#{jC;ntKkgVky1Sq# zS?_uuna`Ya0d$hpt>3rCX6#RV*4L(Gw00(NYoOq#$!Afpu@7lUc)jbt>>D;&6nwA{ zoJYzF-qynz>?#3!`wFy8S(4k$iy3=@(b3Tsk5^VRDxKpBrflY} zrtDNy!nL%Olk|-tdI?TUIy?ok6j45spH99Jx{eV{wVw{qoo ze;_Cr`t0_@L;Di4$x*_|XK$Lx?j;5VS9v#e2UeTvxJSzDv%M!E*uTDm<gg^V&^UX5E z^jqYM2!BbLWXZYfzjMMSH(Z5vj%y*v{7PB9E`A?*P(?$Q)oK+a^`T_GmVGth2R_L_ z78ft?w4!%z4N1RD)(1jMSR%F3CgTq|xA`6~P_AU(w@C*1ZCe^GLnqcRAf-k@#v`Vc zy}kLR_6l!3n$S{y} z^%2qabaQnWaEYsO?JiMjA#`RtC60us-?uwgO<2#rVx(tf8-~N?Kvu!bzicQ!9u7eJ z5vo|LZB5%3V(=b=m6Z!jg=d>%u-NREQ6WLL$9&IzydwZhX3L+Qd79*U?Q|>PKAzOv zkCBqo!t)GUS6O?s%x5O^h!P$BlsYFa`iPBVWu>oBO`2vbyJF(v_wuY}e1vCjVqSlz za%oS3^G*H7$zKMv?Z;@S19J&poSz&tyZY=2N}_*7$JcNty*754o1_VzIS7thbuaQe z4k~o934{=p?bES^QpCB78~a8W?$aDat;C_JaV(7<_Vw?Uo+!LvDfboqgk(QP?gd?8 z7%?(h&!J=nIzLSX4WrzWDR>2`uBW>~LWj?t+tTL+)4U=Baf~LXo&C9a4|5Cf{)ZUwB=m2@}SLe9Otm$hPV>l8Vduq%b?#K;&RM-4Fju3I!Sx9 ze`1)tJ{11*(M8FpLfxkNECW+kVhpX|b`*YZNN?NCG^EsqHk6x<AYM<>lEvJn`}>sf^P9=^5O5u4_$Mo$A>$DKvZ0p8Z?@ z4~tPUcNCxBv_R#Q#`IUP-QZjAk+(k@yWNYlbxj0$BA%+Oe$FjhbHsk;dU;jk{_xpW zxZmi=>?u#XGKbRQ{4jVj z-%u|gA>oyH+}~7Cu@<2iMQuWF!-~gZr(g@I9cjNh-#@z8K9QQTQBhTuAto9w5U=?) zUg?hlNjcjs?!PN)@F5iLhHIj)6KEVkGnJK9d%@K%BR`?bZ*VrOj-s;Rc0ISN**BEr z9G6#%sX?QlV8Icsuj8v?HKS(s2){J%8}zJmMcA8--P+z3lJjnIl zoD#&%IqeOx(6O;{P0FizhhNfP-M!rzj2`FwqZ4e3QFb;*he{Ahz&|(26WC@1>;1(tYCCy2&5?rhS(+M1U=N<+Wi;OJhC9at+o_-h}bOcnY`=0AHsJr0_MfAK-CSS$!9*EvsGXMdO6>{6Z)3+9Ywf{l7dh}Ujb*XwX2G-E(y#S*8 zSigxNyTRGw&)I`u87ULVHcYb?DN6mS2Lv8-DQ|r~Op!*fZt}}>` zsbkNmvkttpFO$l`m#g*8bA*O^T;kRza;B~aNggdx=D=LZgWnTv2!Ebx_Gw4DmZx^T z{5~~8lAcI#aEuJiFde20)lSpz+ z8|wLlK1gPv?ks#TTd2n)@A#d1Zpy*MhD(;H&0NyT0MNe?#WMiFrKhFIB0tkZ!+ExS zBL_wLxF8*FULcJqi5w?vA6Ok7ZHSWe9tZhPEiY*ICW=6P!?Z&gY$9VW`PLs=g9Aed zx*QtBLy1EDfh8KruOo_lX*VySci{CZZ)l8-t$k1o{TQ|?oZIs4>KI??Qp_4dhO-;4 z6YTaxzLa~>q601%xMnuFU$|F)-CLH&3km8M6{m`BNH1XHyQsD3R!>7^QV^#o6YB zT(7jXBW^D8*0ci4!pZ&Hnd#}xj4UN?L5B4BBjtTY69nQJ7bmzg$AWYYcPOnWE-rpn zlOBO$JDQgosoLcSUY$1Y{%69KK*qjw7GI&73_4upJOTU$$mTr+Sq}@2GKO>-^K0uG zJ1rM_)u9v&FQnNOyh1)qD%*wQ?aCOv|3xU)s-PV64H@r7M_z!WlP|s|$J#LYa-bt_ zQTp^`-^6CDuAqRDJQFzSQ5@UJT0?V}?<`_iGMPDq1LUG%Ux(CSd3@tA9>TmCslS_Us;n}M9vs3@!mjYDMFLBkKcID;O z9jNHW>nqj?4BkI~zQr2%vw;=U&B1w~kL71TBb9YlL4geNk0817itWOJjG|N=nn>Q# z7L(!a3SzDXDnZ&^3~rtkdu*>u*K4h_k2}=gw_=8oKVcB38bv=rKWz#BIHEFYrBjT^c1a;X*n@Rq^7t@V$ zt#n3FfzytA!f0mX=Gt|vosz|#YE10XWmTjdva6k&4t-~`#T+- zq(3~}r8dm<Zv&x2x0@(V07@48i-Q^o9C1ns#3>tnK{X!|~;VB&fos2-`V zb9UPzKN?mv?bUn#Fv|II|JtMF0bG8B{I?%W?tiq0`L~B{_k}%Z1SPr+&`|~O^xrw} zCQcs0Z&gubUflX`k-IZhF3yVG@y_N?TEeA(Kzv($AG$$Gy=pW$&MW02kmco(-YO&X z6OOu@k%W+i($3(iR&94%ot>XOE#90D?w&W`1sT*zqGDojM3XZGJkO=CkamPJWp#FC z1{kAqbAMGlOB3nFWB{xNNWOF{bZTNmx6Tmiu5#_Nl#BStMK3>@!0-Ea98t@{1}xD* z-|saJJdemoXd*{^CjdlXkUiSsqXzsR)_Xa*5}I7cLf`rY3*g`%-8!RDGx++aES&X0 zPk%mTuQ(@~ED1L+b}3N*{JG}<>CWS5B`c(OF!d|6FNSGybTlHLQb7`(9oJHCaZB@vT!aB3yQ-Za|pjIJ|OROo4GX!fTFcTbswxfImbU!9E4 zrig{qku^B(gmh#Y@+Cnt{I3Izq!^i)sGdw$da{rkZnWX~hTS%BDSVG9hSobV)MuXR z?5KA6cp}yE%s>*CPEHAEMcaY`rTCm)CvbRWrhOGs@w!z#1)&Bt=)=#ar%hMqu(7$f zhmUYo8dq)L6Fu4A(CmV|;a_X&m9zWqy4FO=h!sE;mhnvgKmrpEh| zxGo(B=LYz_bY5HZj-;}SQBy~g4A6$4W3dGEhpntcVvwNC)S2Nuh^KaEonNyvxbK8A z98Dl(-;}bOeUhpgZ;y)$1vpkjS2A#!W9A^`tFhs4rGEw+?t30FgRgmz zY_+4om>n@O%BJi0UfUz?ED&Ni>rhQd#-n|`D2zkPj(9YwRGVx@1yW_b=uNtX)FA3+H1P4wSX@p&pzb<0a-38fX%@hoWM_>p?+_rmGfkG z>;k=nfS|jSqu0IH{MPRyMtp|Pr#*lywiKDOvWjD^-B1X!OELTPoMg+*`4ng);`(Rb zuFQ89sM$c1c(_t^h$4TPn6;4c2^sVfuz3@~LCF+Ji#WP{`nFpXBZWs0TuI+Bv=~6r zakRPF`eZd1YiQKMi|>)0?Z-ddr&LZJ(xCE}_+2oX7NZK>It&3Mj-+Is>t&^HBu>|D2 z%@$@Nx>tqWlgY7=+4P$BKN@SQ>W0Uixy|Q(ilC%d(xb!eonvXacTDVF9k_Ff@bhz% z*sAmK_laSQRd7D&%apDP?Cni*zu&sn2>r48xKH-Z(dH4i~j?*kV$e_KDh)1;&WlQ+Q=q!^0f-m z1$%q6LET!469boyk10-8S~#LY@T05MVH8k4U?Edx6b~gFId)_0p^*C_UTHJ4aIAb& zHmAly6^0+#Ih9iTJ|}Wyp<@jESx*y{4k>8gL|a2oro@3{21yK4ynw=eG) z4ahj((I~ISs_YI?N*76)p`b^ATAYQp;@68Ixx=yzCpW1%NFD`ZhO&mldD(?Xn zGJeiMXf-*`@?A8ozMhagGsR>m#rsx?3R`l|)Ad&#po+GxAG^6bWXS&Uuvugy@5%%F zpXZ(=`C_$*+}>3=Gway@`|Fi|J!GVyFfyQ3v+ZyNh-CEq^A*l|E*&!}3^7V-TZ)Rw zqo$RA=-%dCJ!wLc;8JT;>F@0=2Ricc?ctofp>nngHa1;4vQMI-6y&}iHjv3vuCI%< ztGI;7MYKiOz5oSMgjkT0V)Eo3tq^(m`wa9$n0Ql?kQMCIObHJ&DMn9SM`sLD-Y$$& zw)=U#iv%)c!)jpg7WN(BOEKN6CkUXl2i?b<)4jc>@;~|vx{2zF3E`Lu(42|sG^scv z$2lG!Kdkdh7X*?I{W{h|Pp?`O6Bn*AjT(FAYu$brD$?1A;1=doWbCc))QF>>c%M>D zv_k7W8-S@r_XQ>_<%VZs1{yt{W_VlwsZ?DW(dQ1dRDzThsij+D8w}wR9h+z{jFFE; zGC$p29d3_u^meTp)HR$wS5~lcv4!PRvLo8UXiS`^D&zn^Nix@3*JWQj^UcebzC3)+ zI0X2(xX?NrCf8n>n^sC($xV(kYii#@-HN;4WJn|=Bp!&aq0hM-W`E91OiZAo)mn?v zy!a9jur?8{k^6jNu7ytlD>gCs#6))F4$l2*+mRytMmq-nq9iq>pB#q%SBPi^ktjbO z))JERP@~nq>s5Ca!S!ET`{>SbA^l0=D1$Z+r|YTBRQ6e#K~66NJ(;j4m*Z${ec3CG z7VGDrAMG2uz7Y5-?o5!ttlH$}FjsLO*1yf&6|?&O$_*|h>6siI{=$jbJWTEEYg6w( zxd3GMBDYbYA{$VJyD#suL8XQWQ#emr z2!*deB8iY$>wHOLe?X`H1|8i|6p-0?Rgz=$E_D9@PH0qkf_kx$kvR6k(e0n^D~&R$ ztGQGzZd^5mOGF5m-&xI<$_BT`v3kOO*<`b*UwAt7dxp!q2pv-doeiyvg51d$n~)_S zlf-dJ#IH3Mq!0rn#cNr9s;beFl8~Y|iPp%%N6OgCFv^sZ5X>08~8~Qa$ecoOsW&ZAcH;x=1t??Rf4eJ$-r_ zE8PWPX2E)(pCfqxZt^bXt@%NpMX_{Mzgmg&?w#lS)~D*pB%si;5nHsG>w3qQ6;0ry zK0cup;l7z5xr)n@T9)>;IK*isUJO3$xe6u z=juNp_z#@_&z)Ss1^=Dm z4bs`vxV$i#V^M0UgqBoaMnWH!@In0q&7T;;UTlmlr9GKZBU3ot^4!F98se>3fj%Y9 z^3*;#>dw`~oc;F)t2vqp&lz;F5XkFzX1~AJ{#;s>4F$K0e^O9H9U*#w+<(*LvB8`B zH+q$KEGLfojwr$K&{cpcalm+H#vz%9>rLEqI*=QWeMh`WG2BkLhNgR#0K%X{yoby3 z(x>&}yx>Uu+uJFtyP0&K87%LETcl738V~66CR@nj0iPwpw6^E?M}(W`GOakQ%pSdX zY|RIZ#Bv$&ZXGP!^b)TRJLHW1zx~^4Gz>`nAAaz^>)Avfp7d`m-2W#ZlKak#{^7B!+te%MzJCL__CUc9 zDD?qI99#r+rH~K?LOS)$fak`}c3fP-8EpHgt|cW8_-0`MK1{0X$U6!JsqVw@*{02@ zx87v0UNJ8p*FOGQn$`Xl|833~FzWvL^-e94Mi$s7WwnD*u_-fv6Q&#BH8NV&V6F%B z9MK^NLKK9AgkWaf7wvVwH~xx=1dwyyjJ?&pVEG{l(UXf)1?mDowHPh?E&f4AX8|}? zg)YKpW@f4%%vc}Epum%ER(nQP4Z1vz&iAyazNfwc{vJ-}JI^S)6QA-fjFy3CaZo3+ z6jm8*7JIgkayFp;&{egmEpk9aI9iab-hog<7%+E#F^RfL*~&`IOIoaq<<*!TSa7ac@-Vci=MJDrP@?L3b;qe_iBDky}lg~ z{uK;xm`IR4+JM1R+mJ8NrsicmdHDLcDnn@Qr?3++!ag~(F*H?|SD*H{Z5MBwpWhuU zvS51PIljrrJ#}33Y`N7{R-X5`ZK$u`oiD4pyz&nf7ZF(o4YB3+1Idq2EbF8Vov4Q6 z4$*MTY0p^t{(Ky=`YIHsykfM*YJm~jVfZ?h@n$sj1Ngodw(Z8$^kDOQG%9mj%#;}r zfHO4g>d^N^#Kku^leC(UTqN;9Y{eGs`ZI*^#cORXtp-o`v9Kir03R=U@IR@kzNs16 zK3#B!55%(;{rzQLPTYEZ;)d(;^4bv1gDXTyAy8>g%aC_$GL#JD{04@m(|Hw9RgN(u z8SjgA;0BJ4G9DhH8E>Oofrte3WEN949O9b;Yf3*gB*FO}K|h*j{sK2R!ocX%((31vy-ZsBQfZ|~qF z20DhpM!y-}Iv$xx2(^t9nSFmSu-^b#cPv{bAsPeVE~(_or`O-Z37C&BZxFd_YAQ&$ z97+u#{TlY(bKXlAKR!NK?aWnGRiTixuvY+!y;5m9zG;*47~NgY{yw)NR}GSWaG2VWBMXb%S1u z5K!hJ-SJFseO%Tv<v-UTKTDYNiR;%$Okz9O{91CVJeMl#$WC=zr&uNPNF*cAOW6<0&8< z$z9*S0jM_Ud|nsZksZIfQN%F-3Fnt5L`&EHK><6Jq&1Z+D06o`Oa{m^R0cG@v9Xo2 zbp{qUKCwS5e>K#UuxP)Ik&UsHHa5xXhPJSuC6p+U()Ooti^omlS{CV;doS|W6lV!~ zV-q_(97ZsfBNH54cMCp2S_?)c7i*r4GbAcLes-xE>~kh5u@gWVO7G&Z8LO{ShWMRX zR8?{W2mhpzyNl?3hC&`4jZaFt?}Lb;T&`t6nQ>`vBAzH1b4Ks}`^(+VR1vvvA|DA2 z_74xl38&Gj0<8kot`WFCC@m>xociSE^4tq*ZYn(={!f%v+<#c9_1wt`fC(f*cKwA- z+siHYzv2jcE%!Gz+}O5qgMv;VVPk0~ZSF2Ei9&e5f4<1jUKBZDK$pjRf5v`OuhC_u zMQ_p3LQRTO;PARR{EzmOoU8{d?&bz?fHwN$1eG>co^KIJUmXX5h#4FlRKQ*BM#;^^ z7SHeO)G>2nHZEM927|DU(~kEYnPg?dXIuyre(!Hdd^%c{N45Wj=1UTQ4GqJYgt?i*WevB#K7JeiOHiS)<+s+1*pO&^89HYW| z*DOJ0XSWSv-@8r?b@i>aQ60!F!}m`8CJFD^(tm7-Ap$N%W8-LLNqzm%Rv&NRjmY@w zm4>-e^=M1QgG0mF4HtI};3&(f#n1~o(*MF*+2Idx>ydJl8K^rU__aMeF!3D=+hL_= zPfN{avEFTE`je={g2_(L>h3Nb_K!hv-ApKO7)-_jZZCy~_K+9rn*v?gmZ;yF5t89FV_!i z{qxA5lxOf`)v(ePr8lTjwy0KCFQV5VgDX~#IsXdzCK&n6ZO~uk^)$9p)-+hZw z6LxpMw#kvzxVcT=<9D)JJUY2{nusluk&=_+gM$onp`5#QDGF4kT^z!;D^yYDpX=ro zGP)&czWau)iHC|Kg%AiMZFc-v>Ozp}?dxL^)2S}oXY;(O@x_A8n(8P^JVkt~9T67x zE@Pw@8kNNFy*z)31~*vk@9)2OJcGHFHz&Z#`s01Z<HO8>l2g zN!Vwht#>gCEnfUq*)cT$ZEbUTF;%;xNId5*2CW3g7zzD;$ZrE8VnYN@<>k^co|8)( zX4~7eZ)JfKT3GC_#M`T?pQvWrpydH}nBt*HE~gigtKX=7!@#ZSgLI8a#+6xGdU%CC z(~=t=oxHrZh2^j!VY%xwpjC}6>NQ*4zR)yBhIIZt5tWIFiG=L}jLKxxN;FCgPm1Qe zoj}!Xw(17DQA8hBstWlhP(u$Obh@1Yihp4_HKuRf}_;q*8lRd+_Sd$El7}%l4 zMSapO%|k*s3A%+i_UtOFIpg~S?|!|DCN?X)?sMI6ZgQH)nW6+O`%q9M3`;AYdadp5 zPTe*lg51QJjRTxGb%bq*mL^iLj#oPSv}z7YWBYZR+~VV^Xnhk=f-by{%0c$c4k8qC z0#iaQ?vhE*pFmOYn^r^&9JV0g91698u5mP{oM&ePZ=>z0lF;Dbs_N*;icK^4K{qL{ zU7;j1S$j_Bc;!M-7A3Xaz_bMn~d61K@mG~fWa2#fs4AYqdMIzZ%Mpg#ckEV>Eb}MRd(5*3! z3aNIILVBD+Z^cw3Lo}tKv1~gD!ZJkZVS_-HecV1PHb7tvJ@1s-!PkG+z{o{nr|JckbOZDGQgOuP{?NnOrcm>vDQ6WNseF{PFo3oDNLQ7BbXQisqb9|9pHj*^#-%LL*yU<-9-M>DAHmdxzVa z>x{7HJ* zga?$40d!3{Ij6YzPT(wjd?!pP?PP<+e6D)0G|gwR5yFduzrVNVco=#MRs-DXpd|rt zj%eEJi?vtGG48uPp`i)qSKGPD4EDWfSTy%g|j zY6P1ILHGxA_xw==LUK|$Bc|TO7c%1F4cUI~`yPh03{v?M(J9rob@K}iPL)lvCNavu_R`orw4WZ)IM#B{d;17jU9){%pdiINGFYtKYKNG;Cr);=d9>J$zj z_r0lf>>g@x+S!JI1iP`jwl>jHl9W_r_*}6Ju;FQGyEx%1OMib5EP!HFa)N~Hy%g#b z5`rP*(iqJE0j(*=Y}{C@z3~t@*&+G^YDPM5Y4ZBFUnMB!_?W9q$sa9!781K8uh*emuYrY$q(=7TQz&38ui z*KpnbTW}*ln}}oC%ENoM~f&pOa{|x$e zNPrCE^N7j9ZSapOzu6eltlxwv%A264ix`D(r;~M=E{9VO5V}r&YeHujJDa? zF`vR_r1|FeXMm#|22{+oI3^q*i5lt- znOqBC&JHk1*b#@dHFHpl-rCyM8>@ z7Ze=KUH63&aRcQNaCGsi`P>ZLlP0tPG6M=RXtRAyZEZ(KW>iYb5cp_HixyPA0zja1 z9inrDf}+hlG&-t(tfq$;LVEd!D&k+KpS&51tmj^j{Ib&nE@mn{pB6tjQ_}0pSAcj> zFUH4faEaH*VEpyW+&~k#sH@uunyL9qZKc+K0C+C4=->|@jsM3(cmDMdPWdE{v8cKH zK=-}2(|HD{c9pIt@pWXHvRzHL@~a$7!QUQ=EPEM7op0IAF1s#g)vYV8*VAa~?Goz? z|IYuu^00>ZUmE2d7lfm3HY?>3@Urhow$|p>pZrDlU_x1BQC4u>7W3Z}mxy+eh1Iio zuXp*nu0*sLC%x*Y51(ou;AaI4Zr7xf^Aw>IG!v$)G*$)Mx<i7!xsZhkNmpu;*|oOHMSzH_&3QpMPd4mZA-s8!3}{ zj+ZbH4|rBx%BDX91M^Q5)DrUSABt77eSQUn(2{J)W|grGhwX)<^Kkzr+FHJAC&-8X zwBE>!Wc0gcxrGfIJG(vx`sRD%t1G64$9@;AaZmG50S`0n837o&6yz;yYQ~15JRi+= zENHxG3!XdwNqXcuU6%_^Vhjo~21Fdd1q#wyUneMDXtakj;dA$Yc4kV;g&T#I+F`sw#Jwe3{*hfy)<)){}Ac}{f zZKA0tx3;ig@w+(dmu|7rMzZPa@m^~L^_{Q<8gjLeknGI#>8Od%^`^gF$)I&)NDQqv zHchQD8yIEUi2>ZF`Ia%!ZSf&AyUTHj3Fec)COD1beUzXWV8e+Q5^a}eg`<^p33h-(5Zl*6MG z(|=&&^Ry453mB$FzaWk24hoV(C1#CnH{LO|KtF;vd&+guIX0{uUBFjJLokVpv%5w{ z$DhMCNv>ap!wx@r*nRx{5hJ0fAY)H&(<4n9kXt|V00%+NRJ{W*(nGz90iIPJh^L>1 zw^27JN)q2^oWXZHKfcyZ+yyj2cQq404_Yyd(UZ@W?gw`cy5CL@eSVYY4(-%v-jp;~ z`(R&S1_T;c7E5n?UeVmh9iOjSW2JBR!OUz1&cH2igYfv1tz=$vaY@ zA_P~01840!{RcLd%596*5kvpth6wyfG32;L=h_Mz0tDCPy{&1pNLs*7Qm~Qp*Q+Hu z`RzR{Y_eotJO9L+Bt_T)^~|$&$_7e9(^orL_$4};Ch0u`J#!jcUE|GTPaPfV*=I~l zGBlB8u6v4{oU#iTXsAIygP)?1BYf{Xz>{mbWw55OXGTw^1o?{{gj2kAUWklN4p)Wk zc@_SlFE>V4R(IovP}ivEapp5kP1WIk^%&ju5edre5fRQqV|vpw4)`%V{IftQ5aofD zEl-y@vaKuvr0WvXmvHpZ0sXo<9>k=;B|BH6b-d+Gmb25akaxQ6#mpfhIh6SzmE;!y zN?!^_XlAcY63I7NvGLD!SqHt$I!ziiO#bZ~cCOUa2ZY1kPc}xEc>lRvy~ENrE5&K! zJMAZw#??A{I;wA*&~ml{!-+Cn*{9nXxOL8{i;Fv6Q1`ZhikOE}X&6CT#A@&Yx znE68}u%)2#7=#x%-8=Pkjuij#4D3vhUoZFl$<%D7_hE*@sWvu7L?NWI86(lf&_sk}>YS>@U8 zbAA`V(B0v>zv-K-B6E50{`d_?Q%SmgRG{K)tUcq*Ldnd3J)$KVkmqR;RGh6lCcxn^ zA><*zYh!=r;3#zSAUytZ^8N5xUSYmwwQ(Py+dn7_{u+?vBmd**uzv``s{W%i`=1Y6 z?ajX^r$d_b|H%c2R`nJb$^#Y47kuCAa24<=wJpHgn2LayFtu8+-SQ`?iu|X^BU=e{ z@FZoVX1&~WdZ~QO0hCC_qr`DXy}RCEl#>o>|IP1exN4A{<&C7+Jo{+CF=b$e^syvX zZTTCcT?#hZP=Uwo5-WD0%0o2y|_!*-l^F| zeZJCd$d*Zui;E9NnjTk-McIB9W}k#;K1w7^76F0^xAh#mTgT?7&2#__G4aI%b;w84 zR2FM7mBXWboEMJZAXKZaUo1eoV!hB*l9$J7cGEMciht}z;|rMfWN1Q>7j$AW!K>V* zEwysYp#&aRmf9ZJfQvk`V3pg#?Q>LOs%LC$vv5Wf)13g8E6wXk60s!;Ib5I2FR4LU zS9hef@wTJvkFNKKXXkGb7XN*AD=9AKbz);Y8UZ|HU}<}eC2T_&{2n=6qqu**^GVU) zDfk%lXic?1m8IsvosjRnqRbQ1ck*I5#+;f{@8B+Ff}b;vb&~-16*QqH!@vgmL!;Uh z|BP!(`5gdK0g;4Whz*cq5SBgC0^Od)FkMczHsJV(h4RMzdUoAAGo-1@Sq3T(kZv3u zD~lNUsD#`UYuZ5d;)m##Fv+-3?xg{I3G}*U71yIwR7%Ph3pJWQ0y3jRWmV{(-#>5` z7UlzO*&J8l*4UiESV+^J%-sHbBdj8M!3XfW=T87*7*r5IFsBE+@lS7&Rxo@-DF6z^ zU8GxXzI_AK3NT&ay^q%Qb`SxsgevzPKJcBMiMj}QO%`w$#0)N0FC)Eu(v;Df)_eL^ zCk3E&bKJ$JyX&&Zyo4Uv<@x4)^+pBJ{q9&P9%o%T`SFd%ZkxI>{b#$dl?yIz7VeTS zSQNOZtE4n%4$exi^^CG<*o`~g#|CD|uLtJ7wNZ!$NKm={=SK`%$)%|0$(@IB)-FMpc%uJ(B!N`S2nnRz>7@(3*ozdO9`ZeY>}}a5p<1 zOEp^mYfNlpau7K|Wu}Txvc{=qY>uk0TFMRhPsDpgt1F;C+*RV)t%c>;HsJJpIdV(&WiC%yZp z&=nzGe`VoXE~>QQt^4rUN;YQZS1R)0j)_8va$D$Y-;(R#+wu%(GDgd1?v1basou?_YVGT!7dsa>8cMk~olRaRT&x;hRU3$5Qx$(F zZ8}CaE;cG(5R;V7z#J@2x@)6KYGRxx_(jbhxANqGaxXt)uIu%+xw!b-arVSa@3$d> z%$6Q$39oXyBkfMxN&YIt?%j`b>%${q^NrttjP1lk#%x#_?9cXpm)J2s|1T5!X@$AqBvqp;UHBzx6GGC*i1 zbiWk7l$}8LF#89!)BlBHKr#o{S%0OlLA`8-(N_MMK*Ll~F!^&PtO zn%G~&02~)im1$HrQZgQ(5@FJ8_FAnL1Om-_B_TJS;P+bfZYL{IL_vXp*YItX8ZGdV zfUMJkYwu^hof34o_mpyh>T_&7;bsGwmv+;qhJwi3FZbfqC5>hvkhmu#u()>rh#mKc ziqrHlIN#bhUfZ^ZTQiSq3F#ejaktpA10LDNw?%#hGjJS_sWlkTpTra|R2u&POs2n3 z-?KNmxiEUEf|A{am}fCbw_8l)9plYaVrohyW~7Am=1e4n9>?^cAk}S-i%gjMf@J&T z(Qp5ULv7=~zoFBvwM`A;4?;V9|}{|#Ts|Ii7y z0~JDG!P?p96WM;CT+rQY#EV&5Cm7T`eOvMUh7`(;9WHS?H4=G(UovxYy~xG@1eeL7 z^^*>Nc*!5D`t+?s5?I#T`!#K!uN1MF95wUTOBz#=p04sPB}{rd>OM++3N{1%)w{L^ zZ#^LZMNr@doX%~>@>ZpN_+a06fI!{5vkY<~AOKp6cXN4{4iu-B^3ZSrQO6?Wx~}@~ z&RN(+dmw1Q_|=_jJtn(F=cjR^HTO%oeep+MXne0_m6f}ErXp-6DtUF>oEtsYJ{_PG z4>s$RW7~I3G#YYxM@DMtDjeN%k4@Rk;Jxk$g&0bx(9toX2G?GkYG}%!PmQ*D0O1e7 z%t5nkJzs5d8ZZR3V?ZUO>A;b|!}WXkjoy4<{?h6KEgKAs7iR$hucL!{zTRC=Ny%XJ zB0Q;xaqUbRIWNCh2;YO|NFgwuu-oRNw{40xDa*y_Ozi~~e&kF>!<@Xg4dSZa2vEi? zI4=c&OW$ahp|%KZns4|=i>@qS!F{03aXnYm;I(?}Qh|T_dfX;8(x*uIJLokP!r>>o zwm^FHg}fOg`5lrP>&XAIrDsEn(x7|wUsNqCOMo99swgY2O-Ijc2Dq%5C>cPaplfU_ zH8|UFZ{kP^VWEpie4HfP;!0~glddryAd*9oZ(-g{%&kb=p5$&jWi3{60kGopj=ayz zF`MkECEs3C`B3?GbaW!62r*!xy2H1)JW4~?{@l^|Y-9{3mN3DHtoo?*H9*+qup6RR zQrd{85m)x9_D~s(%Opk^-BPAclf`h60NV50NKsAK6|IniHctR!w$Y zIq(h2d1{vmD~|`&T0&|tph?de-TEP!Kd03Oy(W+Ie=Gn+^zM3bL57vl2>H=SWIf)X zxDGqV@LZ+wcJx^vJww4ApHl>VNnt+F+!_xYBWQVRr)3m*Qqd{rfBIkcS|-5RIZn_#d!CyNBG)jL$|d=eTY_aqG-+q1OjMjH-j7 z3;^leG`dy=Wi0G9l(CsGv13DC)$;Niwzz7^tH0BU_x`)~u}cN<-o_pnR-@*IM%VgF zf|JZ}{mD6lfQlNu0KY`1`Ss<|n3S50q;-*VYgA%5u4{L~&!0$EPWDi*$ zpo6gtu>FvhI{~lOKHDL~gzZT+s{qeQ`z~scp`ThN+ zC~2rS%lOfE;QB`R^mX!zewgRW;1h6J02zFo#yy`_e=69hnhLf*-n=B}1j@%O^aC8m6D~)8LPmiEZsz!XH)JS%7E?60fTC51PpjVG{^AD>VM+K{2&gPHfk&YVp zK?)kxFs%{ye0#^-qFf!laji$6)v=0G=I5!-ZegHQA6k%90-vHOkG8m~!rq>ia9y-) zlX3YACtX!yne)M)oytEdQqI(zaAW57ZVlKOCV=0Lpz^!Oo- z4o&Ilqr-3H)YQc3a23}X@s)1mQ2v5g{;j_2m?GHXsINte69hI-$YK;n)MjtnX9>WW ze*&cU{*GFCH53&3tO+}@CaAUIgg?f|9;FSlgD ztN|=%pbG=>2EMgVQ{dc>0M?aTlhe*JAMCm$yp>XN3I?}GcYH$Llen;k4<(C@GSbnuMRk9yofT$fN#=~8 z{sr;mT}$L%X==tx(-@r0W`S)=?GGZ|%b$g$*YnrBGV{-qePLdVfhKVXfQDV{6ui5R*T4L8$?yBl|eS^--q7kh$uZWYV3d zl@?rj)RvVDB4kIq@Lbn7b4z50~1I!gK-Jy1bq7yVd<&3#KI$8{(f* z0EHqw0X88Mk9}oRGQZRA(lufV*>DM+elR;-F<$16?~NiZBUjo(r;$4heqH z2=xPTU@rcCkL#FX6TmFC9EW;`Q& z_Do?xgW&~=PwQuUTOLyE?1GGi>Z+d=@BUM*t3>mZl`n~u(6%hw4^+~OyV}2i#ljH{ zHNlOi$@srkZ|Nm&WZn1&Cv|6Gz;5&r|CZq7boh0Bji8F1)w20+u9^*)2$?tEiMa9r zyyoe^Da}6N)m$c^JT6~819OQ0ZiJHB=Zz~A*F5^k3?h?7Di^S@u`E&nN`=TAQ}`ck)hQm{v<+PZX?HM@q~n5|M0oL zxPE7KxwQxx*#Ja33;6!f+>LLU?SNr|4ZO^LHsI@dR(ZLRtzVJiElfK{Iqy`NEz9BxVtU{pf}g=G6gyblOUgPSuOUhp3GI5-JW%@ zD%YJB?!1f8d%3!38*0t0<+M-4Ij;x(44(HO1atkSVf$Pk0DM3jplUU(tD>_|(J=Rh zWvJ~w<+-X|>rRrw!ZRXosy?FiC%ZF<#J<1krHVZK9pRKIEG`KNi<#^`m__;d@B8Gh zR#Q=cjma^ZRD6lIJgL{gyR2pB!&Hch+EhRAs~C%?uIIa`#`^93ZglJ^kyHiZqNySa zX=qAB^13P0>I<#IuK+svP(cQc(jENCaJ_HTVPqogCWXveWn(omF>Vp>?^moTC61Jm z9N60%6k{_x=Om(te5lv9i5AcDDsw;BVmbpW4FaY>j-agfA%I(L(=D~Ud5O!ccOCh6 z4PW^H0S;qWyC8$s>)LC_JbFM2vpbB=ugzE&EuzAHCrsfy~HT~Bdzh&^;r7vHb9PJt{CHkVxX$s&_i zg5PVjlS>N+Y-$=4!rPj|pEgPSiO6PV+ zT#8hHUM2chlp6EZZh^@U*o>B`l{iawH-VFGCF0kmX-LJMvK~da_4WFYNnUCeoIpVS z(IGfgW;;DfiohKmCf5?+(GH{Tjrrt;4r{U7Uily0y=PEV-Mc-A`U(h=5k!(mmLwn` zISUdc=O7?CNT!J@AR-8oCFhLf*w7$3=Y}RDvB^ztGP8Yu_fGw1=FW$ysrfQh7Sc`i z>2vnk=ZR~rhfCZDKFTc>_V??f>BqOzQdp0vkSe{8@@ik7-h+-Zf)mxr;(1x~!;Nub ze(+q~Md1<)_t*HyQxT6tCE*FAiy&mP_=_8LSm;Iy)WZyW!M`@xLK0duTT3gmvL6FJUw z*>VvhVlso<#nd?O{U-L|lbYJry@>f7^quPq>x(-hFYophOa|0(^eiHe&vR@@q_0B= z#@)!0%#3g6Yb&zvMWl=57Z)Gh%$AubE4O%^Cp9-O0LG{fRH*p+0s}*cb^zRz^Fqd= zut=vTy;IQgLW-N@$|2PiRUTZINZswd6JVs14IPvtBdKgev!=nNfN<5%;f2 zaKuYe4%(Mms@KqDbm=CR#P};VKJ0(M7?sNtwkxo*#L0OsK%55XPh46;KBl9;+&ZA% zA^iHg;^=)tUUyQB9>Op%+<1C$8(9i<^Pqw+N)pOduKuX#O?F=G!G5t*DNkr;_pTkn zkCWR&AVgAkubL(}8HaJx`Q6P}0s;B!pRTUgkqZ5>jd@Cs`&V2bB6~m8Zte%$9uBdR zbRBvbawhOT?f5`ZmM)%r>TppX4E{4Sg=w@+pf2_o&N$YNoFenpf-0a)E}q zGl%tBK%uX^Pfi#MiK^YY$3j1fILV2?GA+7>PJp=1p2_m9 z)ne>^oYn-Ed8DX$b0)k9k00VEdL1wGOw^NG zPmwE0CB1t^fnh8u2^#-UE#^Z1OV(Q8Bme=}W!d~w4cDPGNH&k}wP-Du~418Z^mhaFp*D$hYRUd1G~yeR6pJLY7!dR68hER zUkM)n=(W(BhVhskE#P|ey?`)Y%Wit zgFtfKI&8A-UUD+8-Qmr>iu8aJzU0nBS}}XgjC7X-U>Q7tB=671L{b+g?&6U3yMD9w zE1!7tWjZ^!jB28?SUh!*f>n7el;KmfN7I$=K(4wfPx)+jxMw}JncK%(MsvWbe{yqk zQ-w+Zno;nRu+5AIIgnC`lGtf&?`8^$fI1)5<{7_C1sWeq9nRUHwM{G}^nzi^%Z-IK7ON$aTAYzhO)KcZe-m@s1{Y*xsb^-*MFt-bE_D3Pcv2p(p>i(gekl;yDQ zVsNRbwBA#6B{7%2_ONZKZO&|}?3x&@O`QpeZ})wdu+H7*{(kH--_x*Hk%P4tNZ?LE zre66>-*4IeWfgAqqqgy0NCeO0@CTXMe`5tsA>kQMHyKrQ!7;a=Bm;&UwKr4*xUd-x zF49m&Z?FB6{yRs(7}R-1P)n2JrOSr%pdZGLoUWG2nI@DcW5n3OCZ!86t=3oR0x{h{ z486bnmNd>;z{zy+R9{A+e}HBRp>;xZF{1WwGyS)Q<^)^|acD#Z6-URr;?Vp|evBH@5LtImN?d9h9n}y-t#E9vdZGjaStuic0$T}(643A5aKQ|Gk@(jI zt(EJs4;Z+E>h{R%XBC?4kc(|L05ITHVKgTA6;^W?|t?F!bAGsvkEXXe`dWn1_^@k&)_Bnm;c5BDCISC>YN)ZcyaHiB$cYX zWwYINwPjEjjFtj`03A}2{EI7h)o`jlyQ90?k}pEhLggZ{lyQf4!L-a`|H z)nFsUE^mYQ;Dw@Mu*hwzNlOGVfmszU6ef;!1K6o$s7J(6_w^!#RJ?K=^ei zrDbYVt!YPJSOEwTn3Ne_ob=_Uv+MV)xoixZ_}@7Dpm8y{=x`uQVZoOw(1NCIRgq-P z?jOiKq??UX(&C(CTIQZCMP%&6=Lu@#i~15t7O#N4&$P9>IF!5qj>1>?R!hrI6MB?G> zi@J)vkqZ$BI31`CH$bR6ZES50r3kfl_EtdTY_a6}O>LbFFQ@q^7z4yBT zOQ^WeHlYd^*FR?qfy^hN#%ZQ2whP(mgTTRUx^SBiUzOHveLCjF9ZpeoarSWYbY*?+ z|J#iF*Dv-5bay}PEA*ZG`Arn`gPvK1g5t?Q`ejl&YNVLe#&d6;cAZcDDPdZR+cdmm z^<xK47N4w6qk0ZHyv5QZPT$TQe8Ft>acWr-b=&XkN7&lh z8l_NgUJzHT1_nEM;~k6mAHHk>3I?jY{QOjZMg+_*2 z-TPjK=Jf3!iNyL;#(5l7QeUdbh2)pz3oyNUy0X68by2sc^pLWB#pU}$Jk2T+j->9w z!fPg7cI_W6Tw%RAjYB<6qRw-VX%g(LO$m9PKV7@Ps|h}?c!+6UkA6WGwl<0|%6$9q zaHre!g~$aIP!a7OR!-}H(o2oNLR*!_m_Uie&#%<tlNEui{G=BPQCiB7jk zoeeIGH9>=~#vLRVMedH43xck6Z=Mn+B|fHnLh+o75Oe_g&`i$LhKX090(twCPgoS* zSy~pA*xTEKsTH}K1==TLBTq9}`q~DE6bxwf@!c|aCcXsD7a&BtrEGXr?Jd9}t4bk~W4mZOU25ARE#OJFg*D}r(6*8~>A z4#?6{qvNZ*o-6wuc+Clz5P*R#W100UfYg>rNAFPbtGfCKo;gWlRs5O~627MW9i0dWk@LNx12wk9LY3{;La};2QB^1&%1?$nwVN&P=ps1*$VwE+M0<^`8*S&KHGdM{qrFh^u>`Hr>(7> z^q8WM!`?uCP_$oXvZ%@@zG`GFA*?DJ{7cE=Gwzt z-uE@7ZU{R}7uQ7;93&K5S#veS3f=nH?oBMu6?al}R~ddeeNjC!&bNF%?Boq2ZE2=! zDKE%R4y(*@qD2Fqe1RBtOco1f%o}n2N+@*Qx~-7xb?4d#5F}HQ1cWb+JdIK?H;bft zBM;YXsDbT!&57+f%BiLhhcN;i#7=O3p9+@Oaj0H=_XbgUAq>!=%7|6 zRAg{Jxe7~&p7>|rZ-lJ>i`O`52H`J%>+feC$t2I9?l0ZmJC1~5qIC=kV5#vw@nt)O zR{25-!!Be=7v9Hb2VYRNpe6Z&;$hp=)FN|jymvq5gD%Vh z0(usWC-c6wef|+LwV#_gJYo!}&4@Ub*0I}j)uzzkLr}q=9&1Na5is4?1 z&YjuW>Av@sb4_Tdh4>(@UyLHHC zfutMnjWc~YILEWKtIbTH&|szt7lnGXqoGhCy4FvO1W%m$(s;Pp_jKDX2E|!PW5crB zW8b`UJBNp6f<(foamh#2Xg>6vIiSSBa{wbZ@W-FusDK$kp5Jv&DC4Ay33xM^2Gf_W zE?Seu%>a9*exHpDqUMDpob)iO^S(51kD_eS7j0<0At?uw`I28SOuQ+mYn>(&%F^MH znEAIEf4;gxv9#Jw)|lS@J~jjY*BBYpVZjed$cuiVgg>cd;(^eaMbTX*A>QRg*mTmh6Y*Ed13tdw3^8Q4Z+_c@ zo5^v8m!)$sFEhbc6S5Mq_6VfBhAC9}Dmc76FE=(az<1-3#n@z&Ie)o3^Wad*nm$Tb zL3{;h-v2pYb{6zXaSxF&#&%#%&>${UQc)w7T|$B|FztSzykU}n$H2r_cQzM=3ZSJeHRxWj4P9fmXQX%G7QORKDY$#pR^^X*LRPue)@|iv5mA6HV5mmZF zm!$A4-Bu~%^9$1$y)A(6?eEo@8G*<3laHyF<>VPIT#U!NBDs8P%xX?Aekof3EG#s3 zD4v|@Z%8SqvGG5Il-9OOQ){2SKgANd@a7+?_-kE;%&o=7i>W9mXmf;q6SKCknEH~( z&dyO%!VZjN$mIq5`Epfz#R11Fu#yH1mFX{Tz+u=XbJKbFP{707zyq$1V{+?;Ms@(+RoyNY+? z1hbfYA{HoL3XHw@AQySi5>UQLCE72~CD5oE`RapEx5HLC6TPSM#g4U2?jOO_Mcf*P z%Ls>A&r-vRow>x0Tt%_P!F_ARMD3Fhb3P*5yYBfux|F`J%q5)lu1lrsXyXN_F8IS2F6$NQ_v&IP zS{=J%a3dHW`BtAx9bZ)Jx^@j0ncTJ(C4UQ8@Me#auXUU~KrD!3;vF*t9dEp2CjG{5 ze|0(^jCyG!$sTWi3qf2sO-9gAD`6)(h_eX@IQ0`4$YI_u+I8M2r>m{44Z-i^{3#wu zNKD~wx&`kQ;nb-a5&)y8K9oDX+b3lt4`Xbl54=Gg-P%TW!#jeE{U(&D(eUxISoV|ZiIpIi>RH7=DihhL zF;`8j2OGnFot8d0*t9ZtGMC4G)2Ng7Ay>YkPLk#O^vj{np|ilmYii~j=Tqp#W^Y34 z=$SOtUJELt$?tNn5ykN=Xcb8gM<9m19ZFpiK4;08RVYoq%;jWfUp+dP4)J1D`~o`a z*OxT^mb2gX5*6!(XQRER?@I{Wy5u7<7j-$_^_56ZZX|BW5E`wt%OGA5`a15^iL z`YAp&uU5R``$uTLkauCDpz;X0|x{)}A-Je z?Zost?%=NS`t>UtSTL!-DxOd;wEv3uv%DP5sF*-N zyI1Ahj!?D*sR4TNa=2(>`{6O(+`Nx*Q*8AmTHJs7r0Vpvz1?ciWFJ4QGeyKEE8dot z>jpkG~tMj43P>_*}g=MaMY4*>br%W-0j5J`vl9asf)#yiz05H&NG7>mT z39HHJL#Yen7*NEhI~Da}e18?TNdPgNEaj4WvMI1|&$%uG8gSO!jy$aOqbX?jF}sF$ zPM&EyuH_6zc%4>%ZTwNzZ|>O)-_Irxf5Fec0Nq7qWto8iNj4hHeiw_KNw!-X8@@Fz zCoA3WOF4&TYi}|(^GFzPiTo!gwWXVyKykfVvwx_UkC$(v8ZnDVCj{&#FuwkEB#v>d zedwu|y+dO_3uFat;BVM$=I%YCB`OMw|NbB2Cb$@>giQqhrh=-EPS976)>FW)I4XBO zt;F?57!2#mIb5UAxd8_nW7ScdQ6}QfE9L0V8{6o<>}CpKzMkNfDrMCWBOebsItKd2 z;HmCN1mtd zHj{w2Fs#8;*T4Tu{D+SsLH}Pbg^;ecf8RHjt#Q8^Xq*;=1m~^+J!VJk_|lgJFSGzw7%U@}OS%6i0Tse#Pnx@ALht{1=J4KKD)Y2XPH9 z|7E>=#CJZMvZ1DNvM*1M7vh#92E{k2&tK~77*ct;20$<}gZ=|NKL+3c#Z5$U%aOxG zLt5Xa8)+fniAj&&FpN30?D|+OJiK@9;Tvkl+(dhRnmG4s=`x8KXs*n3Ux8nFRM*^O z47pOPt0_HBIiFRW6$U5a+rL>m-9K~IlNj0Hr;^8N`rm__;-O$ig>$Drf8GHJ!ACg3 z4qw5}gjT|jl@>Ga@i7Lo3h)qgF%nAE8xCdM_>DQu+aXMWn`ZgHE34UEU30|u41V?m zMgz}Zw6d2oVwis=BXyUMuR5ZpM$4>il%JO7kzaZ5ONg4*Dj=Bb? z)3r@MP}XVIuh93oj_At)Y@6J;7@gIV0#N}uq#)-Eki_5Fm|*S*k~%0jPX(g(*7Ul}rl& zqniXS4OghM4m%qGD^=PuU-|Eeh0YM!OG~Cy4z7X58wq!f|1QlvVbt;Z0<|m3dwyua z5A=A$1nC$KSFb%H(C_Pz!?2rA*@ko8SpR&F_ z2|B(P)8yBpA@vPD1Acyz{{DB2O5d{7IxKR-eS)g&Q2T;MoW@G(Dn*5&GVXM<3!@yH zE-n%y)&ic92+I~@L&HOO%o7qG+W?Ddmzb=Adsya{LqAoV#vEt_y?uWUe`qB?d-m7ZiN~#TVFToXVI0+k(3kj zT?%?Jl8;Fznup(Qf-us5i^N8-!|7hz|GK94g_<5V6JWZ}2G>wM8*Iv|dJj&HLnJ2&n#(#@X>Ub`y{ zuC~FYv(nXyIDzxrw?ERrbLUFdVURXpruG_{TCC&metO({euU(>_;8R|g-p^hI9^)b zNtqK3xbi;iAi_^LI$%y8UAvt<94|HTC^M)!JT6=@?+yaPXU6hrvSifYrA95+$L(lt zEc)VNyJlVJP9c&{_^O8F!2`aU?*TDJO|cBt){lAD7jem0zs6rr$>W zFR>q%#V~ElbDea9DITz89P_$f*SMb?BR5H;_ZEh)A?TZ|XgPX0FSK)j8F41Gc4z=z zZxpy`57b${y)R0>*Y5pbyMtga_Px;n!KKLWw$bXW3@C&zcj^f8tU?5iXq|1(%ZK$| zXC<*E<}T3i58CaCrk$KZ$3;u<#8S93>P!3)nX?4_l=yy>uTg%6jD~1~zHrmJmEQZ^ z(Kuo=zI5K#Q>TI}Rug5nrW4BdWk+clhJp~^*@R%q}|*TMAq<>Vcp+FbK?*M2eIfb%{l= z5S{kZpXs2$r0z^IKj)&xlEd=zyN<>p01wP&0FDA(oP09ZsF2XBCyyT+D!$Q*&&e@H zA%?Tx3|^wE#(5oY4lcQHZ;!w13ZVX4_G={) z|JVT~FEs0$`F|;_1*B6F!$j!3A$RFkVd7SxpZ!vt|2cOuA&)~&m@B#~OsLE%F7*xT zbimQs){qFAWCg}oJYg;vjG>CZ^a-x_O>o#K4zsHq`M$GQ!v!^cm`sy2!8qG_ugM1)9 zWv5;Cwy`d&>2v>DA1ef?pnkzy#KgklPE_K!XXfx;7CSUj{0ZS7CkKbzT9D;!*uJ6~ zGH}hK7V@^;F1z#%@$#sut*)qz?O)4%|A>G#jxj&4QBZgwg=)sPcdr4IQ|SE4db6&p z3@&M!qIqsQk3&Q_?GOp{-;XJsBi+k~V44 z&CJY<_yD<=YvNzyzCBEHEwT_0u!Outcr6}O=9&Q2EkJ550ucFbFb-2 z#u==R$=XYFvVecfTK5{8c7DFm#JF9zC&e9%-)vy8S~I`9p|XSD`uru5D_?}O*rM_$ zfBd>5X9TK+!qGb8)~szK1trH6gl#MPKR4e?vTJY9mt!qwtTr?92|Z=$_0Cg1lE)`L zYif((sZUnh4yN<++e<|oe-K7T86AwSAKB=w@mqQ?`u=IO*j~#T^R_v}I(D^F zB!%xkqk!SQj8e#@Qd!yM%2!D}A8w>wwOkzaH>mJ138*?aO%=X8-GlgZgTkSkODaEC zkWSBGnf82x54xZ676BCQQc{|<>?TikHfzlrlju!RoT{KxY(7&mxlLRj2zf|-gKm}gxy&Q~0zUAO$zkxXcn?N~ z>!$s`qgvoq-Toc} zV^@VeDy88ABXdhZ+Tzog-UoE{{IeqxE%{;XJwyv2SF@0zNYtaKLp>7rvarrTZSA}e z`dybQWW<;bHoxIjOOMPb*NDTZPPwaeRaBzVdaFOT1q3ZU+0Jc-(5 zmhT^Fk;>{B=rxIYJ_+mej-VDb0g&jw_=s5&NPYR)l1A}~o3pRORy}eo`z_12uMun< z#T$<1e6EMOp!nZclmtR(sJH*0{mh$YH+)*r#CZQ=$*1L& z<=DsQ2ggVL#@~^TNFC1nFKbbgu+{!^aE1GGsj3RB>^5rZ@{I|po}w$KfA09r&Y8O_ z@22%kLA{%+%p>;;S2PpCccHU{QqPO+X6DXtM-HaPPEF`nUC!I?yDBM#yBy-6X}`wF zGtkjr3kz|A<9Y=H2Lcw)zy}^WPJW4YcA9llmwkVdu2yk{`KhsZCH#$f;sCSuds-21 zC2TNP)mFNnO9`utJ|RxW@;$Pd&ndn*EIYU%5&Z*zks`P_A@B+{u%y3>_c}Heiv-l_ z1%*q_uKbv>geQasaRE*cZ<>K_^_|VMQ^5706XCIoYZ|vriOe%C*kEpH8m%is6yfsT z*3=}4H<6H6Gr&<1N);8^0W9HW^wNTHJM0!lb2QhvI*yEaUTn)gpcHs71nUekUffQ3 zi#`e8NO5G_Hi62T(XYZ^t{d+tS5f0l<52IL%rg=I3T7k@ zO%5Bk8)w!x&@a$_3n0f5_7K@zX@bW4t^oD(h)VgDhK9lRNW0^nod$GP*De%TuNa*V zEMl1eLN#cK-rE$ink1FJ=f|;To1LYKoa z_d^4K`}TcoV)R`2^ry^oJWAf^&I?aVx9w6-ea$HQjzg-aOEe8=l_CMSF*RMWEEdKo)1g|O0 zfBSU)5@1gG;_SX{^@NUF4KWX<^1YYZu;veYMB)i(S)=*ch1=wp_kqc6%26??&w}cy z>FtiratNKuC_BJTr9w6N+pIqH3-=AN{arey7&K~IjL}{bV997N3BZm9^`R8%oj$hW z+o^!Bi%;n>XNzAWIWgl@B|JSLz4{N+Rx4>4O)^&<)}}0 zuEGa=rso|>>J3$jXPmNDfRuH;=}>S#f|JQeS;Td8L_+-4h|^9122%`Z-9@I0)SX?| zrBL}0N`Z~aNW2Ml7hUW31R9mp7n8M(cytz5Q-2muWuBAbBr2tOoi0;W<)hIX%Gedv zFUkr^gq*j0V`#{)k$B&-+}z!<=_GHO#jlzSGT#=gXID2=<>?#f5lS%yVFsYbxlC?6 zqe4T8=qwE7M+n4Gc>rHan)Ixs%;|@Gj{k!6Mq*FoqEAe(DY4YcxZ>{$&*PZVV6VVl z1{ifhsSN|@8?qDfy zFNwwSA0M$I`)-5?xroF3Lhv7+qB%K=zkdDp=v#-Vy~Dav`pB1@UGS(Ma}0Pxq0*S% zVCtKR3M}3u1|ST%1F!wC=~x9EN9`6tnO0${VA3PAXyr%>*ys%;^#;;N%gB{)t!p&K z3IHLjhEoi+jp;~3n`fbldK!S0mCJK3UVIWCzkZAbHh8G!bI>Pcdk%($hK;wlT8hr6 zBqM{_$#{<(wH=M$$-dX}f5)BrmcOM9J^&B8`MvZ3o9+U1rkNtUfn(tOJ0FKn*4o@b zaBg;c+bIBGYWKF5r&^qx6mfZhWS&cnn&@*5lF$w?1l9QKpM~+@A>5jW_+g<|1i+v* zVLz*Q#U!Q%fF0CuC;R=cpO>*NZ^fA66gERh#k@3Y(Gn@T?9SD7c60A(3+4kb!fe8x050TqIo)us zx(gl52iA5Z@$ts?#N3_^qf>Pf&dC?E1KYf#X-j^v;i{8#Qh@9>;msvI3ESO$GhemN7z>mQ42i+lLd| z07>mx<+2>fTr23sK?EGdndQ-BSVEbWwifv#@%o>>zkCGjfZZ@!8bNng1^Z{KXeb%$vh-`7WZmMZ&BG~{jkHeiwBcGQrAdC!RA7{Tq;{jr6s!0e4o z6)^x4&8o z9aR9j_Sda8+@koq%UIjeN>!W&64O3xwcP|d8*=75q0#`E#fB9@Ist!^DMI6U`)SJC zKQK9LWuS1y^QsnI7akKLs$A9`FPzHmoCh;r-iUz>;N1Y@c|*63YvOVD(+j2>nXX^LzW#xk zQLSJ?qy}^N+JQb=UI}DPrR>k1^S5lYg6JAVdx8*qJIYAaSDq{D)S^bI&e`{Npax*F zjJ7ty(qchTXzS@>9uD{s(GA(m^jGroXVm z^$lXok&hKnS#HDvubZ%1q~6f|J41DYSjOyNI!veP2ULCLfmmacwxA=c1vl;^pL~yGx nKK=)>^6~Zm=PwDRZfG^`4mKVL<~e~c#&{#EB2y}5`uTqYD-{-6 literal 52718 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-irc-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-irc-layout-linux.png index 48e82f72af1fe4da258dd0936b5a9fe20617e9d7..4745d81d22c0c7398d67760ecddc706bde6a409a 100644 GIT binary patch literal 48500 zcmdSB1yEdFv?fXf3y_cyBoG25gy4-sa7h9L3+@)&ou<*?!3j>|?hxD>2<{Nv-QC^Z z=Kt@Vnm1EZb!+Cms`t96YWkdQXYIY0eCylC@0+AB))T@fNJvOnq9UJUkdPj!BOyKf zi}ny)S>_L_0bdVnWP}Bg3j1DfAR&<=iGC80bBN!bfy&`bOrh=*af--4`0P)L=0DD# zj+QD?jARcT(`bBXVnI`5g0GHT>tUvTQyo=~VV~iLc3R@^@#8B_Mot;|9!WTR99CyK zHd@n}4M$>U0@oR@jlshZ*;l4)aiCKq{_rf)z59QVk_GrR(C+_v3?sY$vLuB(zW??> zVBddngyP>17D?dWLa#e89)Mpz{-e;-W$*i&{QptNS4JKB?ebtN?>sONmE;K%FRnhm zOAqZ^uQHY)Go#$Gl7d7S`@6VVyx!yCEl$k)s>$tIr4x1o=2jXLy&cQ#iW)8szaS+g zqH7BFH~EfIn<+Zk%J_}-H&VFxwCeO+u(eVDf0`=g=^Mk`+#y+Qbt!=NpOcemtQ*u1&k)s}J5@p~p^p z_CZ$x%B>M*rS}bxhGHHz=>+I7$>_$vl$o9G<*nezq*pSW>-RmSS>Z?RaFJI-}_|DGDbwR64E zl!u+H6!^UxJ0G?a26w;R#fYy4C~g!DG20yR;o(NV5VW-`Q+ZWZR>rXPcUDlkn2|5u zt5uh;F7cG@#AS3TKEM5=S0lsD^kkXMR>e#ZCrpKkl4Srqy zpB6u>ob)D=#U^qjLLuw%7J;!S!8_37-)cOk%K0S&W4M6G89ni2C39Xs(%>L7M7>U3 zO@_jI2azl~{Q>!O>TeQ6iZl|IZc2hXv_W!llc%=|+*frE?l73?l>sA+e) zd|jK{Xe~6#>_m4Kg0&HXuQC0ShKVX7GWT#3L%TT5jf7I)1;vxTq3|XR=6Z9YDA*A} zB^wx|SDN(@i67^T{=;2s_wiy_Nv?4XRLIbTb!&Q{D_w#{`Q&OtmJte<5Ye}nbXoPT zd=aLDv$6Y@lA8YJ=)Ah#T(T~{raPTWG+aP4~0-%mEq zW(y9-d8~tqw${x{cHln8u#}iH(mR~E#;bw0nRs}I+tJ3*)ps%s^nL1ug7e6Nf`S~s z!^6X#9`V^1vFAILb7*As_4W6gCHZuA4X{pdQxrP^8UG?aT1{`?X_Az#uFSThLv>>vA22h&N-aiSKOuk8@!DI6%Wwf z>1o8ooigr8q;Rk{`x39-bnq0sJ`>&?Nr1NOfy>(FlkEx$bgenp{d{-da70B#`}+D2 z?@vNHb=h`Jz)U7bCEgu&PgcVXS_hrJ%8ov>GtmM*ql z={nt+%FD}(i;eA#V=qci_u`7~)wh_dpP8MlS1#3ebaX5%EX1c*OV+oNlHuaw!r<2K z)nXvPY-?85vP5Q287g9T`cdQr6MbBq$-#J3Z|@kos9q?@mKffG^tkXtg&^ zKtKSrKQ=Owz-hNxX)$L$i`ZCRPESeEHZrQVS(AJf47S%W(S{5UUck+MXZP}zl*v$e zg+6nASV;*dpRSU+y36e$oqK6!FcG8CF@t+)U+c6kQ^QrI`fug!N6b=+uDFhuRheBy z@~8$0&tV6%0ntTn>a}_*9gF>+U&M#3yjwYF3XC|Dfl`%kXTeI0b8BiQySr)V=_LgO z8aq1Hn|+_fv0KzTUszjPm-zUgkm-VFAYwNs_aY!9WQy%+X=(ZK<3|8KXN4c(nOFIne4HclsM7KVXj%OItE5}Z*OmZzh;eXPGX{ltu4zQ z)rL-c@IZW`f}&!7Pft%rhf2sDFod6Kt2pOEtL{Hasc&;m5w- zRhTMlYmzh!1aIh1Swl#>rn}2*wM*@ZIV#qY|2F6q&5Br-KHzyT9qm9xGq$Ph+Jsii z)2uD>0r@jZK&Sm{;|~KK5o`rmV_x*@E7NIF3!>G1OyUFN>nu|G32#1Hd)2tK^z;N` z57yXit#n5}d&RW8+!@{-Mfc9j(AXFc7uV(byf`&gP+s1y7tU%jn*S?10GCFA;MFTD zzBgRkLi^55*b7)*$DRv}7+bk2m{N`^;yG1yLB{ z8$B!q^O=my2M^z8Bz@;@LOz&eUb?!LyNMd5`axk~GD=D@U^0s|>hK^M*XIX1el>V?~-cf;IL#U34j#LxY2#`c?*qmeg!=fe0j6Oxi9qiS54BK38)9Udh`|YO3@^ zWka)(D0p8_U(QY1bc=w^7<2E5_la|@E%9@Q@%}%l)yj%#?a`VPNsfYO8;s(A$b=Y^ z9?6Qyyn)Ec$mbSb2g_m`H?Xs^X3*a*EzSxvnNM>F3%3K2wYIlsfxSsiZaQ6M)gDX? zG*J15^tdPP#v1UDhKY%~D6Kzu=68I-(Qx#V4Qj#!` zkp6UcH;bxE$Orl_mJ~CsX($s!AJ4bu-66tL(~rBeQp38w`dPs7d~TCTvC}sP-!>T; zhZoJw&AmdClamz+T4qFSR(pyoEBpKV_l9%AV`G)U0F!Le(GUd}S8ab1 zADE)rni`-aO#9+L4o|yWonjGl$_WemcIx8c`Jc?<%gc|bR+`hPRsC&gA%{Tv$HyHS zJ&=KM&D_QRXS#yo{QXM^%5Q}vMOz3?n4k)Nx$B!cbgH zY!H_cckL*URqv&xrgHfeMTU4)Jg%b3HuMdjBX52w3-PegO(~9bXkF|5QuNEQhCbfW zFT}St!$+UiBZ2QJRe0@`wGmdhU_;mJV6kjyRxsD9cueHNW%qlw)~+tG@c2$!O9Z+m z4O|^f^>kP*${CMCmV#R3I*)@_s3wlV&x<$QAY|C<7?~0!!3bz6x?B1-$La6Y`F*DP zjN{6MUV<1I*<0GP&SXNmtJxsB@Q|-Ac9wr{_Eg=}WN4!+NT!}3Uk{`1Rk&-u#28|h zuU~V@0#f>QT5RBDB(7`qb3@&CE1gh35g6ikq`X+OJ)JHwCNcO5eF=QiwBZ32k7lju z(mFcJLqCXwmTfY$n< z>*5$m4MOvV+ywAxZnOrnSggV6Ajn!_AiMe6#$Grehr1)RnOMMK&2CwMUtYroLRNSOKVHfu_2 zQh5``9-Eg`w--j@k@`}tyPo5k-;dQxGyDmT=5UC|K@Ch}k_N+JblOE?qoaebmzT7S%&Eic70f1E^-Jrx)#9COanl?VXnLqQUs|8ad(1;4%b~1s zWlq^Z_grF%ULr!VtsPfRx~E>~5{78;HWms+4IyrT7?A1}#VL+j^NzoP4P$8FZ&;?@OS`Bcw!D4J`b2i9h)(|BmjZaxQRIQ z)t7rA0jtOXA@^FYqeqmyW85ebUTioINli|lXDKO_`kkltX8aK-^tYvx7n1IL`|SnJ zuTab7dJf1Z>49(dLOI@){kHu6ycT69yK04R(kV~f^; zKYfDXH5Dq%JSXed+kLf>Q_unO?~+E3DP{5Cy*fFqeqWij0L3>qp=5N8s0y>dVnPIWDNfy|GP?d z>m)Hqh`jBKfM7nG~IDz38hfQ0+nOdk)bAkf$jJHofyoow!^8Hy>! zVP=|rAy}wUH#^!?lb!uj)vPH!hgttdZI9+L(lUC&mBzt-a*N&f=@)gs>g4>?>!bJ! zuTWkW$F0rH_y$YATv<6e+bxCd>|f0*W%@`+CB8=;NPi9G<>UZf0G*kX*U(7x3QZCh zu7icYc~e|xK@xK4@86Mq(_o=CSEQ*aD5A<-y1fnMg6^c?O*dFP3-25p9ewL1PQYj1 zGww%=CnhRt)Dik)$e=Hn_y~t=`Py6Tl1{be#5(d!U<6ECK{6%(-Gd*Qtz~ur zHM@&DQe5-`dM2pfl8RwifC}#9vY%Sn( zBJtA|qsL)4Xl!F{H;W5oSK_!Jiad-85!B^gS9czec~(qjzTi=OK(YW z#qMzDY0t!w5X#kDZS>_;CKgj5UW4KT{$0yAuaF4ojw)8+aCqmL3<~PG?E5nrnVoG; zMuNZ!vnepnwzgIqgZC8HiMB_Z@{`TNA>rYRfq{W&WLf?3OJ+99KedH}-@NnU;24jq zG*jK%0#ojLKjmo|xw%X_mt~r6ss$6`Lz6WwYR*l!k5J#8?WXD@OU7MqS>&+}vrek2 zwzjs}Sjd|XwTXQGymIa*+wAkSv!`bg@zJBQm(24Mz%f_bn(_}YoWo#bB>vNTQ1d5^p`)dw% zTIbVkzx1H&yu7S*@^1RVnv)r1T5-8$UMvX-D6|q~FxeS3s{U-UWz^7~0Ld^S6yJlE ziiQRi8F|zW^7Lu&T)j&;%hF>F*7p5z&AV_j{1P*4B4VWEH>40Rx8m;Z?!D=}Kq=ag zIw3S^8yjgmsI;B6R(6ixga-)cd6vETd46F)JW-L5CYt7ONw)_}O0xNQCDFR9)^Df` z?I)7j^GZv=Uw81eJi)n5u+UxzPFC~|R}Vd1c%h4`D%afYqwlFY2p4CkJ4I*NfwgLX4uP_Pt^^C+i8x9Q*LwS0Snt@QJ;nI z(kK>E(_BIM8luCPoLfY$cApBNJgc={$qn5RA1i<9#DVnVHRHI$ypE2d+GS+D;7W5l zavFudsqkHqC$&2AooFVQ?wp*Qo0~IHbHBpi;NZf-f`SAeAD>^pr1xfbt%?td1~p)? z6O3nbf@syQOJ79x`+)`UL`D5QvE3bAgoo>r*>Gumw#x(J*__GnWe?e zx2Bk|BBwMGDfs-wDQa#b$(Nh+<&7aw$#!S*&b&A9|RrV>S(%jtA= zhM23-OwGxU2RAl0NAwzq@vM+`fLoiI?Es8bwajpLW1~}-Dd)j-Ei@!A4`WVg07}>T z<|z_WR$2zx9(FwuM+l}DHp<)@p3~d$$jBrQe38j-FxbV92cA_V20bynHmjI|9RRzk zGz(y0WxX*vmP&NFnvqz&mY&8hPr@$IZmt0V`g6e=+no~IPRMlY(9jT!sPgykWNVM? zY!?vKBRU%^cDQ22_16#e9^Bq~VPn`F*=>#PO;?+2jaq8&n9fv`my|G>HeV_fsNx7t zJ621^a?)8_ke{rn)%<`BR7wrC1`~q@R`(h#4i7hl(HPm;8yr_QkJkDV;sMG7JPIfK zJtlVcEb6oMfu-3xry|XUin20<>kSGSIq9FITDseyQkyl+DDO8MwxL}Z$iZZg%Y$@u zjpXA%Occ*zI}@*p3I$->BWV;Tm6a^l{D&eseq_8ctCdV(GoSujZo>X9ZPY6i>@Ta3 zQ^wdHO;_bEt{=R4{Gt;d>}7+6)ABPPMWmKxuFo z4St%`ebY$~fd!OXfOJ5I<)Q}KpuQiI9$#lT0@$EarjPudzT*gm#?Avjp$qSdE zFDU&pL|?!9m!m6PpBmL9@4+n!qZJ!Q@)YL~R?S1D{Zo||sF(!FIXP6Ml1+FMOlDbO z$ekZJ9HOG5$9ATQAsXC#w)=la3skF7!%T4GC1e6mFHf`q99yxYyERd{m+by%tv60n zL!&RDoBhY29o@jwM@XcaReO&gYq?N=$8|0A4F<}#U%#|SvsTgt2!~=%jfBKvmc;zy z3447_4P13FNA`mtn%&z-Y{8kgS_WgWnF*5i_FmW$bac7Doz8ZFXl3PI9`L=t`~edk z<1ME*WxEO>H=x}-WCHSkj$V(+J)~U1T0uaS83+s=af+?}d@^dasBz~bEOWyp(ygoj$;i{!@kD8i}%-p;@ z=-zCzs^Hx?yfgfRk5`XI1?{nhF?C#PjpIp8Nl8hEMh{(25|0ZTY%s!nrnWDUCk~s* zW;HM(A_8m&9+$(2&hNK3XLGr^)XbTv11vANO}-d^?dm7vySlhCGBFWuZ*g|G(;i6m zK2{GP`E9#{BdFgKpBNTaqN@%QA^%Sh%fKAsVvS?bkU%GA6!qz%x0-gf|Zrk+&DWwAK`ei2@C;9rX+o|iNa>mzV?FC z{e{xa00l@20q*jr>H;cF(EfHc;LKaIcU=`(t>!+vVt(MvgH0r(%+OI!~ax5DwR2>6(s4J>7h-NjI zN&TZ$$7y9?kJxVNH*P&qfktJwFnRN)K4Vql!`s>@^Jl0?q4?ZcnFlx*@q~gRiE|yB ziWXHQc5do|O53TCTh;Hoh|Mr1NpeaF1RPD-rsmu%9UU*h?y2ryY3v?FLaG8}gM$Tb zCTzi2zE4==T@kx>^AzQ4nol ze@oMKrLB@C{tA=&4fkdLG@0jc-BlMA3$}l+KFP<+hW;ep+S=*@wQ`x+1rWbLK|n*q zXVv!(M{rzzM6dR(*x73>MdoU6Og+7VP||`+c z+#=?F>SgETRM#3x#wF{1SBoBa0CFL8%ifDZ8sq1p5%d+#;$sDH2@w}j~ zZ#Wk4uiiarsH+bs_U80PVC&v{iuMUyB%BUEv8~tVN$l+u`!4WH}b(lfq~AFDBmnT|Jx z3?7O-{vuK*Z8FHYtu?ma?% zx{pko4{@(ejk%HmyARkI`o20fwP~Q5rEQR_={4&YS63Id7i;W$Yr49==Kfw)^eNK( z+S|mO)nCPNc6fRqQ4b9%qJk6qSRA2Gb+M=>x!N2R1pE=YHRFTb0RKZQKA$__HgwU1SK(Lv`1bqriiLS604?h3FL+!C2fv0LT(<&m5RW#d z!9Z#`udFO4CV+7OA1Lt}i#b=g9t{l*?#q`iUM$APCpdJ2bej20z01bpMNEv?-Stub zY@Kw|=GD2w2MTf-R9cWKGBY*B#5_hPYY(~8GtzrSLQ-q87Az6Rjw2Wr_5z)ZimDTM z*w}(^-=!t;xVbJgO@RL1zt31ueQVryx-pccT3HBDD`Oz%NCyciKlFp6wO-X)ePVe5 zB@8k$GG>Eb@vmPoF)_LAw`2aiaDVt!JLo@R2_nhj5`76LY)6JC6Q_yJ(B<3=| zULVj=sWf+4-Ht`ZST!*+GTJhPsFdyR4P|ZMlkjOHz6WI)lq%&Xxjh{i9T*)Q&?vKP zj4d_r8nKut$uRpc<>mEQumiYBS7&D#U0?_ExZNT)H#aSC=llcwjZd%6Hil>fqqo-A zSxiPv8$B)*i!^Ytr_QZF*fTq;v4V>Wa5p^$f*Zu8o}R%#WpZw&f|8Pwy!^`2R;l9& zwfp;~x7<#<)2W{^%I(VRY;8S+^!)=Bw7S(E*3J|2TcK$8#0-GA=fQ&q7K6;$FW?eA zm3Hf>-XcbYev@;yt22uH%(JPLSA00`j<43aZ`SQvViLYi5vGv zC~CFV<(0KgYHCd$$Vb^t=jUGgKhf|4^vv{57K9{wPmipRd_o91Zz%UQUeVFf38Hy6 zl6rl^mjH6MPP(DW_coh)Yri{=`}~deP$NjQx3sm@===Rf1NDHbm186;%lvELiD|5u z7Czz;WgjV+u0U*njy5HTmHJ&&JiS5kpZ?;7Z9!55vgOB{D~?yEJITrX_0=o~7-(D# zf5ykX;9z+azWV*U-fPGIZ8Ie$B?Ifi@pxOzuE4?FM(X@K2??uVH7NbP)L6XC^xy?j z4b`oIUK9>F14XRS99-!gE@9EbM1noWi+fs&&O_CoZlB_Fe6uTFNaiJjJXV&GmR`6u z(MnE=OfZ|N=OH6MGRt%)TO$tuh=`tEhQI$;kQwJN(>E|sR#AB&IIE9XVSD?HPpY3z z_3h#k4yS$Dz>tX~F1>1nDaha^a80>@?H-@}hyexVQaI$z$e0Dy2;orq-`QLjhjTo( zIG3Z*490}z361sA3w?*w{lemqX>*sL`8J$qmj*OXz<-| zT&6T6{gRGTC{P)paDDXXCO=;s=siIZQ7gZ57r$v-Z*Ofd{@B>hH*{{%2@*I&7WkJa zmvSlTny;+>?lCwwVoZ0HOkOSuzs+3jRn^ti{WeD|DDvgY7eG<*I(ctt+B!k@c{lv~ z3!9UTJoM?t$A$2gxtEg?w5$A$XUJ>6QVJhGe(dFKMhlhz75&6-GSiOvMmZQ4#?g>l zQek%Xbe&TO$Bvh;aKy`K@CQm_?q}7eil_?Lis9G(#v-~p+v}$Tpq{wC9qcpmUMnNm z%M;4+bBUg)&y*`&U8D!r01>a*?Y8=RYf)HX&L6z5Vq$eJ&VW2Zfa&Am@i3q>S6L7z z#p3QZj_n47lz>=Old#tL{QGGue##&EPlX;LO>D*KpL~SXGydk3kV3{bD@rBFd77ydCRugd?96D{qouxK3+v}dU{!UmG0K)&a`ZqySsq%hX4Rh zHSRQ7{N>O6Hm~SYsd?E1|Fp}10E;Wu)Wz@Z!lHUFe9E!qXG%&6&1}6(w|*%zGqaG8 zV&LnKGD?~c+ZE!8WtMrV`YNz(PChH(RC%JSvHqHSIs5yw`FBRtC-smH3?NYy$O_3DUnjdt;K&A zKOJB1a%C;10EjmZoiatPyfuzB(@lUxcC){C1U%#1`&{o`H##ci>nEYxxn zgN3CnF57WSNRcZXt|AB1(5RPpqA|Y$TEi0s>-gyG?DT-OlHnO9W@;C*tDeJE1|(l} z`DwG*xI$FtXf)*u`q>d@)g}MBSZ0Ho+FDc;3807X8v3nzDM= zo6W_+t%c^R!(frVUGmw93bU($JK|qrnoM)J{{V(bMC^rQh?yt#_$Sp;f@bqK9gEEe zfyDenCs{%jZ=$;%N>X%LcV`akPQf{PEW-}Jd zx$|&S(q%Us=>#3P_zioP+#v1DPj~OeTmBbQuJCwb?!5?{@PYz$IvO+$N9{zVj_wsC1bgY!Zso0j2xD8ArOiOm{4%=b^RUbjBXmsIf4t2`gR zZ_b30e?Y5*hw;gM14Cdq{iqCHr zh3f<1oI5zt*C@Mnn@c}?50T`-sFwh>L5ZPN> zTUlC?gCrS8;(e&xq|4OY+&nYQJw440w$#zi6nn1g|K$Hlc*|pt&;NQSyw(>dB@ft| zw$|32{gC-W{rjSJMDglsPA8i#^M4+|?H&Boh5%C;aZ+nn%IA3OMo(`JfW-IYm6HtOmO41{AKBIlKxeN@jfdIUD+39S(8T;c8uTTK+R#n3|YO4y>OAAX% z!t`6KuRQ%Eqq};3lVw%7U%-*<4NAW}}ky?Z6znqD*D8j}o__I*ZSrt_5D{QfuCDi^@4g&1bD=vG4r{_|W zcR&tLZhpS$LQ^ZK4FYtFaqPD5#o4Xh^$`+rcRC}?4;)SzyU_x5KBGf9RMhs+(20zU41}lKc|TvZs`mbT3RlJ6@@@}^g0@Br*KYN3 z2ypSs^E-^6z2PPRgHB5e_Z3d6b4puBb%$_kKNvDC0Zs5Y9>+84tae4_Rf(YoJ|HAq z_WtHeO+$l$fw8po{eu*|%)D16mw}vIcQrp&RMgMi-5n6c(v%TpWy_;GQ_=K^A%4}z zfR=6P7J^1ISNh>lUPVQ`r!{6hpg)m!rqY6s9TV`9yu7L+B6I~szJ5KNZ+zet+R>41 z(4VAPWywad`W+;&&!fIsO5RGAsHaUZj-FD)g+gaS6V0Gg<{ zcv*2VBg5Y{GiqQ}C@u%9ZQPO?EDu2F$l`A0rzZQs;6pvu!T&N8N%*}BA{kh_KX%xE z@8G9B6Iw=kA^83KcX|yD=ts^=d6mg~o*7Cgl+Jip(&_9AAUz*i+a7yk7(g`q3oq6* zN!__p{>-*2<2!;}06-2eE6kn)WbEyj^tjq3oe0`T*K3FvP51fvxH=cqbdt8Qn7>{+ zV^00z^ojO>{{?YTZsFzOU6p80t5`G&7U6h9!ycfELp}@R2v(TQxB@RJM>eY`{^L!@ zue3FYTC(vMO@Dh^+jzhYFE<&hG@I!gbI{ctZuIn}kc?;0X*K5d2B%VIaz zWsJr1appST4|qQ`fD0OpYZZ8-!}*EyyS`8Fijsf-bX7K9Y)s11?OwSgB^4J$E&P zFDPp@_*xrtkDpGXB;Ma_`@D0{=5TIpSt|bZ`toEP1j!xuG0Ob}zp$*% zU|Y-gFZ-`^e}g9~NVtiI1^9oh4}8VmInx|Kgvs9VoG)-!e=Zz)lEVSxJ6+%4v^@`z z>kQTAXo!-c@6hxRZ#1XQ^XMnZ7g<){ zkW0VXezd?8SJ&km=(!W%03luyR_ph|p9{*#%U7*^sxS)}uhvogT9xUA{okT9N*Wp*L68y45lj1I zFPu|NCR)@=Sa$^6~8~-=UQLKG~qOMMC7oRILw*~!UIznMCFBhc9Bw`pRk~AFUWQIa zNJ!`vn%hMUl%TP((s0cmMQMrOXfO@ej(f| z$%lt`y1OLM%gV}FClqG*Jv3D~Tebs3Kp$iPfJFd|C1Z`P=Da%jtNndCkmmr=Qe$Hy z02fk}*|@m62M5Ej580Lq+*2O7RJ*&oD%e-pU7dP`_Eg3qPLP=x{sL>CUGLfrUjby} zVUkkl#Kc4Vmr4Rko;Tb)m8O0_L!{Qn2fj!Zebkf%K_$qCdWD89zM$rMIojtI6{ah( z;kPY0$nfbY=^Wnh-5qnJ%%{Or*in4^Yd~8T6fqC};Vd#=_}=ov%kf%{Ey1O|1}S?b+}r1$%{n)oZKGt*toKGOQ<YcMO z2f%}af@mly3D`_2HHnK{Z~EeSZFZ+GAe!|KCtDx%Ls^Box?J0Hk|GQGZBQDb0EfcQ zud`5{D%Q=K1fNG>pbetxjn08Kn>F${~S$p`a| z8Z(le-N`m>pXM1bANi^c_1Wt-Al19Tcc)gosF*w5-wy$`fmIf@>I7K}TwL4>!siNL zq9!>f)oaGR&Bn(Y+}!FjuWxSH%`WSzs?LY9n$W{3c$|-aW)jm|jmkMU)hrRyxO?4i zE_AY~%Ds7Wfd+v`8}CvUrW)=tB^shZEF2MGj(?0639pU%o$yU-uW9r>1H(FkU?V!X zaCdWrM#rLEquN?N-Y(+%V@g`QfX;mSqU?E%6)ILRW$_lFzZVLs>Gx(EYVEezPL7s4 zWwj3&2m+_$5nE#x*QZ-wH!Z1FK;rY)udCDTi8$M}!f5=vy5ieg*Bq)GkVSJn+np)V zOPP+VX({@{YTFT7D=PZ@`SUEv8y@H`!mFhPZWo`B5XWi)$Ym95ZD!d{hLq5-u*WDl zX=!l|YfsNI>HU-D{(xH2(pRaer!#de(j!yFxpP2iKyZcZ+ZGp2h%K0hD zcw@!VaL&Wq51arPByoK$!2_dVu*{9k5#|4b4TXjPO1xBJ4@{;Fgo`_q%ID{oPl?&4 zyYrG(?~>>iU);~MSLlOBmut(b$H2ua$^oDgvn(^9uK-VFdueB9clXO&@VN;!ulCGA zaAYVlvM-otpdY~P^|igdoh1`S1u<~~;G|riPUS);_C6J+y?n>73^EIg@5SmaFV;6V{HxKhv}^M? z=18@huh^F8G-cT>X5k-g@J>p_&X+6%g`!<<4)snpS=DRpR(N&@7op)~kJ4FC(VoOXvGb;Hf+6vzcqNF}m3w^+gjvR@_s`QaVQ4h_x==-ySY z-6em2Lc;Ka*XPjxu**2bpe^N=G2Q9(g|o1~SVI@rW2%YC$$PZ<+S(94Zpvmyu(35( zL{DG$h8LmvjK|U8xY}x|=8sUyUzQuI^$;v=qL9}gr^`(gb6ZA7&9`G11EOiepoS+w zz54hsozr)9pJAy3?7kKCnam1NSa6h&^P}_N`Ab2h^I(wCzq`3Q1Nlbs zJhqn$LcwOjs^s1>Qzh@Ysg08mX`!(IcK-Bvhs$-*D>g?tnqK|k@EcN`eG<|!~_TDg)(iF z%h_&9w@^@^N;em!p~`H--TdC#96+new?_AG`_nt$Kmfv~UT!R5YDyd42_j4tyvu+T zfr8zjJf7E(mn48{ws+Ngf0*0&87$@8at@Htz&Yvvk&xX);Z7F!;hrPz?6xob?QI7J z5#MKIZV7M!PWc~{H7V)ms(^g`?{Ad616k>|p>A;S)vt*}0PxmKuV20-FwX5d3~S{!lP0(I?=kiN6W;ee zuTiHn9krXoMiR9D$p5J8>*3b`YcX&F9gU3B2VPT9R)$q>i^&?qMQBf~m6no6v8M&Z ziA4V6Y~C+}q4vDd8$aZ`M!jU$_tH-x1VZlGE2fjJV>MfUp3;fiZoa?I*#1xv(4Z9T z>-K0+)NrzXFR_WYjVSP;J!09^A|0v%1vYac01Nux_W~g4V!~3sCC%a{sXH-WEH6!l zV0#L@_Jy8mZVxocDY7-*_ufHxDA>4oS9LcAVU%APVKS9fme}yMyHRhq4cGqX=zoa^ zB2=?Ay6a|0iqGFwS$GF}w#8s>@&lgvmH3}C>7>NV-gmz)C_h+tb%t2*jTu2u@OmFT z3p5>iuJ{_vA^#%}#J*-Rs%$WQl^mZ7RStD9#u@arxgy`p{Rn<~t*O{t<3wATTG`gw zDXKSe6F8r??i@RAJ->hAH;00PXfUU{o5EtZ;+PZ1^$7XiN#=#~tF?=h399=N3>_Gv zV0!1`FDlg-PC8|-1O0f_pP6kLdXrqW@$UJr-&pBm$TeBYfm!~j(}!}G;h2K z(>`6Aj+5>@3|i2avtCVmebEMPApIRaYFbK(ZiUTRC44U({}8SD%i^E64@huAoFn(y z=on>ZrLhG?RKBm~c~$Gx9i#QHJ2+fZn2?3G)$V}Tv6n1sk$Vd;^PI848 zrB5Y4ok5xWD;LT_K9}S)lKIbBjU3hi#BYwG?VX#mF#1U6Lv&3)_s=%7h~N6ieu%oe zddf<<%18w>!h1o4O5*T@TvOJ#Cl@(em|sG!&D%GaBhH~DS2YuKO$ir1sp$W zIl7bUaU-Fr7P#_v{l1r~luS)5w)>YO7#_n7HO94`b-U2eM?>%5b@2BS8N^iSUxaWu z!*A95Yp%rc10HY(sflF(@vWU-c9slnRO=DY0zbYKfdZ30SS&Zjzum#W_|wMZj+%TN zl?oeCP(Y0!4V+#KqV0`I6e0rflf_Yj1;SEk@oo?MvB`f{_;l1Hd6U0P?4f0^fyMIQ z29;e{Fj?W`$;C8Q;Y7qrCl3?8e{cyo&>%XQI;v7P*JD>K2Edg;GUS9?YZ!ty&sqP3 zg5Sv-|MI;_*&9$_e--P=?|*aBd$Rq=lm91 zsva-8=yd#OL%kStYI|_b@scF%aUVFL{Mv2p%~@K;=c%WoRV4SzX&DnnCcK&!FX4)s zTQA?8+o;F>D2VITllYTv3vFcYq+3}gx2RaEVA}fy$_>aSzRJ;~I_y`SxvVxu7OTY)8azTsk25W)r{6B_=Y6$IA4q7J-@%zfl>&` zf7aFYVtHq?EZB$^L+QG8^EU# zrhEVOUpsU4|HD%Yf-!8Jn; zxVc7^dGFWR5HVL}NeNmt21O}FMM;5w1dQd`tKZG#gW~R_av|AdhJ&+Ivz2|?jscRV zz?Ih}zF&nbb`oa}DWAG%s3l+X!4CJBH#S}Y7CkeY`O-+g&0vca2&Y#IK&WoN9>Q0o zR(HF45;s`F1mG6csbIc9LPm~1A&pwYi0ofi(n=m3aRqH^^^W_0NtBf*O5L6&vY#3J z!zm7VeY15OTN)c1J2E1UqqFqjk#lt3E`u^~1YVCt@?7IkPbdb?P0PHH{6O6c}!V#LJ}C+tv~*~j1qRNh8@%Ro1&~h|b_v9|GNf{Bq51!!?k#}gYP&Ac zC=wDNAwYr?f?FWCCb)NShu{uD8z%`6f;$9vx8M!|g1a{E(0JpGb06OCoB3z%|4-ez zRdcKERHceEbf4}%=Q+<_d+)W@78k(B^|hLnVIOGhu-%y)K9+wjG+kN#itWo+U`XQV zMh|QsKHdnY2zq@)V_{{z&>KU;#f=^{834uX04Z3pZs73va9&~I%Nzn-UGPCLG3VUs z>jAfS9Y~u%!i_yrs9p{_&*2n5Km+0qkhiv*<{wt%MaKFu6?p@3#=UzdAo= ze!Mm`GCGP$;j#^&Bjxn8Q&z^UzN(J4$hF%VB1q`3D%%r@e*1QQNd@QtG?GKiY7)9S}R1^u;KJaOVzAV*Fyt(pNXJCKMXHge1(j04mB9|Z}tJUzA z+b+9gAtK&+f04X8J~q~5c6Yn;mWNfY>-k5PYa&)@<&yhetqyH zy$fXuU2&WZlP`5#T_$)jzAtnd8I=`{8@oA=~r{`$B??n-r2|Ei8 zbr6nq{qZ*aED76?bj@6e4XJs?@87@4SMI`C32HKLUR&>Kyv_Qv*BlD^zKMym`E-~G z{qcuwNWl^vakQz1HCXcv&v2y$zNY5(KoSu#(N1&}LA;lu^te!o&bY{Utu*zp9d%Ce zn3$_8ieFoJdHm#P|HZ|vyY44&WowG^^2ldZh%tSE3?@V+E?T zpuD?1VFS`U^_tH*2BKL-MbVLw(rC0yH#8bLN=ghG;sfTvxVYdWx{rq8PqfVT1@&MQ z74f>()Q_vD^sZ@WIQ*{I_^^B9vU9e@zKu?v1G!|^*O?rcO_VxIPuJhswe($k9xgxj zqtw;{FObrtvLoOwb~Kr(i5GiUBR`lMzz6t&HnQ~)q_NPgkvaRtu&iDc&>C76Usm4&LM5m*(Hr6k=yr*U0X_nX7*@4dDXUeos%Whg;tXeeFS&mX6Qn-}>)WqYjq;ASp?8j{rL#JDqei4+xW z*U*UPn3(WxM8zcL`6YL2a_)Ru_&O#APdxPI<+)39lReuQeG+(;zah6 ze**_V2XB#_Jg{;AmThhQvtMks4g0bIhpKll@6WZ+-MJuh-g|WS)BL|>*#F`W{Qvu* z5SkvF<2_mL&XuBty3S0;g6Lm=@GczNteo+L-gYuB}sn`36f>f?(f5nEkdJI5p(%S@AuKBY34ZZOia zKEdDnq$uohQua95afEph7EGV#wJw(;0yZco+DiHi|0{#5u_@Ezf{6{2Jm^eo`f>u4 zbReFmrJ~4xlAJdoWK3|(nh=MgG{QB3!)B_&r8l`l(B`usxKzVlOWC5=6`Y)oTRUIY zwT1#H?M>MYcn&Ma2oq!^U#A|s4FH36`i~szvP8>P~?RF2eKNcqrExQ=isen zHLAC^XB$uVDV@&fPEMx2E`D!Kud)iF4kj)x$YA8@i>l!KMh=@dYyeEpnBD%)3ruC3 zY^v#;zu{7eGOr^W9AP$r>oVLPOf;O#3z?O}$Q7~d%*I;xT@`uTQb~&p+l(JoY;2}o zjy7Gd1kE^BQw*n66(y!$Tcn6C=SVD%hrddr@sE|PQQ&hs$aiIU)+{;rwC+XBDUbIc zyqbmO@YDgfSOgULb#ifaf`Q7(-FGB?k z;R@o4BlC}RYj3D16v?nF*v)o#H_ff5#T*2(h_hT1c+8HA>O)5snk>d!KOZ_T)R-_^ z&wBn@Q{kP~3_T*2%2~O^zPH%?qseJ^Iy)q-`}Y)s5eM%^kE6X}#%DB4egHbp*m*&MKs%lDCWPClnMWji^B6G~o=d!dKZQngZVZ zKb{>9jgAYfk(!#OmZTSg=K;GWyF|oq&qg;o`tp+b8vB)jw&Au$RJYnHOT8}wG*M_j zWRs*dsL9hf z_h!BLoK~@I25;zkdf?v0Uuv{UKeh8@{!moWVKJ|PmXK&?q;ya>%Ir?G%X9VhUR@kOZ^{zlvQY0+j_ghTNdchcHXhw1s zCui2-%C#TpTYD9YD6(3O^3d~A->9e8xt4Qui1~yC^&zLYYsXqE{7dCwa!!?lCvwNpx)RZ64vwd8>6b@mSPLQ{FP!_7tn3bJnVVaANhYS97 zb_hb;BGU>Ak`h$+IgUKajm@*Ig4WJKea~I^<%K7J+=I|L5-}0PB(z2oA9X846m-EV z6QG?TMCK+|l4$3}Zm^x525D6r4d~7%6C1#aO4Eb7d!TSTI+6KoY;We~D4K9 zB@I;-9bEotb;m^rMJDM@# z3AS2)r10G0Gi$FLI9oF{dZ4&r3o&UozII=`$SUB(>yMK{bBR0v(y2*{56$!ZI@y`+ z{L(Lr6$g`f(gu7ti<5RcLkYyJP_;2v4$iAo@XB*!-}>zE9>dE2t}fEU@^HEZq&DHR zZ3Z6}5}+g(+Gwh~yD>}wq*&ot~*~0$*dMwd$R5LrfBYHaeB8C|ZY0E-}+;-p*7n9v_Td=0A zq_Q{ZrKToJhW({>oKGO7I8!8to?luP+wgMqIDMU=wb@9}EhNh_tU@O=4oHLm#^{!PX)TEalJ{F4VlAweD zL(b$KNj%Tq$Zo?Y_V`GJR$qYJ+TRD_fyS#k9Lh4M*N;UC!vTM4G|AaX_v5?{Byc*$n zp(*q;qwyK8m5KO_iGR0}UXnQNj~{>+&BMc$lFZFREYSCfvY`pN|e8TSm)^Yd*}0fxm)Z* zzfdo8>M@kagTZ#({k13l*g}y!T0&@XT*fti77Kq@RcXyOKgPDrYPq`Aon@?ksTpn<(lyk&O!RLJJh=m?$HoD_J9OGMY(Y8>Dd7xtTiI4!Xa{^$drvB`eRH~ zjKUgs?fHwDCJ9$c21)1Sw{_CPuu-FO^~aAz`%fJ6ydFLH$X*gJmeDxa;~AOEZF2GV z{&k{NAp;$KflpDcq0ldfo{h}frs6WzOVL9?xU6Tiid&{W@kCyJz!BIq>^d3kUKlGL%(M#XX=m$d!~KX$QIL?Y{#wbV;mDEndC)jj~3mZ z-G(*bk5ptoJK=GaR*|u~Uq+aR(i^AFlQx&qDJWi6Q=I1ydb1?(0KfPr!UJVPu z+XZFS zn^zJ&wF8h7A4zE4L0)<~(JdeC%5Ht9Jfwd*{%xZSxsO@}Cr*{sRO_OL%4v7`HxL!p z`_FWeaoPnT8qJPa&%>bVq#IIF-i;_-_DY^9EB0vjKxYD9YH@8MwB0Zn9gXScZ1}g! zQC_5&;-K)*=JDo2DE}sDjovoNC`ZSYq{}U9hb9P-3y^HC1vq}6K;2Rea z*R&X!d=BFKKqAI;lNoM8d&C6#xL{;A7Y?@8Rq5Z^F~h@}aBwTW2>e*s#*>rP=rZGP z;HO(}i;(&7F0j3#%u-OV0@6sWs8M@WCa}s@aH8`ICE}lx=>?W!KhNO5mLm^^VY!;V zJo`TDxbeiqYR=>L-ohn0jopjNM^6*Bkz2!ADfU=f8&|IvP<85J_W5WpBojd*c`MK; zVqZy06?Di;dPPNXbdpdV9j&Z?+o^mhBE1f2cBTz-jmZ+`Ehm47iq;IJzs$W7=!9e6 zOU)Zv)fKx-qrTq0b8o(D2i*I&=T+|iY=QM34_j{whYDaoi8eYW51#&~T4eaBHJ>g- zRGgQ>p!~kIj-v_(D~AQFrOs2l`8QDBU3;Ewzy+kI6M{hAVq0r>eJ0YF;Ql)0<)kX_ z6Df)xsvx;J=^zePmaQsrSGj-h5_Uy;Kl_Nl;ou~xlVnD$FK5S= z?zua@dg@A{@(_flIH6li9W%2{pk`8Mn3!N}cE)<`$wIT5Ly8}$f`-{t0bOVrt6(!& znMmL$#<5_!%nfVy`a>#y<9>Y+{3H9v%sp5%eGG@igiK+`z8raFcwD&DE)bj`CTn>) zn3BaZ9PJ#=HgnpYsyJHXfws-f$ws%y&e3?C*Z%#eF9zJDrXD>sKR35Qs`y-e^=DTu zu;OTMrv{99N5o!*c{}U-_lm>!s&@D!(Bc}MamiQr=NXljPBf7=3s}r_H>Q(XUSZ;1 zsJ!(458b0LE-XKM`KTv9!_g7hfe9NQ&hA0XVl}%U^*ld@Cx=u?rzAJJIpSE|rFnxb zg7|$GOOv#>4OidSFI;u3uj{y`Jrsyv=Y+j#;G>SFc9sXQ2{kk^w=h3m(BQDX5DR2K zRi*<`ik|ow0Rer}@iMP=DH5^$$wdW&1wDB_BV*Vdc#^QokVB=%L4CW;h3TGW&Z8mM zDtNo1UTAX37aS^hBgMU)5hDOw*$%$oCX(YVugdu0M!2yp*>KS+{o4rM@{pHmfw~(0u#{Oi)Jq>IsK=t88!=zg0`ovemhzo{KSLzuj?FbbC2Sm zKp4ILfCMvK2=1#|qFqv$Z?_494G)9sXQeT{4H))3JQG*Mb$Cu56N%?wcgqkDeu?%7 za5ZtPz+LbOlx;+%V}S71?r>ESv0#$K<#HkHbXuC>*Pee}W4N@(e_5-w7b=bS1S2EE zKi^%_^q{U}3@PHWt6-YsN?OlzTmCL2@?d{A; z7ajrUMNvOp}gVP1E7f-vahV5z~jlY_;(5e!}uDkZr7E8q{~nMf=9}H zKZ>nij^5xGER_W&w4aSQDK5e`W+!vT)GRGD;6Ra~l7}9)91W2ym2iJ(Jg!m(P~I>5L+z>9dOFUFiwK`E z4>za+=Ms;jo!0L!{=bWMGK5Z@s!&f6d$W0pptJ?ppXlh&z1ae7tD6RHV4=2bR}0jx z&+%^R3^+qOXBy1fzNDo2ggLDn7r+V^YAq1qf}R<4N-8Q(9)5B7ty^KZnbzhtHh=-$ zneAUW@Z_x-9Bm7}bIW#J>lyd)F#+r+>f}8os zSjM>Y7b~?7HRD^31f$^rz9rEJQMd9~S~H$$4Y48(K8X8N$K-~Kepz<5E1?0!aAc37 zAVBkf-+_8cq8ZM)ds9FFD|u##eJFqPH7z#U-{K~=LnV4z+LbRgjdhM`*7pZexYhls zZj5mKSw10o(aDpoJ#HNxix-?Ks&6u}R;eF@zJK~lq+l#45F_^lKPe~>EN%%I`JrNx zJi)B3Fg}qo_hn*X@fXWDfo_VAlP*r{R@8z^w!Ur*x(IOQM^u!}eG-Eb(r%1iKBc9$ zKG<||6h2Rn549SNuSX}<^d1l2o1H}oqm;(Mi8MzZv2ld_b13QEfkYOo^&qn{NK#~i zuDbg8Kw-b&Llz7Bqdno_<^`dPi@Gteq4W6l78S3rt*@!xBhRRz`)ivfyTFCvb5Hl29OrEzQuy5+OOEy+kL&74Mxr-Qj(?*d^veXG~|Z6b-}DEtnyNxn5Io^E-T-3?zz?X{J2z(-@PLC%xb)K z|7`Op%V=#dQb#U9U!@K5Zqu%ZHQBh;hhxq2clcdg}pLjC1mOC-e} zIFY(pnOPtawFlsNZ31%h>a7m(xnNk=%lr2Tgltp9n_j&X0vYxii^aOb7OA;5`~EG2 zQd2_%An*d!w%j=jSaBdntcTLZ*k(B!!S3?oTNis1=#D8l1#M|-;(Ud=V(>u4$HTTf@J zzh_^WU<5e~?IH$G#rvYUnVboH*OcgMDt`NcWB-R2+%szGU_X*y(^u6caLHFzww*U_ zvMDZ^saLHgr8@HzbXr}rs1`|(2>f_g?qm4|SdoB{J))4$N6mQ~`2b{^@=siw-+_hj zh86g5T-RBZ*VXYTpKU2i>Ec&|bID;do!VzS7|(6hGZq(!cl(m$Iql+6iI0u}>#aId zl!sDou)nRo!eM5&ViAv11D=yM=tgOnn_64rk)|y2nrp=}CB-mahhvvH4}b4`9^M;M z5)d2=LWjxq)s*E#>tlOgS->KWVbVRPxnfBfL>^(0`Sc~y>V0z_PCpN&cmrovyV{WF zI+^tccEyd?%_ObkV@f&6j+JGW0P_ueeg~4+OYNG>K4VaJIeT+H4nm}f>}zKDF@O`u z8;^lUj}FfG%B!pn4>9B}9&1!^5(=9CQtMx&=Twu4kuShwj?kH}yZkbZG_XKYm4*Z< zj=gT!iR>ZeJK1g9jO^SKaISDHh)IVG1mwMc>qc0R+N*b3MVyCtH>shHqFXyZH5@Zt zw5zzS_@B}+i0^L#@MsM16_S2x1`DwQkNFg7ZY&ug9tw3-3CJ>`hE(W8@z4sLI^Rd<|2siJc0 z{w=8A7%|s)6x*)}Ji=xw-{0CEv?lY{!S<%|EMm(|=-O+JDaFdT&CSUolsEn&;E0wpzp2@N+pWCW->Rt8*-N z%~#z0lDYAt5_CTgX(9a3GjdTeR|_dtUY2>69A(;}KuS$*IP`zQ7EA^R2{w9@v0syO zPij2=p;ftQ3TV=5>W{QBBe@7q3Lx@|%1MIuhmy^IhPJDNgEeZAh$Cd&(TkF%zw3ue z7B=%v%acnm>sekL>^^-KP@aMS%nNz?k|3DFWwuKYa@KeomQj*(bUhi4S*21&9VV9p zx%J$Uy#4b`6Zxx(<@D5!-+iZ|;%hm`^e&Oo_JDlz@>w9m0!=CBOHcd1I=rd~o?uTf zeCeKVR;m{<;Q>CpiEl}>g!Y86H;S}Lx87KJADpw(#&jSi{~em4igjWsjFvHU!5&}TnuFn#bXHP7HoYFBW7=AapZhl^)h zLqrm~Ft+p|QeHtpzf=u$VHY6r@9aA&vM~WIZqXi4U0Yhbn{B45lKPERm6X^V8TN7I zm6eO~^EFDZayCb^!EeAx4#sj>YW~|!ef7>rOixb_fOy5u2fDOCSfQ<*l;K5GR<<=c zRtlcTM#Tp`42{eg2qIv=0S$7ACm(+Rr;WZoXxooa9{ew9d3R(VQyI`sHGu6k`gsZ} zsHjYgefz^Htf*+;5tL_dGHAK=0UU_{c%BOVLk$oNCGM<7UsBAYp@$@#wt-xP-H{AD zBlzBS*D8RfIMfgdS|8Wk+(JIvLx(>u3^Wfx3+!9^0y7Y#5OB;^0}p__hu>_}%8mQK zGow`4EEMNGy!#Z`qJtRq$ers`t9AIcE<}}+S@8Dg1WOkkGeZkZm`oqn4mj9Xm{Uo9hxZKQ6PuNo+RO0Pd5}TVUZD5ngbR7@ezFB ztw3mhpTu0LN5MX}x17nl18MIkX@!M5v9g+Lxq#NWf1)s3Xap;61m1mZOJnt@&z=SI z*H_n{LZ35^jR8Vr&>=C)tVu4AJ8w^j-M`79r!UBsOYs%gyqN)UywME>rdD5@QB4iUNw2PF@y35 zB&CCc%Mg8b4h582=bG%1_6|33?tv`5c|c@*6ew`zGVK4 z!it^kzS7L#J&TaqZ%>{amY0DKVrH*ki>{JwiOzdPQl1WVhMv$|@F%W$7;IAY3v z{nqoWE3W*;C#=y83i1aWA;2O6lRgSqmZQzXkiX>(IuvJ^BVVw-SJ<8#$G2c2IP$_| zWY`f?>;#AX1bGsVF95==UG0grfN>v9X#^@3iG1_##Hgs*f!V8_&1PUnl9Z6(wz^S@ zf{Jk~lrbF7^C%B!tJBj{*#5crCz+`(OF*qnFwy`aH7R`|Ec{SN!pLZCg9QgDb8JjZ z+?LN$pw_;R&r;^gHH%fp4UIDeYP>8KKMaav?Y*V$xIKZBUR=2Pgw@&`8yjcdG?>@^ zUXR@9v>8>@sIru-bd8JpU=rQ^V>R!6rVcFx2o)usM~yU-K0~K(ys_O%s4=9{i2K zfW+#o#AfNLmOPfpq@jOjp?RU>*)|$E$YszUJ%Con%K?L< zv4&dDvz4Dn#6n=z-08O5*3_0&^WH4@U;fa*1l4{+b7ge&ZS4`YTr!8XmBTVZkTUzn ziv;M_s`CIM%G>+8_AACWeD8Ybw$oCBuDCP?cLI(Oa0g!YJz~~wI=nbZ@btK}RBKi# zTnZP&e1?2|K}WfUY!e51JA9^JoHl!w{*f6OMeog)&sMxr0s=yc-&gTaz+j^Zf?n2L zS@g6e3a$G_ZDZeQU@uj*~?A4cn*6r zA8nof;**k+X5^igKzh~k(~1c!Qzj=l${GChL?7Z+c1hU|f2F56&_0(aFKq{#)-l9@HkY$! z$<%t8l%%JB-#Qm|a&mF0jmf4`_PlW?Bmdjh7VO$BZKOQDMz6ZI`8zV>A^Bg#PB$vj zhQG#Z8+<9BuxZ3Zc*p!a=y7SGH;V1*)Vcd&FE4&(HUVF1ZGGK8L}H_B*g#53Y6%NL z#BXPMQ9&A^+mxU5@=5&*DqqJA6_eGqwKV|7eZsD;-1Cos#|)jE&`%JFt_;9tc{ccI z2ss9ZH?6O&jn|*gxgi;En`zGX<}UpgAd*rSa7`nysZq-jjgF3IIZ?dH0IPYraYi~; znA2JdzPE=*;M)K9FBjLDf|*&~mB&CLKjaS_Lpr~}#jYy)eZvp7sU`y?@SN1vx*H<~ zN#QWsgh)H>P1oDQk|DeK)AnSN$=6SlqO*g*yg$syVpUVPd z3pUlzV`6%DtbwWWn`aoHc@(3ARj+3@the5`>4R-tV!_kAsNH7b6R=Y%n&T0pB4BHFl!xZ&^jK@5Yw1ZL(JUH z9KSBt*5XG4v`s0sm10>Z%aoTcE5OI_@_`As$Y(@=K%>WNU%t8;dt#j&5%0>h*xL16 z0PsHJ5c86`VG#r%+u7LovUNOVGN{YOpeBTdUW3hL8U`C8pFcl8hwe$;hz3WEvGHmW zHkVUpr0Z8%&&Z*jJ9aWr=P-$f5KyhB^oqzS+L;ufJrw)<`CXmE=5g&H`272EG#f`VMkW&W_hS$Eh;Vr z1Ha7uBE=!N91VR8bMz59`n{=1%hR6d-hW{V6#0!yKv1&gPkjHLvcVK(G4d5S_Zv$| z+5afgKK?^@SS>LSS5iL6Fc~5Pb!#tD!RdecEo@PsJAy|%ZKGB#Cam3fhwP$33rmy3 z<{f9}b|Ki36LL1dcl`^4{_Tq!RZ{u_!xo6k&)=G@E&p-()Z$<0^4s?t%;aAnDj%GG z_inz{xkI6)0EJ3R+k@)@g5bZO=a()BeY4f4ehWmpF>lx(aRXkK)y!cp@cNAB0qvr% zV%|V`1$;?gbL!ctsNl^*pN*J;32)om#JsMPpa>6uGJuD__ODyL%wPk2Z?5KhaHU^A zMQO4{(+98%m_Y+T3)Ha0lH~X9T_G1e)0F%$Nx5y8m2`9j0^1oF7|gf6q;{KHm?_(G zfw_b@ouP3YR#J+7Ap6;`C1WlW2JH38lLU0IT{KJd4GhpSFs$0u$`ZeHcaot})YP0A zO0A7n76)Dh04)HPA@~buTET&PCICtI(3*6?^0;^J|Kz;s|J>A%3?Fn1L0iwl<~H`f zWO25?c>bDQfA!ZX9tR%rZqu!vhPiqC{wG7j3Pi3gF@qH&&vY;`CoPk}$7Iaw>xWvX z&hgdT8 zK#9YeB$S$u06*oOXX|Rn#OW@N8W!Q68+@;^Bl%%BNG%t86Yun>sokPtVxjxQZHBBK z;+Q4*`Gf`b z@p($b#>T$ zUhTb)!X6ozwLFPG0aI)E4?AsGc`B;Q`G0#s;c`hDmFALY{t$^8`<(St9gqz)HS+S$ z&Y_WqV4eoXFz`E^VbK8%V}w-3FyIzz3kx^q2iTuWnS$nL{&Y*0@}qHbI;eOgj`Upome*5ZK6@QDnxqQHu}2-Y0iyLsrx*MI`T@mC%Z(9GNA zaojkJ{v`C%yRmTx6Otq#oiWU$v!B8Vb?OYk)0fm!n|x-@%XUmao|%zFNxr($88K>d z^&*)cJY!;M0c*bIxfB|=%a((z&nd7ucYJp8O^4)RBVV1NfV|M--+J{LCXu(kRdlp{fheT>{}f!Y1wjct2A`{0Y@O-`6@=}t~?LREtsGWo(Y z4X}68ye~bc8rb>y=lc3~I@>X{wY78SS>G>M%~f5uw2AxrilU(OgTH!dHH2O0P>{c+ zTJIjvc1!8#u;bEt|9-T40dh>teTC8Y^q(1CUpuHzEqgfcZ+G2o2sG20lTop;Uf*zx zj57oF2wo?6gjf?2|MSdGFPS4(FRmlRkhMp(9p4=d!3zLy9rEn%=h*)|RP4V$9He+i z%Us;xvSF*?V7y+A<%3OOAv`)D#`L}}&zz3a(GpX;;)MW zT)4J?vy%xsCQ%JrOGS;m$j=RnBD-Jnlxf@h_giXCuYrgZ!WX!HZT$P43(xY%sQuGo zqGNT@>lrgZT>s-mcqsH3*OTLPr8zcqm!Egv<-x8BL5CA#Zp8A=NT;Xmh^zA%SDi5L zDC&}Y@GIQF_C$V1Az?Z;5q0(U=--+td7w7>wS+X8SN@Y33qk}MJw8S3TIuoSP_o1} z&ypBR1QusZ4T1N!#RO{&p=T=iv&_mTLNSwVo(S#xvn!aHxsH;0(XnmS3$A5~_ zRx7S*15qUirYa=MpvR2e_F7Un9(AVj9&WVAY0)XZBRD9?tGi6!>d%&o7#UT;zk2H5 z2ZZU_CL|Oyme-_v(3>B1a?0VY4_}Du3x{)8F!_=&aso%}5)eeYHgp|cCP0Zcwr8)` z=llfbNe1|n-iC-Szp_7i!hzsg+?(cQ+X)E>I0SuuigW{nV1SaMViKE^vzz@WiVhT9 z?$>}$_OUT!;N@JUt(CY5ooHepB+%6YVMbmQKjghn15cI%Y)3$iUruh!)n1aCw9+On zV%(0gnW;%{XjlfFy4*uBl&m@q0V~p~xQbIu5r!JW z`pqt())$sZ`v1lSxbzT5Te2&7KMzXT?n@!Eg4!@bz(U4h(}t z^??N7aj@7-shKiDXRd08XL34sZLi1zP@2a9UCqoM6v2mR!tm*6td%P_ioIh++dK22 z%ytooW^1!4t&-rXzveGVLh*?S7e@2mlV?IptY5@NPzRm9Uf=zg5nfhi2WBf5VsW<$ z3!~PSt21yUtW7MO%hs(nM7FJo2?isHIezx*o8@vIo!WWqtF@||L)+I>1VcPo0rjMe zwLUI>>oWwF`->~TjT(XjxWuLE46@IFYz&D(Nx;(us>Y>ieK#I%StbpU!_BXFlJ@4C zIkhDvJJd3xM@=g{2lzJ~>b#SpKahRdvIKc3(N3Y=(czjuFsDeJ{~c18s-a2PRFfoS z^@W{YDS8?V z0dg^LUd_zS_s`w)6T1!H#j&UG;6=6G9MWMuCe(H@1TbLkIrL3-7DZb=FVZX zsFI5Qb*{a(M=cI$<35DN`PyfHTJUp2-Uw@b_o*~~9nY?)m_GdENnoxF6E!D9Q&BO* zDHBxFP`sNQukDPCoOUsf4l#~T9MH*K&V5r}LXxg~t>4%(oRCm}jmHFRrjOV7@*)Go zWQ`3FdMzu52$Dd#VCMva0}dv(sX_}2M}B48XH`d;a{A8#0|c6+JgkhSbky{1W)40& zM{NYYJ9ih5mGr0UVy1bD1}2RzmHz6J!>saz3v&@!OPZ&S zk%FmNw9dDTo%;Kdmup%VGUTN@U8`y*nEg(BTjD-)LtfXRq5q6jOhnV+ok{7h)`%)9 za6t+{7aUz$DJmMYGrc&-oaZ4Hr?;N7Efe`9&qGd#(+m4<4&b^I*3+A&CUeaYW*5Q` zA^^BzO6KYuPS(NbBOq*e!VC1O(kj-o4J%&*Gv`5rxshKRW;I3Zq$o6@W^#M-O1iNV zWIy}di%7Yb)38%sXF$#+tlFEZ_PE9uUG~x+#ZyLZWzFzw7q(hvR}zregtKVk*>yfeSm*%)4}lbmzW<_r1#e z0e&6uaDiFr)0${>C;YL03>Rd}od$ZcKKZyc0te%J?-TmWlP?Ipzd(&NZ{&d;1BmE@ z>W4=r80R?d=5N7v1p17ylHJ(Or7u`l2T)-R|B&iok82!oUPj2kahFUC1aI8VC+Eu_ zrce)AXX#nOzSGeTFnR3YQy2O9g=X+py!XH+IXU;f-s$O~EB2W)-=bM<*Jm+-Bn^eB zEKE3qj6AT#p85$L<9gCYaT!m&a7h)GoWLgg!0>#Au$WfN@A$yXbwqiYbZ?JmJdgcK zRinUs@>3M;LLnW`kDt3LGh=C$m5JUfM#>A!Gd@iKu1+@dwx3sje*-LTP#KV&Aprf! z3?Le^6jlBL-6bY)5*HP9nTR@gK3s|<70u7flOy15XspevNJhU~#yQu_9sJTtD#mV@ z8`L{sBfQY9d3nv2-2K@BF>UrcmOkmG#B?Fk#CqY9*RMCJd==i3{BXw-P>x8%`O)j# z8!IXbgC)1oGd#fExwYf>q^ZOn38Y{b&Td>t2jHp714K!CQy3`TOS2gT)j9ORViZ0S z46!CVtvEpS=5~AfY-IgtX=P&u*`|8U6`SvM>i*8J%@MKSXHLnX1M^%M=VtR~fv@9s zHN|7KX6*3?sg)XHR&GNDGC>gx&_v1vYAFV(+40 zjlKE0^?DNRYbLFTxg*dxz7vdc7HicST00vC{T6Qi8Ws^T!e|j&q~5gecri1*ons{v zq{6KEN1p|-HW#N6yh3QPnn?$z*VAhlP|FK-Rq^d8uT;M4Puu1HJs^TfmsiZ-%`Ins z>-U#EW`W>X&v}R_N2=(+CoLkmQj&-*1r6bb@YUx+XYQWIk!K`wAc(3ar%48>pN{Vs z+C-k;2Cl?{Z{`;5GVSAaziVWP}>;Ma<)+mps*JJA7;gS~2H+D%j-PUCp**9`b zzbKG*=F@Sobcf^&_=ExWyrh;?^1Er1U)89=VqkfJ89acnjD`hd90SIsla?`>UU1IM zWf$sTv2FNlq+AZ~q&jG60L>B`L4V5t9VfG{*dP%TvU~KAZpueXJZV65-@Zj+)Xr{o z4nsPCj7`OuQ&Ew4XOjSz!qG@;Z0O^jB}ZVp{wZRHo_{4N@p@>}0eRE7DJ7*OF$`Jp z@O!3Tu12s0Car0a@`XgmGYw8={kTA!8{S;PvR_d1jkzLZGX!lH837d~fa|$N2R0e*3PHc|uFNX6>)?akcu<7zN7H zWIRsHAByAV)xpvd3`|VtW+znUv7IYGon&EQ7BJ!OFN@abnNwJ(r7AA1s0f5|iU7@c zcNd+n=NAZ>`k{U&mmCRee)r>NgY9)Dlss;Mh_-H05l$L{p zRf_cw-h5`=y6J;qDhzmTI8d5r)lj_^&_&#azhZ+iGtkA{ebY7c=;^(wqEWEqK9XEh zq^CF`rX@A(xpO2m`W$uot+k1medoU*7O1z(8Wc@Xmsanxd~}zz?=Si>7%zX7jjMel zw9XbW#1^6=B{D}0e-zU>BjYpgShdA;QW@LxT`UNFqu(%lb1tQe>u0}O@*V>&lh%Zb z+`IOxd4z7!e?nFSH|`&cGOcL1df>sYEhM4iNv_=dKgMa{0nJd)+_1YyZpr?yNG|5G zVs2xtq1`X-kwlWPuYWRfUba$bZ+a3km2Kd+lJlU<{xJD36+`0tEFIzd_r5ZtZg)ND zaZ#Yg4UXsgGvD^Tb8UeiFA0Ql_GK$A(=v6~#FlG59f2iWa=AJ_;Quk2kErQMZ^yM8 z@=VX1C1K?)e+dwb(Q0;tsLfBcOdy0LM2(C@jn?A6E@HH#Rn`Of2@z&>?nXw%QO{JU zTI7F10ge&!^EE)PiYyN4grNSau+GXTqI6PnXgGXYG|w`+c`S#?0e}Gru$lw}*g~LH z8=7=%)9?*Uzcdg6x1K|ACDjhGj8%%-E7tn8j-CiQbC}n7WgH5j)L{?xE@`?2L$U&2 z(9f!k&jb1_zLZw78mg+Q)Xh>jF~CG@FrM|s^20u;S?}Cl*LW8x8~8G2z)PEif61&z zL=$p?3}Pe)Cb&l7H)2`=7+*m4RhydnTNjaBSwBAZ33=+EU2O!N>~|ZHV}uAU%ewo~ z(3g8%oyS%tIPpxYBX7NwMtTTUftrW3%w9Bw>-h`95A_MVko{XAS=WI-^6Hd%$`R#U@+K1Y{9fwwrCOZF(RfF44yx)&b7`tG zsMIOP1aMQtFgXR2v|7KY!Vyw^D$B@7P&TR7c1DNP27=m(y#e7zuk)F@ovQ73z%iXG0 z48DlOBIfR1If^Zw-xRrmZ$dF$rEYmkC%n$F-?IR}7|V*oPL+Cl|93$m*x@;ZUyIjzy;S z!lb2pr+-y|;3f`;w6FNc-`=P%`-T+&eQlA(D>(wr)(^S}S=a21Tm=W%GK~uqz{`qdPcO@;ZnejD1F%WdwLWVmlL~Oo|NWg)6;hEeRAlkEXfFZ z?QMgZGI$%N2^`bab<~x$`wPUe02)+|E6Pu|%q=O(^tn{j#n-}me8R({=m6`eBu>hE zY0D(QxK-4c<6B`a1RztQ8;_ZJZbCwpzuRfLlP|qqwWDK2RiS2+)k*-U1T@Q~Wc2jX z(*eS$ZnfR;sjiAyZb8a1#!HJkoA!)hCrgcSz#?U=$E@NouXWpwN4Pqi)PIq58U$4X zK*I5ytFc>)s9g$YX~n#LAOsrG)rHzs#^-k`Vhd&p4NWJtM$7ww?X%4uZA0IzD?5RO zwS-zr}PCBflFycD;(hz7zA z=a0um+-0pEU+Dp!Hu=Lj z@V6hX1P=1L~oLJ zdE72aDotG2_w2ZWeSG{^pDPnLp!&)>vOnavLZv@yT^_k=UG4~ZxrGG~MSf-FQs7M9 z7>BoLwH=E|L8(&?W0uqoKch9#)13TqYr@zt(04x^-I5(+3he}t3(T;3S%ia=fbDuM zr>%N(c2B7Y3siwF6Vir;GaMjbVz%SuW2p1C*8-%@az7VD}hF_eZ) z7u%WvMXy>|aNMh`@aO8dWDrT#^ zH~RN!(^JvDKMDBx9qkPr0lSz%!&_u_B7$elQ1iWN!%Ej38eLcFMNwSboN9c^#zJ!dD$W0bK zj`u@e>s~ob^y%aZP5}JVIyjvW= zram9j!qE1kDGj)@PBppl|gZBU7IAiF(5#2f?Yg86Wjs`?ruT42_7^^LUY^r^GY-g`akS?gJ=TO;RLm`tPb zbA9QpolPr+y9ejUz`ilYjN-|ON>48XgPH(l{xK#%*MiGBSlE&Eq!sFl@^XuLHV?D4 z49)Kyp?-#Mjp2fD>X+^>hm**-d;HYe_*S)y2tmPjBLpgm?@7PBBx?gzw~ZDC!iZ*2 zJ?S^!9vuzf%;r)!r=`37Qg$d91heA!G?+F2*P}yBqzJ;JvI0`+I;mpZZHB%TXs|(arBZlxQJ=kkH0@3YH1&k_>BX7Jhc5PwP4w`-Kb8T z!G-D8b#0dO!Q{+?sI;f|qU6ay@DQ0{?y5WXS%1YzaPf8v<5v4uHsWrMyzy3*^$x!~ zS5X=~8Qk$&%!*3#s> zvWIJRW|B3B4FWbT5o)qKT8U%Etvl*SjjN)U6<)IUYjP`5j=Qf~lWk^)$M;?vnf8|A zXEu7i6<-$YvOjZkzNw*)Cn&PhZb55PR7QN8?NspP3L)5^a0sCe94{5wRf5#Z(QRJ-g|+XZDi+&*>P3uNHea*?gA6LE`Tz4<5>8EJnC)=h}t{R*W7@{&DF zw?d5d?%xPRthgegj20Fsx3O__2^Tf&-p~YMOitF;BcnE*q)bG_7ETb zMkUOwZ!$xpqSW+4{QmTp-qm5g2VN+j=hVq=1Nrkp?tNQk+-JXrY3&Vf!t<~!ac+q+ zp{CfWmxa1Eag>FTTEFb0rw(YdS7{9TItw6U`C;Mv`d%wX=>|P9q*^+VJUV||imipm zqKx~)1d0Z}P}%#cG=);%U`s<*P+G059%T~#_JP#}b;Tvitv3v5 z`RO0BJ|?7%c%KHO`(4>^abPfdz~Q9=KEe;Lg19aRe$*D`Dfq;@oCZ+r|5MA{CjkL` z9v0SL|8kI4^OaH8Dg*3|KGwjWQI|s&$)xrToBw^4vDv~*N9XT5_E9Fi0($VfzNe?* zHe4qe3!F`*;U}fFj%kN2K?8%6oC~!e#m6{JwRYn02l~2~i=Bd&7hQooN-Cv%NC)*U zY0)v(e81NLM>FHOxK8ZO82C^#yWm~4U5%ESG9|`tZk`qpNyr`C>Ca>m$)~9pB>N|5 zH~R`QrYi4Wlm}O~F(9m^cUPRgp91mK)GgZTc5#dvQp3sWS-R?l&Sw8Y^~Vg2@a1}A zu4IEY`VH2sWorga^TR@zW97KYW?7;au^(?$YBdUCTXs=GNSv+1q+r(Y64w zimzhDU%^j;2IJ@V@SW=015~lUL&sEOAU~}yVjUU}9#Z;xUNje&FWxrs*(TA!{F2@f zx%54{6RCFzhx=}&_tqIaw*=j`t#wmtQym>-M!F5$mYf2z0w;@cR&bphQF%6}hdH#Q z-6=_~a|L?rd*ouaXW#CEOoXlQmk9WatygF{Mprk=O7Hehw^Z;xKVkGYtng&uTU0ZR zdJlFJNhc{D)ts3EBeg7JRJ+@@3R|@&fINXfC15!MveF$F4l6t1QdbH1RHUL&^Nqc= zFZZk9Y|$Mt4mIL#I)|a_nxU%dt>>Ou61sJE?w&Rqta1CWGK|kAIaE>{OOoeD$i`s4 zZyYI&=iyTPU1t*zu;S&#mV5y}AI5*dlSw1$-O%vq=Df3amBg?|$ZMvf!>M_|5*V$u zD^PkiSxk>>Gi#ev3+*Ff@mV0Gv1`%?$y-NnJR&DK?4q)|5~!MN#a6Jl|DLPbv&J-_ ztFe`udXpaoy*iWKQD7W^x@~86GHJY%UcNfAxjtTQ-Fawhi)PufbNiu@U8(B`pWe`h z`s~-H`%Q;0)yO=FmO~o&&J=>z;vjB7wzlJTo}1jPC>dE&%;1qC#d_u4SYH@9Gnc9nXjsPbT*eH zP+{1U$tBPgCx#q+X01Ehrxhpm&JK1CbK9Km!~fkUiuuAsh!=Qpltt?g=7N!5a+xqY zy589PsNGAmQG);4`Jj&uHS3Lb?Z|j2pM4SL4FV{t6ktb1YoM$z_@CQnlt@EhHE6+A z6y~WVi~ZKwO6lG7kM z7ac8S0uV8nb`hclQ+H5&yfY|)RL3{JL(UK2(snam{)fZXtis&h^;2V<(rM{xtT>!T zZ$!nDTbHqIb612R~Hd;8=XNx&}2J=Fbw9KM7C5A$Zp!j-YCH#~wlR|*x z-ti^`)!)Ls$M8NEYUJbh?8O}{QR;$-Db+{RTTWN*53drs&CjGg_j1c;qp$rqAI9bIKWgxK>6lwHr>Pw8_Qw*DnQ2Gp99=$?R1>HEd1VCrP=ivaW@t?nWe*tqh( zq)wPKFh}dzB%l4yPc!#CM7M8h_p|)QTiuv<4#>Cp#l>1+eZO5FJqga>h?G-OkB&;` zr=(dE{UJY=n}iLoOT#oPF%NbQzWhCVf>FMS>@YK5j)9*Y;P`*liImIMs;Qe-tStI$ zC1{IAzYdcrv)ou4^UXIL%`T2&xEk^JVA?9oEBT+<5hSq~0<*I%w?p^Y;s*z5NcQ9o zKXGDY+_)`i4OZ9RxXhXt_!i85*(dk!VC|Mj0E1B4jUy}VzMEU_B|udZV`TEcFI!<7w7_s!3na(`X$1xR}yCn#HH zyry-)2N$1ol3>imBA3W$O;tzJoyj5qjk(FglqH0ta`JM@%7!y5Zkc-5P444_G(XwG zEE+qsS`?}#wI3Y5Pw!1d|1UrqW?KNxXOn2NZtYoP%+3lYF_HZhGt>^nR@i3+7dAermkPP{qS-sTxq$o!)^0!4#+<5_P_sWDSAN5S z&jOS5BuqwELY>&JJp<>-lSGXHZrT_6l8M|011Lq4}KGyAQsIDNi@?u?p`=n@M5MGL(wPnvu?|B)|7#uIa~X-^x4x2RxQTMBtD| zm9R*n)OgEEENDfB3pHsXFgpU==Fm(-l$9L`b%&TdVsZjokm?vLOJI$qR8Wx++(#*` zi>$;7sRhl^e@>aUKc|e*0NPCwxBElnxu+?Qh((OTQRndz3Lg(^?xEjNgKvjp-1Pp= z%C(m?H=Wt!uTZ-jZWmgnIz-GRgp_Wnbe2>Euh_EElC{?8 zR~6gGyD5JT{T&5)2PF0_mF}voh|)>5&CefzSPGr($Oc-`?-= zSk7d`e?y|{V%WPUHI4`2Nl70FxLbNxcMCNS&5I}QkTEeLEpj0z6w>Nq5E?}?mbE8S zv2o`k2@$#M9AsQyZr00;s6~9{D=g7W$lB5s21UgXp<;{Z>72j)0boOh5V~%wD2^j2 zXenXq9ek2CG z8Ic6*jxPLcI%3w=aB}o9EDeo%+h{rKd$SzqL;V2jFj>T0`wkTlBjtMjyjsz5H1g}~ z^m&i}uR~GCFWh0X6+aqbFQlul_Qs?1GXb|*Nr>$3*EU^Ab~{J>0h%(eom=<(9@A1v zKWG<=U7Q!o&1cv!gmvFJ_m{(36KCgecdGbws0Vo(#m4Tqh-tkuf^+L!3BVD{{aOPi z(9@5h<|R0Rf6!7MjeV0t?x1eG*V8-}Tf?>h*8Op!My&0g&fAxt#UBZpqf@V~4j+@A z_v!v4`+UU${A=ZIdf;E%JDjP!iAk^dJ#$=mt?PL65fcgG=|70@TyKkfgvoovJcL#K z$hfTaOM3LJp*64q6A;m>&lM|j5w5TNESi;1TAermW{LG73zDO!p*y>@vCy>Y$Z;lm zfKt<8)h3KLWY*Oh9>NDT&(K8~ofNpB&*&Q^W<;Y!VS)Xyz*n+Q@n%j)!~U~HkP|fb z4p5&72?iwCNTpP*oMDTS-xh`LhIok9Lb5S(;jFK%%ex*_HMFlI08BTMQIFPR&3dW? znmZg4Ge^BMuOEJiAoRSytvNU=pI~lOqZ%fWEu#VO{LA39rvVz>t8`qO+5o+bc9rLs z>MI8^7R_LT-0pKeN;a`rTrZ;ihHK13;kO;Ko#z^F%@>@hH6^o^Qq_KW3i1M%KmsHx zjgflWLuLCT{=UDH#V9d8QkPlE@eumB8oBMK%2k)mHhyeTSuQ`Z{fbYzpQ|USZud9= zKZjPd&qoV7TW)ccHBDoU&o{~OR*vyoI*STrHrAF!`ybERW&~ad{%kYia}NGveKf^; z&rbCO2P=YZnwENv`VZkTWrQ%eF885&-WjN2vw0uqa~QQ0f>)d%Ns-mo?T3Eel`8K| zgSjgH$-!NO7u!;6q!hh~D|c3Yy89Fi7HfN#pElp(%^pSX!{ATmj&2UkIv>>uT<3!9bM8?R@CjR*RmxBfL}9fJ9+A;V7jiG<27G-Snx7 zW$YpG9r@rVFQIxmZ#n` z!KCjFQ0z4P1DA_F2qGR%YSi!HLF_OT6(5=Y?;O|yBawW!%@*zWF& zx6Z{O#RqAYE4c4nHpd(gnF$2@YsHVSBJc!Sx6E^4n2~trsq=08W+jUNe6JA;MT4cv zvX8~Gce{_2eYrZDI~~`^5rDkuTXu@1-yi;pzCUonF6z1;niW_TQMOtW%t{&})aQXk zCq*Bb+*wCJ@gjhr=%(-S$FQSd^WM+O311QLz4LAZBEMF7#(}7;-igWamp4-l*>6*k z$mM`hR2a^#!{qf$XcwrctP3&Z_t}WX2-ripYM1$@Uas0E*W^tfC?*HRac6JN)O1Sg z`rW?lUSksCGh&X)^Ik?e-ZDL=?Xo8cTC+OIq$Lhv%CEVUX!HN^y?8aC!9o?^t+G}E zb=t|sb?^Q?Dp7AOM$*BfcW5-fsqDovwE7S%Li@(g3XB?(j!&$ivfvrogccXKN=?QW z-b&shl5ox1Mzov5J(g98KHb5m5>QTI!OS(#q9x2?IO{4hJz3u0ep(MjRmpaYevHC-z}MF6y!wR_R!@Y7@qYx5Tx?o z(6J&n8jzrd#X@dg9`GG_9)kSu?|ZvX!JuWOc+tY5qLxqyv4VO3Fr~9a@6uj5`gUTr zrUWbr!d}e{-)0v}u{3`t#N%W=A7e9dEpp~0Ew4II!6fv_BrwxSEkCk0{IZ^`&Tit{+|LCV@n%`g8rnx8|DjOy~+zk6|6_J$#L|AAh0W(s1#P?*HzpSRlF01%g8B}ts ztkL8JY%<&BCm!AeD(U-o|L#0bob^$VIx^E?X+>U1Dg6AQ=8lJuQ4&}ziGsq^4C!mp zskQE++abMNLarN!Glza)fi}sgx>2mzX8h;D6aG9n&VGaMFFS}JYlEL<^K{kxT2i%_ z|5q{rmcN?L$vbc;aGh%B2KJe7WG})p6uFDTNe$UU6OP{tDWlXjl@zWHLORz5^M2XT z7}lxVDu9wKvAFlrQ&ao<`(Iz+D$8Hsq;+qD#w(u)1_oG*NX7^x65uyH4(8_V7R56@ z7mvhJMmfnruJPEI)cwJ+A=?guLp%kCix&L1+~g8(d6HuId3nbk{^g0&jgy@&d)86O zTPaHs5LpWp94}u^4HLtT4X?wEvf=PW?ZL?*O4W!Seyq5jrNM|)FJsz@6l~~YGrGQO z$46hNvvo9B;Lo16=lr=u^)`jx{tSyk27Dl^O}jeNNYmMy-uGgtehFjptrY`3i>#qB;(@kj~ZB2QxCrE&>dM{o9G!x4{cC`4&&38q(pR7YL27e}3?fK*Tzw_Nyw^+S{0;sWy|RrYO7L5dTVMcHLl#SJ7< z>A^Uf)pYU~?zC+CjyV9)(hoeg%9_I)Hz%m$;Cn@g)%Tny^KX7Pe#X_w(PBcHyP_wO zba2FO0#-?pTfNrSq!W`9K%H7^;M&{td!;)*#&K?U^=3**-Fh}s3}>Y&NXn#!uY1jW z{_-@s*XPgUK@{3{$?&Mt)tpIzYDj-8ew z1Dd~=#|KrNpl#HQO{u9V_Kr?&lEq-(W`9P0KIa>%ef-ebWRM%r{`4}%mYL10q5N5t z1TKkd2v`)t)JBtU5`@jc1W7nR{qEu6(g?T?*1>gt4f)*@=6VzNqYT<;w-M1=EvU^3 zvorErXSj{EsK?H3e8lRU;&xm0E>E(bta^e@VSUYXYl=*IYA;6>RI_-wZc@y9XR9_G z;4R#u!XjhtLd2BUSF&TbZx-YI9IFaAtZexs1QMS^UH2Z)5T03oL2}IY(K!WZFzY@! zKXiy4C~<6V7Toj=0dYs=`+*eDt5Z?Vh>);u2vFj6(GhkgH(3(#Jxn}7 zTE@oCGWfgWxuu8;s2H10kAikLA86Q_2PZn_ucbdIR5ih{|@><`j6HF>+gRDy~6oVqU*nde*6!i;lG3a zKe%mG{y&9h)*M0TZ7kc_ZF|OsBuJZ;kIui_Vp7i_Y}X}GjLE-oJu>v?uC?QQX(EaC zFp!f&XzY11RW?$?D{&;#`wwCNl(Biare$BBU3`~Vdi^T8-Av|lpno|2S_{oGwzR_e z{I{x;IHkNl6e0`a`n`%v5&z-$@qjMsH8(LLBP`trhnS=Pu8*@IkMEk35z=z(-|iXAIU)n`FHe%O|6|i^Hb!^ z2l!P*+Qaw{=z!deM}M2or#iyWU{uY!Y6-aBM8q#LQ{eTYeNwOg4z|2W*cj;^3sws#ezVzHzl1%SwuNUJs*&iw( z@N_#ZhF@bG*q}3!CHd-452?1%-tD(5fg~gfcDU3&=+Ur3T9)dU6%gpUS%TCC)hE^F zhbgfG8YZ1ji+j5$1b=7S-8H%pamyMW7ASv2y`Nu>E0ijE>V#Pf`PFirF;fFnk6cl^HYcm==%X$ZK3e1%1TOpRzs7L<2fP~I8MC{K0flR z@AL6oYYSpv>0$S<=$R^~K>6LW zb{Fr-pKHgIiT=GD31p8+J-1f2Hi?7?gIqw&BucV%_Gzv2o>PCcJW;6B(^xsN^UJE= zg}$8#_Be7X_j#xOQpz&sd-us%1&D{QC1oR$M2l@5CA>Fr`9oq7eC1eU`Ws&i!FGH< zg5?>Jou1WG>SHk5$LksG<}^X~);VWSB0z(WiMQ=A+#V6jl1ZbMJ#_6W24=1l_Nb0| zn?x}qUDm^^{86@z)j6MIz8t$F%n^cqn%ueU`i__*FRhWK2W-qo6iX5gN{Yy$#jFE` z4%T~BcxJ`p{sc&km?(qyM=N%^WR{$WLFDn|`o#eb*ggZAmc6Ur+dIW#O-=1cC?1m% z@x`>8{nFa-3skK>J6CL+4kVPIqTVFIUY-e+?2nw##9wV~#dU?z`FDi}UB1I`hRLLB zWEV%QR_{*nT&K%|TK$4TBLciM!cIj-5o|ZBcZ1W|*-!nyzMGG#y&CO(5|(KvreJ_} zzkX%OA|dB(yQDjNvpQXuS5izwAYmb`dT|UD|6`?|NIpiRgGsQ>_1fG$nfAj*A!gih z{sfX>NoughjJG<+awZ74hH}w0dAzbR@-aQ$qmq!ziUOx^UvFs@(QMwgBK*3sDOC83 zM2v#DC)aY!i5t?wnm6G`p|4}VX3j4gx6Pif?aNWje}RK_XlTSiQ6Z{hN%DRbyAShB zXvS7w|KK50S1c*%;vHEc36*3HLHHgvoqw|l7)~g$&qdPjH4At|I?i7?MkT{19&}Od zp$~9^9^kyQC0tpC3co*%QyaUSO7kd%9f8P7j^mh5>z-fx*y zEil=Y=l3cM=Y=lk6UHAnM1*_Lg)~=trk7`wRM)2N*?ZhgQgan;9IBrQ_pP6Q|9}o) z=tBdV2u1a1ePyt-$%FgM=RUO4)ziZFu0WI+l-Y&Xso(id^?>ek$B~S-ktSPIdyObf z@|QWDhNvE#FeSW@ATNBdfe-J+8zv`2=Ji`Khf)#|2_bXSSRGX}HL^1tH1xEMs(jok z4N>oD`Q6(u1rJc>{Tv3_!y9-^Lpw~NuCT6=6OYtzzZxUkLtYk^z?3p3t~Y`RPQxPv z!Y(&&QpfaK%>CZGx(3k%SjGaq_CO9+*8{8_S8lAsUs%c-|lGx zS+WP2H!_Gc@)gE6s6Np;2q^ z-g?uh{#}5F*EjRhQo*V~CLI(l)|4nooUXs+%N=jX9;1@PJ7Z;b81(U`Xk$f_QsLd_7j@Z>HX+ z@u)k0{l;Utl7f zT}VjSNpN#vk_k|n$jLe*r?Np*Hw_*L+7C8ObQD!cXLwyq@f6p5#ve2&&d4=s-Nv0Z z_!t%wWE4GJrOIN>T_FmCqZN?h5%Hvg7FzE-mQh1WF$&9=MIrcc=zZ8DV8|c2QHruy zc6$w|f}a7|(BRqH8dc6LCT%d*&V_wZI{6S7)H3u4&-5p)}L8 z~Ex3#`LyxRgKCiV4=xul<}wA9-c`w0-f^^hKBf!cQndDW&Cu0y1?Rkl4wU*Dm? z{hSJB!?EJ~mx8{GmlOz;VNRZnpfl?4lgnn6DrW!7YL0iK$u8$Gr;Tf{^7`|6@M&ic z7j-061A&m&J;D8IPrs|?q8M!bR%@pU6V>y1G?N&lQF${hHw_duTG({KsKiUrQ!k3p zzwi3FAYv|}d7Pug3KvhgyVuWGdQ``RIjL7X^stALP$-f#V0$mfaNX!iiWEuxR&9T}N`V}?eCF}@+NqesJh_)mjP z7O14aJWNQdJgjh8{%p@D#To@KJsUkMwhZ0%c3-#-GeBN&N1(gO-mtF>wP$X(=vBR+MVmf7EWBH; zo-3jcjR?AU%3*Sh?ru zXsfeK6XW1yS;-uj7@POVMeU(J+7mV(k)B7DsUf}KjikwkZ()e=J z(3&JguiP!DrRQSANI3Z*_s*4UZ$!lWUZty|5`cl%wgws#(_Y$1I+W{Mg;o$HUCQ1z zVaN3jm?F+~E`?@bIUY!1u(Gn|toGy)xZ$R2a>y9H9Op^?VI=mC-?JMn;=z2QW&bht zdmzB|s)@XBzY9$|TJy#DEOecPNN;t#Vb^iDQqz;`BZ?-b|Kogp@O{mUpzUq1GScTH zRMcYS^PwaX`50D~HCa*+WQ&eJAR5V_P6Qn|HqD)|JR%Qc_6EBn!n;t*KjO(X%#7ygz=~U0ukbXf&c&j literal 48482 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 H^!fh)rZB=e diff --git a/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-modern-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-modern-layout-linux.png index 6ac01ff51be1961642a744008f8505e79103e16a..c69649ed0e83d8b3c2e5f02f20dcf03633aaa6a1 100644 GIT binary patch literal 48089 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 literal 48058 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-redaction-placeholder-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-redaction-placeholder-linux.png index 2149c46220c3122d35ca65a54ad9a55fc2f1a286..78ecc64c712d831a1f68241e6258730a89814943 100644 GIT binary patch literal 51640 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
4#A#Y9o^4 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 GPyY?w-9vx? literal 51629 zcmeFZbySsKyEcmYlMq3qB}EBoC8c#CQqmT0BPre8T?>%z?w0QE#bR+L zzVF^+@BN)`eCLnz*BOVQ<5}>`yyu*ET=zAXpS-L%&I7UsXlQ6Sk`nI}(a`Q`qoLg$ z#JmgsvhpUV7Ci3QDT+hT3i~NG(a@fvNxpll>>R%{=cG(9HG^?L&i_K@J|Uym(-->p za=czB5*63gomGA^(5|bC(yrUcoy4xJKx(;RxV^=DyfZ0}CvW-;{Fj^;p||2850j+9 zgYBGBPpYG(1A>(JObO6{>Q= znDzs2xLK>nC&nXy2SKbIWa*~CGc=LE`|`G-uT1bC+)P%ipLLci~gXyffv87IvLKap1kggG*nS!&CX3(;%gsr$|Wxqy=|

xoy`yKTmc}vZ?n?`wM*mpw`QHV? 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/highlighted-search-results-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/highlighted-search-results-linux.png index 2685052da94129328921d956f026fd44d7b9ac56..347c7a5477436789372747515e074570e587987a 100644 GIT binary patch literal 17045 zcmdtK2T)T{*ESkJ1wne1Du{q|L3)WIy(+zhDjq-BY_t-mImwnK`NgYUUz3uW za9vw)k1tmQ?Ka9Ca+fHQa3!VdVwDD04UN8_eb`g`9YwdrA1cXm1uPG~&^BJoZrgV2 zoRSccMt?|=xoOq{UrlGdL~VIsp5BxQdR%xP9nlWOG0F`JJ$TB=@3dYV0CvWyl^C8? zxlY|bL7tV)A%Z)PQOOX(vx<8l2FW&@jgv6rT^VvVsZ*qjS$li?g^5m3P&X>z%+Aii%Tk0fBIvinP_siO z>{Wrjr)8mj;n%Muj~~;Ap07=@iMyN}xbLt18<~JWt8jl&Sre{ram;iJy9t)4}{lX=Gbr1%=u39@-$~J>tU*kHXPvUemrR#R0 z@=TI^JUxStqU_o^9tOxJBxRI`w)=^RA>!n4<3nJV?~>NRZb=LEm@_Z5UPkCvRDoVz z6)=p2rn9&km$LkP|MSe7KgqrQ{r!`TRlH8duV1`a8H6<4pqeXla@G=!ZkmFoGOvr# z$eZijs^Xn;m1NB(+mDF|+RPztIJ2DZRm$2>1wRubRfYFvJA3PM;_xGER0o^*jlTe2 z&}Mer{sJa1CB?)owrK9$%_k~m(Pi1wSMzFvkj;E&cWq*LxYqCH-6HH}Wn*N84R$mG zEo(-l+MLML!X(&V1BM5WpRx!E811;5e&?R{eUQ7CGuYq%Jjnlif4VN(Zl=1r+G8aT zxI!4NNJmGvNj6vRMK6(XS%E*$c^b;rcKzZdDYx^AlTc-o!uJ+n$R9 z+R`C}4J^gz%^LkXpnJ?=*8?SWb?4|z7zYK>?CflY8HTD|SS|)tb7K_{AjQ7gCnS$R zASQMzYHDtlD|Lw2?d;Yr$(gqX>d!PYeY?N*)(dDP%l6CF!VWovgmmUhBiVxA2F0f) zPYngG52lD&x7C(*ul@adusIvoVN>pEG0&_FDu+9WwEg)o0rO^zQTF>~%+LD7rq(y_ z&5wC5JJ8#AH|26SsE_&i*6?_p$xvU6lYNb?XNA{Y_QOLDIV}-iXMA=}3GT8yy!v0d zsoDaw)M_Lo$J!A5cW;AQeoKVj-ZYc5w@=V+uc)ZF%bt{Eh%#$V$3b17D-pDGr~c*f zIN%97Y~uu$s&RP>K11~wrpk&+lce2&tq7mguXvz{0Q6~>x583#W?8!L*(b7an>81~s+^+eZN{pxXD=qQ(Iq4h78aHo3tP72zlZ*1O&3R-U%GG3k4S8n zRZ>$@#KgsR!R`lad>N^sL&eL>3Gzms8m?bNfWWU^mLwQ}J@}lhrj{q}j1Apl(UZp1 zOUlsG(Hh_|D!LE@eSP=#J3p&S?-|5ZR_b|p^m4Po{1<=TCU|MTn0#<_6zscpwoQOIMQYzqw-Pzpx6H&@jwI)KeUU@A?6FPGZqEafPnM7%#f@( zpZ$}DyX<+|j~pD(-XS*Yh+JeNMUZZsy)rePmo zrJ`?<>OVFXr~=Y6($7q-o#2y;104yP3=Q@})=y8!d#?*3dvYx}eIuZ{H42pLIk0+ZPFf zQaXb6n?rEH>Ya-_c9IU$fbtDLMPU^vysSs zQ&Us2H!gR|RCo~q`}2Mo!CP#|Yn)18U{^c290eWSA7N)--_v!r8h5`Q6UGTVOsOdKjzSF00t9KBVbZ~E$0o!=r3(s1g2)a218|^Vq*&n3ul47D!V&YCq;I1`jGkp$|S~n+Vk0#Nj!9aXO)4HQjmtYZrl66 zhSi8Or)r;PJ1n{h?MmpjP7 zlO}RVQ<=)mE4Rh+?apM2k%e{5spFxN;LT3-rI&e4eFvg=hmg&5bkmQ2@B?K#40V-W zqF*?N?Ye0~Y(}!l!~|or2$xq@lFIxo&Sa($Jt$OT-7%dbOs%52dQi2Y=Nhl0Bnhy` z*DXTftl-cc+c?4V(6M#x-Ld@)Uy;p?^#L%8Oop+pt~$}-(aARvyU~P4jv=kPBf7409z#x9!Ez-_Ttk1Gp`S>rMn41Z`p6<8G%4m&z1>5!}w9;pl2kU z@*t2vJobN%iwbXc@Ijy2$7FuYosKSFSq!>wj;@(_(XFo8e^=wYBS32Pi05Vwo z_icOMefMz$gos`KzEBLN=I}1{6~2PQfXPc^{o>uif`X949HXB$%D2N60dIrH zw@1cZTtq$<7k7#j2-%5(75lpmlN0@w=9F()3_e^lvV>Lcl}Ic~hMo+M=EM~npI?=) zaMzXsyBco(3|t%#ggLY&q!;{lw!Y<8HDp?TbdGAg8UQ=XdRxV*@&~$3X#C3uxo2n9 z{q|?NV;r5GWj#1Ho0UjDdA|n1e}lXm{0|c%lVL$Bgnbn(EFa^4=YwnZ$4{Gq3VH;@bpqE)g(!Pm*2_7g+k?FJ|p8KgF=0Ks@{-jI_K$w5J$(9yu9vH78!cM zv~D!h4n6eB>xaoAPU>EH2OAuA{7f|IH=KfXUzsHCz?)Fjdtu&=AtLC9Zo#@xtxkdd zU?$iPRa+jtZ-(8d;I1njj*su@`M@IMH~?MqNo^_P4u?RM)xgu0xGt@ccK)p;v6!}uO}J#G>YQm|9;8Sh9Ng2 zNw<+p^%;SlGg~#2#^20tMczu+l+J1T)ZN|=;itQ4-h~~b2LyO|EgDX}=B3bsDVV|U zXHzAM*nL=&&98QRY;^geDo9vl-p^HPd(v%Hu(k2HH0YE~GT+64VSU?eva>Vp7(;GS zyYbEoty`rd>mwa-)ggnA-)=ty!2*?qv=$aiJ#_1iO3&KSbFk!F&a25Ku_p866ucF3!&nhGLjTUbTOM zkbqiC$$$vpo(xo!|Bp-U%PodT(}Kr+#ZCo|iBmO{3dK7D#p(QVZ4kK4yK)Tz(3f!F zU!I4Uc)5CJ{nVN$fY`7Ts~;fFem~KLfUK6|v0)`yjZ)X{r5Sji^}%t($8EsdVRzpOhbF-!t0+X+h&f^qqW^><~41m%Dms7u7R^Ez%s_6wgg!b~r_b zayBIq78O|?7aMbb*vERdKKYD~ml+gXXVgVd*IAxa=QhAJu%kb2LFq3+Znv=8I(NEQzducNb*4Z~#D zEN{zDcUxOyQ})VHV$nOC{B5Nir^G*9UDA@nmK>DZ@}I50z5kg|xMiAT$HKBha2-;6 zy7k?3&t!7au=O1d2FU>>BJE`WzCH{gUTk%d>ELbo9F~=DTuxntbZ=%G%~%t0}#7xq-6IiJhf&UBg#v z=#{ngtzzKb$0XZKi~+$JsnL~XHE2tWx9e)g_S&YQt|>bO5l7qm!lG^7A}Czpx#|z3 zzSEdbma8SRoKP;V7sCe0GwK~{FPY2U$jO*2EOYxxOUp;2uAvbf{{ZGCT3Nb%8cNIX z=KVyG5mUpRk6$f|99^8JLO1DlIIAh{D!xCpR|=|Bm=jDOVhPy+X7g8-IWMBRrqbne z&C$6m35nO<*TSC_vvXr%6dZi~pH(|3ty@`L1rrU#d`L-M1qYoF^~H_49F&ofw}S%e zCB!7A#wTTDq_zgrxcQvj_CLhlJ3I0&b9<9t0{x9ZJQgVWs>%u6B7=2Lz%#(dB|Z9! zEt_HQU}AyTcgm5^gW6;jZB&Wsod&6?midN7KOeTwo2U2v;iDzaDH)Go8WPsj^o9d% zp1&&al~v)Ol#!Y>GMM@l!)9k|TVhxgR9KmJju?0HaWn~UN_SB-2KuB0${FOd?2!&d zrP_K)S{fh*P8*x~%=NI8rI$SA=ZvRFNdL0GzD32z+#;;077*T0q>&dM80c}*`0avw z3g(?|k&{7IGIulJeG|9r-H>Ej(wyciCi_&9r^TqmP(rL`dPcpWl%$4yXX{?!I%C~l za_RF}g8E&RDIOV;oyh5 z+IJyRQ&S!3?HJbEa;mmf+AC08iMly9CWdC8R?7$jy&GJ0j{QPQwV8|xeH{U#4%eM= z$sVk4M6RDhIao)UA4mus*$dgneK|YYIAQyqaabQ{8a;$oi3q1lPF(B#=v-V99MV{2 zMBTD`Hwv6zywkruSJqt*jkkq(*skBb&;GjOlW_90?&T`t-QTX67A6MNl#Kl@X4DGA zAJqZR4Q_Nz!-q0(@o~e9{fTOZ=4NLN7l(&a+Y~w2mkwuTq-)LX8I(&VPo828jexQ9 z_wgpGmm6ymz2c#nRSF1R*qCN`_iWfvRwwUUY;5cTvqBBw#O~FF#@eC(Y-aZEE(=w8 z?Oa!L;Z%nv>qc zLx-rY3jJMtPlj|%m)Af`YoNMX*Cjfv31Wa*l<+M@-t;|$^U(YO;-dv!7y3Azh2`jo zq^`0Kb=7wDKBMe$eWw97xH+sTz4$lWnjujgqHCJf@Fw*6XXWgXH&4%RE1~pJ*kF^- z5!PST?HmK_rlfA;zf*4KNld@V&DwtMlWuvV2bk6|39%TXa*i%NT_R96`^@FTGR%gN zZYj9zv5>?IFB-X$iCG}4Tc!!NuH3FN`fxdz~Fi$mNp5@lm>o6kK{bH{CKPu+CVPhg2(u;kK>d>M+A>vza@xr}=SAOhjJFyTeS%g~a zd6BSp3{G+lFB&=5N`UcxB>$&2Y57l*@_$;U97xo>P!`%>b&XH0BY3OUCWU+X)3E3~ z827D~(zSFD#j-2LII!`mU8U<@QAvqVQT}oSX1sLdjX#_o>{Q#3s^Mgso0w?Vw(%L* zNCE;~vj{+3x1zvbQ777a5>2ER0`vVWAkBMJFrK>2bQEUs&UKROIvFUJFbb^i=;k*V zQqVLXptB1Csa|Cj=FO#_?TT;k_t~TW+{tkV2{W1(iNZ174af4RJL%TnPESu$$q3%E zlltir0DOk859og&wGqAv8+3ub2wFe9f<{$*-1(l%8=wKZqr5TiX1}vD`KJO}`PHeOvB|4(aeH=$QbuRJVi4XzIY(E3b!cvKe5_o4;WYzl<=QH&plYVqePhVR1+Tp& z>95j&fz8Ulan#$@5TuF5S|X*@QgL!KjS|p~7f4f`i%Do#?iySA-%!!N;xGletE$~M z7Q>BfE_ub7*P{!6>Z{-7(}6T2qBxs(?73Hh*!I61Eki+J zbI5?-W0HNMBd?kTzxsojxG#5pnu3Jyb0uI03_Pz1IPz|p&ZbZ+2=3GtzA?yQ>wN_8 z7>xP5dHtd&ReMeX$vVgm?@yhjrigT+isXpy*8-%<;P&!bQoizn#sr zJ+jpY-UJOiY6Iy!X76b49c|N`p8hH9j{sSzYp!l-A`})8$5a}x#;dFpKIEjI=be{P zDOBa1dXPleW%4rr;=RibzuGrurQZY0YE0ZvqKXY^EG;%zH1?MsEQ9HEGg6L_9{9d- z(^B>K(h@vf>h_u(6qCLqf?8??$WfE7e2V9pEn4XnBP0 z*e-R>py3@MOigVv5*^xh|<28Qy2TR>YZc~?G zq@ZVDUMkqhdjM>oyf{s6lebUVPUU{+5D6~#co#m-@9Fe%tGReD&*zEzax^Zz;)?S(eX-OPWfmE)xz6Y0E(m0QZJzs7TFz2a@6_@Yw3u@!ZV)`n zOzDwtHu?qCff$m}SyNx%W#5eSs`|IN2R_xwwy83^n)f92e(Ic#Wb1th?`J?4#RMs+ zek+^rd6~CvxYoQnc&U-PkoKKoEpSWyoK5A}5G*y@JBa#?0f7uOS6zFJ;?_gzu*t3s zT=L>uIPyGdg-N;k-J=X>J!I(m@a423%pme&?RT8a>Yvgf$oVz_rQaA%Ss@ukZE!s4irC%3zeICkeq+)|9Yn8xWBlgiGc(p{Q8?V(2OJZ zRzL3SD{iRr?`}gI*E!Qq4uH-5p!P_feRU7rrDZHq0T%rPd%fBcLIL-zlEUP{eq(9rNI0%@UrW zLP4Zq$6Fzt)& z$eV$2dSILTFD<~=2_p&LDyD{{g$gmzvl>4OFLdK(tHimx6{yzbUv}rnupaYp4y=lj zQMB}CWxvUI>V;vcyd8YyOC)^qcX9WJI&Xg{tfxzk9sX!_zC*6tZXWjb9tgD#U;%`3uvfO#=4ux5frY;P)DOAksU7Z3_52T=;T*jVIt=^c=CgX`nS`Lo~Xg3(Xmdc%nYfj%T_cC*mxn!aNC3t6v30W!Zb!+kY^v!HJt*v z*(mJ|wNA3Bl$$ZCBCt^XcB;@;HAUvebUu(;6u0Ydchxl1xu`@`E>VLzZ1JN1L)_); z?{J}$DQPktEOSgLx0`A&MB?EM!Op?DUCpy!k8j%xtgXXb+CC+E=vhi1n4#)xd>!&| zXA6<8^-n?fAd=k@xvR^l<=lFu&)HKDNo}G4&cGeFO*9Q7?Gzs!k%i_rd35rS-X9Vo zb|o#Jb(@i`UN0~>sHeAWR+s<$u~>?XL1qnxgtU)BA@?6r9WdG+0A zfAU4V$xV>P1A=!ts4IFbM_w{Ywtnot&QTseG*nuI3O?6gu9zZQvrBv23yx2<7&d-E zv{?Yj8A08rk(%vW?4D$woR1q?iMovsmf>cKI!{Rm-o1)anlWGAHZdI#4!b1Ad)o?_ zg|o(N%ET9RM{PiN(4E(Y$vH-eT>;olvTumB%31L`*XRgqBKE#BT$T9w-`B`t|FRYd zu7Qi4{;W9d-RYs5E2za4V8TTZ2MwVOW5t8vU! zC}E-gomS-PvaS#3<&`6L;PD){Jf5m9`nu8-c9R_N4tjru z)_p7o&uT+qnQ3u-d~A+RVCr{&brITUPG)>dXNdXAf7XW5(!E-7-4=atenLo1Qkgk_ z=Jl!QY>&{W$^CC~b_Mj5E=j|t%c4lo;qGR2Q&qw9EJHAjoIP~b1RRtH)B4ssu$Zgs z+V~ASk{4 zOU79rG}AG9PXAB#c?#bt4y6|q610u7 zL}HyU2!yy$>82)Ejz_I!_OfjQH(ll6HT6#JF?tzOV{UqMv+tX^q;Q>W%kMHD-@yt% zEr33w|GCc@Ih1_eo}u9*lJf92@A}2*^+`*9CcW$$w$=0cMn{w6qwMdK@YcuVpnF79 zE98aAUGoDghk;Mr}{&ra(ck_QF-K{ZJgT&!etuQZ8RU;Hp20^Nao zUA3NWwYt;{u{_=F=l>TJlwVebh5PtG$M$x{C%XN55{cz>0=)hdPx$rU?_k7hv5Lnk z$D2T!Psdvyo~J0q_;i)#)C4=T6b%;Pi;^K|uk) z9jg&QM*Th2%*n|q&zGWO}X#4YS4;qBYif6U@oWL{akYQ=DIarF`t zyEr?ywJ8h?42+73h=`PK?I+OEaAr#7=@%%xcwugC?&;~N!=1U5p=)RndNjUCS0^hh z+%nSpgob!@d}Ja86xh>h_{Z8 zzNc8;TlYPgJ}kPQg6j400&3dV%N>U{<=?Eo{am&w7{KT-?HBa5E?A>#Z*i-rXlQ5% zcK7v_<@v5pK;iLE4zuePrH+p690oJC?H+-I;Xr(99~hVb_&iHP3Q9_g2YkP4YHAYI zeF(=VCxJYeSuS^OdVIV?j)?TG+ECAQomb75$}ibrVUdvy>FMb>!Gdw+0(}}98i1`v z^q74&Gp!n%lz2*^(Ad;eE7a5|>qBh``|pmr7Keo797@mC@ zM#N=jN1kK-6O)oArXk7e zoVhB47Z0EvFR{wh6n|BSdixu@Rt|$hf~7Iil9Ch(iZ-8XYLbE9FJHcx3!=p@64mW2 zEJ7iW5I~Cpzq_)R?m-SfrxHdmBUcM~Kt2S~d-(9-&W^K>5NU#X4xD0_OUEQ2K!^|T zZPslxR@oNN)hzFr8$foKmR#-aCkrH`c`NGcr2)MU5}9etFUbGjgch8To#XR{(>fw4 zDe35ln29O1aEn*rLuIAt$ef*v-Nf*;|CQp;^mK@$TER=6@rY1ke| zC8@Mj@Mv=KsAHWGe|seuP1Ec_qF*gb~j{}XSF z61dN^w#hQ=66EL+D&$b>y?InDMRMdRI>1R4mUKt>Wjyv-fd>7cCpqA*N&F#K&Yl26 zBkubOL_iWn{?*ghcbRp1W|m5UIi1;~kc^8Qh>__fiwBUlS~a}q)_z(IfCepW);Gxx zd2um^h2IUu%c@-G=i%p_^qm+VZ^n-Dy?T=UUV(!x5Igezy@Eo|QoBmX^$SKOCPaIZ z{AmZ+P*!4t@RmCZzz4cDV~>i;kS1r7scy{Rz&D$tDu%_uI6%u_KE(|M-|StoO*S@N zV9Ucu==+1bFfy|aCB^^`V}V;|6K9qFt-?tsSF`mKkQg5s-p0s2Tw3Col>KgLUSt61;|URP^+h*SWwF)6voa`ngzUDf2lo`~D4Jtle^S#7f;d z%uW7>HXa_1TZw!C9BjZV8np^g(}29FxvHvvY|QpDHl2iiaOIfvG+GQNHC*g=!yI9} zOx}hJ_;FvuSb-?cFFRbtzn*|odVf#kUc21O0{vrpRGvOBdMH!I6*b*?CJ^jB^Tpig zjjAf(@v-R*0BxF>;Cc8Z4*b*#fklIAoIX5~Z+UxkjH#@skk0h99^5f8*Z312-5#NI zpfEh62b#SM13# zhULT-zZNfw+&xT@1J^C8QyL15Nz5@&RXym{%R?@nv`1hT-61-1blB!1nHt-i>Ju*<8?Y(+A_#x-Cmj(x+vjihIG1Y=rRl5JL^ic z;FaCBTRKF4nRqV{{4MPLP4;BDGyz|of z)vG|$u7!|GKj%gJ9a9hhlM-xhIv4``WHaI-W+UIatMv9;Dpj{| zz%%AKFC~&BB=oDQ#H#t`40yx8Q*ek=M+qp3$0qq^=rTF*$!9w3h~RX+cS9RPLBO?-mNWPm+1_48e-P;`{K_4iX5SdW=8IqVzjy?FK7HNYt3?u+~ln@ zX$`9L^%)gZL-bT^HR8bjfB?KlkqTLti^=82>eBN?<$R;~x%HA#ABnsa%*T z6Sqc~p*j&eub7_sL>v7Ua@5`P~4E$N%=$gIIYAao!FakO*e7h zI~&Z%-#<;V?Pb%8({}}aO(rB6+WCZ>f&D!-7^#JlcqhJFXwZby03^Ff zMX6R(=YSplb)u&s{TAr0Ek{(@*2`@+_YjS|7Zb)KnnVSU^SR-w{2jVR+c?cRLKb2l zM+Bg5xvVvH^a3M`3+BL~)rcfxlMkL6sj)d<_f-4c68P?uX7ADx-xfEtQTPy^@{)&! zCy_DChy;||p;#Rv#u#GFO>wj<2jnnWir?H}pInnGks-EreJ%9 z8Z2LifaFX{wGx7A4fHv2mS)mhl}O8xy>!X**>J5BdNufI#^~(wo)Cu8?87}X2WUg# z&uW7Qt2zvOtq{)_M2^m{oMjTsj7LPY+lg<%f*e}Abj=sXLjmYEY`hp)e4f86%xs{G ze#O&6fnENK)&JXPJz0!83FCp7?2@Z7 z*?;YprC%6bB)u=B6^n8A0MbrqVxm}QMBO*FTaesapbY`)Iy27@6TPm_jjj!-7ist_ zO?TN-xR0RGIA1~V&fo(XKc<-PQfHU6h{9CTFFghCPFY9siWoswFH=;PEAIuJ);vud zjZdB=QhJZ=9KrG^{)4eAirQC>Q3}kYGI>Gy)XS_O&8R3&dG-$Ix1wqHy5FFnM4RI z8o&%`QuLR-f@JpCwXaiJ1*RSU$`joNwS3TAHBHx6ALSzvO2#bppkAaCs05L!YJosq z_TQt1=4qw&&C7pINg!7bKisJ5#1W;<6TIyendv~wYg8*6TKbmMBeJxHUVR*Z58{yl zH@BZmcwRydvU2~21Qtk-0~0RbV-qK((*n97`{yz$vy;;DH85b6H` z1pL1`hC^ruXlsYes&n%kymzHNSEqr$ot|Pj%|Hwks=+Hg$+X^1pZnGl4Gffd2|@X9 zJ0xNOf&a&k>hnogSNP?|uNyytT2AioyvY8WFJ?-iIYZF)O3k`so~QhcY<;qg^fpVHFOu-FmZ0xcz_wHYro z0)eTjIaz&=Eoz0==eI*coAFyQTH+DbrS=x7A^|{k@Q}S@ zbX2$GRbFl`Ak_2q<^cpIZ;@cXLV3F*PS!XT0QL$Q{dMH!@d^8`I6B2@Qb@YlR%#FOf zqIC;oJx^+Vh5ITPV_&#|(y`W_5hE4O1WFYD^- z?%cuxX)g!-H~bO&;9Nq!KK<$zLS%az-m5vlmirZD*yW0TUxR(G6Dm|5&&B$s6Mw| z!km{B-@<=xV31f=Mn0vh2MPLzuI0B+q;%0R(8MPTL0w%Zxr9_6P$*~&qjwWOZeW9fRFf|avmV2z5=ANtT`uh5ywl+$psGj5D!w#Fn ziBJ8No^>fHDVdpW-s8dwAEKkZf`d_r{$fB58IJ!hHPtNmY9nLz5moQk-YJbp@FXT z=_MD<8Jr?1-jDi>Ioa-h0|ls7iWB$aLf8>mt|2U&WCxb_X_+@#BK=95YdeZ$&wQU)ut~o!(JNnrurbw87R3aQP?b~ zfOsm4bQ^;Y#wc$E|Lq(#)#A6EegOw~#~WlC8zuB{62m`W%?<$87;}_MtiMHOQ{(=D zw*frTS%o>hgKfISUd!ON0W>D6a#{9TDfqdQ-62eSADjS7-1e-j2m!E2nX7h}0f9ee zjMcg6mw#7TN&B|;19<}bKh_oih`APvOOR(-qsQtHogJaXQscqrvY1rLzkk#8%<63R zbySj@N3#s;f=_m|0Q`g<55P~dN8k9`K{A%v_N-l0i0)SSMV;NlimjxnXOG0*-(2_d z?*(T=8UbDex2OBFtfW0N+DM!9!{5Lf!N3b#K6YpJqtGC0X@Ue&+`0?gJzs>}##v`0 z)9dt|>~UIu%76V#>sHZ3NupovJs!h<2unNrRhGU20Mr2TZAK^Ci9QT8xeK~?_a7CJ zIhwG~B!1Dl@q{gX_RL)qpZ&GQMM}4d_Ba_9saE+&VaZko$>-wq0M0x(gu4EFEELm} zDpN=1;cjc}dsyxEoo1KnoxAq*hn;%$y(l>!2(OT7eMoy9m5G{{96M*%z~$gu)xF0> zRJoK284FD*m+31@8*n#!!Oee|8z+FdJuZJx^s8X6HUA0p3ponRFOT>sSy^xH_bkl; z#Qu8!h0un0gmk?Jd9yTZb>dKT)TlAlJRzvO_`oVO(A2H~R|@nDuo#!w%kAl?kX`1m z9f&_Hy+@_NzmmU!TPE?+Q^&W^b$Pq&7AWEtXY-SCxU-tf@fP;JoA&n=dzZ`2l(6|v z)-#XhB!2hD(2044%sFT+@1>h0?~^gp?XDw4aDx)uLjgjLXF+N~C*C3c=(e@&Jc~k} z*)QoAW*6rJ$C>KM8!46k_w5|~u7wv(;4Q*bNUzdlT)Ysf)?~BkG zUPO3f{Uhx1a0g2&d8au>$=^woW)T%md|26qs+Mhu-a45##{WU*@B!;G95(i<=k!bS zJ7{e@nXOI&bQx5BaTv0N`oEhcn`lNEQ*>na#k6#@=Z2rc2lJUjg|??K8MF)mhvybA zH#UMwK|6VMYoGT`ew6nis`^cUsljFw`^c_S;wke@UuC4kK*&{tRGf>N#`+=l?2Zbi zf(pdI>mCcv|3!6N8UwaeiiAloDO z8)M(Dq0H-~P}gFk;pn?#axOc~vO(CC`BaRbTsd?sC86=w{*St)hm)Lpqu2KQ~_cxjfg%&MPC|+9Jtx&v$7MB)xDW$l((-NS#yQGu?h2RbeR$PNau;A_v z3Gklh`QG==+&}I+cYbs4%=??0Ig?CwPR>4i?X}ll>$5)Vgnd+z#eYKi1Ox)%%geo2 z1A*?LL7@9$IQM}TuiYe4;NzZ)nyeJ4bclKj1bP9IfB#OyGjng=!&gJ|R_KubbwV0L zg2+}Ac|3?7JpAAZ%TJwmpFU1iM(BLh#uT#0>=gCS^cU$oHS7o()ejt23_Q)2Kj7c8 z+xEMye-p_nEyqN`w{hZs)V(_Ag1B0Ee6_khkR?hTVu}L-eGIhO0&c`4^2O0Tkma`y zY|u|EVmeSDnVc^Or1#&ivGWHps+)VdoBQ%iNHBf>937oyi-;S*ntFClbq#z;=6VP! z{YEi#BzfgJ*5I7efH5zfGe*q6qOi-m(x86&?IU2m(ctofNNVYihPsED{_8XN?D_iM=BDRORMc2L;v5&pZ!t#}k7o6_@{AiU;I}^4 zy7;4K^U}Nyb#o?!Ixo_g@-_&H3Mf&}6!WqkTv1g{6M4n+=A{^)d++FMGZOv*Izb@l zaQ9TH<=h@_1)NY}e10I-!3Q!qJ(QIICnT)QI^3X}(R8-<_Wt`<~c6)b}YKWcyeOuu6(bc+Kky9bFOaa z*M4&$IXyGkWv|AP*kXTovzXJ~f~kJZ#^wwLE_ccW+uQ&CSL$4`Nd+M>U1NhFQ5DbC zf+D$JQx0C8Y;7P4?hXPZeNWEF7Z!}9#Y)?{TJl*>y>G6`jjmCXb|GX@GA^vIPSj-9 z<8rNxZLiGSjQ&Ms&~1LkjiWM#Wgc8up5R;Hd# zo{Y#sG^WPIE?bMPPSkdH_v#I}=o!uq<626+zMH20I6Rzy9^ew@94$A^L8htu`}-99>Ttgx zsdlrze)dS%%{iK&mKklXtv!`k$PfIWw$5#9WyQN+sKK@|q`$aFm6$4!3x(RSRQaGE z(I|-9&fRWH8e7at|NX_z4viGD^E`X)uI}a*m2;%GV=8-yi=(V4YCnhM8Ilh0Qp!`K za1aTQ5a)UGcUH)9ET3DME-~yVlotz4qkGnBeCplgv{ARe*f|S2o2&8&u(RW&Uu`E`aC3DP zSXkZN#kBc2kVsiuTVL#p@+5jW=vA8-^%<-rPeAw0=!$jxQ_9L>j`Gp_O`(1t4b=Gl zdMD2}x=t2T+{E;EcCO8P2tEmxT2X%dIDyV@m0qf+4&^7A7)0raF;!}7&gKm;dJ@{s zyAMAXHx(btXFS_#a6sLY z>apujo|&D!ptC@h)DcPb_4VygQHD4h+;r1*k>0z#1;++qtGkJ0IjQD+d}B5GzFlF& z687&hxGNVwTV1KBAi<$`XgM*mw_gbK3x5*vm|k8!EC`>^&zq0_cm1C)7)j}mW zLrCN+rfU&Qv@zWh!~EK}4=IeqU&bjz?6I(d!9-yl(SE&kh?dfQ`&xaktDoe!X|w^) z)x|Cs+1$4RZli?!YPTYQ6&+$4!Uyv*WHtu{dKon|@liwWme2~kJ%aof;~g}cM13rT^IlD!z4&=AAz;R2lsOlf#{ zpQ^;XhJnE`Vrt=X!^Yu_LLML?PF>$IWg*VhlR?Zp-N3&Sa7VbkxcHOY*gzGBm5t5c zWhLO+!vt|~&9OykCKQFV`q{9}do&tcv9PdUQ|6Sa?)WB?d{WZm_%g0Vvd&&_R3lDq zd}gxN19jUXe!KcBBUwvJ3m+D5U?QoZOmU&<{Q^}8@EsgIGM_Z4sp|NV2yH+8>CcFm`r#GkvVIyE*#**qjzsFo z6I^~iK74&-M1Y>29{NB>TWGUPx+(=2l0~&jvDn-^>T*i*F?~%<%|Y|Ux1;ToBmG4S`9W0c9W`BE|Qoe9X z;De3+?7ld9!RsRER-A-M^(&nKD`|)fxrK$4oQjJ5-Rwye2Z90&TIu@bYf6#`K_RUxt+%b;@NnH;5MtRt(CZ16$vpF6Bj4vggc#DQ$=}` zp?njdP(?SlL10VRcA@xOrf{~4nkw@@T%xE_lW}HFvq@hbNCT`$?Ru663RMF;a4Vhl z$AtN{-j1|}$Hcq>V=(>azkYpQ8KU#OL=_kBLMOX!<+Zi677A|k`T>)}-|N~AIA{BBhs7DBJ1eUXD5g;@ z9vB;asyGiTKtNO>{1(X?Y$Z@As>$LYng%xQV+IBr=oU3@WWz4@XUit658&v90*D?J zIr;4HaJkz~Okrru?}03r%brhTHOgu6j+?_vh?Yx*^>s=bn$C?AVx^ZfIX6(YvcNt#9HT? z#q(pl(GH^7Uguuzc0-YXahb7zcv&-ayOpS~l9MjLoHZdW6*>t_${6>PlxVd=r+DFuVW;4f%Icz3(uf#qH>-wjBMi*((GI~lCI!U~qkc_AQh`fcK3-n)M^$2Zy3(z2(yNfhOG z5R_}xP5LBH?u)viVS97$)j#U;iSL&S;6gu_b@avpy~Sma0D(ATFF~N{x62Pe!}r4o z|MzITOy&Z$^3i&Iz6spRknnW*@v5hv9p$^xLf3MW{x%Tu>N(w^x=^AUy@bLOUzUwWmtSY&z|7YPz)24&E3cJ?%#x7NlkFJ016WoDs%K!`yL#P2imv<$yDp@-HuoL9O#jelgQ(w33FEDysNM=wpP-p zm&q0PT)iyv+5Zt0#sIEwXk#NeVR7n-0^YWRzdzd}(7c5{z}&%09AW^s^N`4;is`yMIqo*y_0LRd>=L zC)bdQ#V9u;v&y>ToAn|xNdf_?g_w4rAKuF}>~vo6*4QX>HkQoP3D0$ZmYc|Y*M;PS zwX1v>$*XqheASHOqx`{LCI?kQNxCu@a=rqlj+8!jEtE?E1++8ffdPB*$^(O?{dG2C zWMWT0J}2YxlK^7}g3wnkE>FX3kDo-~XFQ2m+YOp&3^@+p?xr(zGwUmUJo2=uiEV{9 zp@1nv?KZV0 zPAj&W*e2EU@E0Fgh-`1XWc7Vup-Sh6+s}AEErlrGzZbBB5S^J3mHLjMGw_-MB)|xk z>sV&KyI%B|tvwL;>_Bw;EMbIE_BWk8KeOIbQ<21F7$@@ZPCAETy~UxY4%vb^J_fCy zb*|HSitRsOKd5x2e=AzN4T}856wG&{HW?hb+fWtHX^0Ebas$bXSs44FMrYhF_7v}9 zd^!Hp3i|U+ljgq=W23iqLbOVty*8Vc+uOGLOyFtZh`o7+g-`pw^oY^Cdw~;w{oFWy zHsm*5YBUt-j}^?zaNsBtIG($ge>4P{ti@iMmE_fmqfIKp2zXDVl|%gv{mh)KkgH)8 z#1)*gqhqr^ysvz`M@dhTMHJf8^YEgy^tDl&8!K)%<6bm;{>dRyC0dY{RCyeFaPHWa zrx+JK7(uS2{DW@7%XGkmCP2w*qVZS4vwSougl+0iHIs;dfS|Af%{CR~py9mduL)~t zkqw7o=h?mtmMi zeZGHTfs2Ddj-isGi$f%<^w00&hCIy|i`ds_vZNlQx^t6}v7Q$4w}!K@fkzs&rA#QL z-yBVzlFXW+f90F)(4yWM9bH;H=bNPxa6I4@U`$6&UeLBpZR`7>_N#;HMS5e%+W=!# z!Zeivb}mi_d#g1^;p~0B^XBshf|cm&YfmlBsUuJLX3ub!jJcl~2?T*l_&8pH=2}%? zF~MxPS3taeD|hFF`#3VA^1Cu;e%#uo9ecKiZ{(Y(MMoMP>0i#BPMW9KNOJFNSx_H_Wl{Za$ho;sz;g@w4|`4uHvc8hmfml&zhP#A=Y$r z`_isgDLwr@-rg&pfBE{s)AjX8`^aQvL$}ktsi-nGdwA#^%A$vcWP(TM2i=}mk&^Y- zh|K@4f1Z{R0f#H(j+9T3r6k+bq}Qjis1oWb+chcVxhIO0-<)~-`5IKiGHi4|)Z|F^ zcgbw7Z_f=+3y52V2L&~0L1~JI+PZ{>t!pM;yA7#C1NVA~t|drW8>n zFr9;ci5j>JAhl_20Jej?;<-OR$^qkCqBT3Yu(ZmuC&_IfSzg4SKa(L6)pCmCX2)V> zpD5%5ZcN|&`g3aMS>IQ}G%EUzF=;K-@OX==j-1KQ7VgmY5z88>oS!gsA9pIC3A8Ew zYtDXf@mWz3bff`lnv{~7h3L>r%-+(`#PO#jJ-B`8;WgU1!GJbqXK!s}WaM?EE)XRD zYG7pOf%LBd!6_ZLYWwdfP1}gs z!!h9p&4-0JK7!C`Ik4d8Z%f-WEB0N0PH3{7rJX9Kw0!-ckhfp;CikPDw$_w&jUE*h zRnFVDJ!?7j2GL8Z{#+^jJl-o!0+gJlI56VB?nF--#G4x1&KvV}$0_kmpX4}@w`a;M0{3GzkPn#m}_O_%m%`ygakgwf-Cwb!Lfi*x$a^L zK(QCJiZnI<{NpO6@dh?DJ25doH_Dgz_u+ksB}Z>>AEd$L&Y50`efiLoNW{k%CeLL` zv~Yu^qyWM2DfKNm=QDMjc)}%agk?HU&(8_gh#rakxz{aZ$OhmI7}~w9t(vD#ux+W0 zVLi7 zjD+OHQFofSxVc?q!eR^63Wcc&=p&cZ4sv`wT3uTx3%_;}2M`|!#)AONCrwZ^zRyx2wT;zoi$Yd@m9|4>#nASlW~%F^*|7#w4J z%}5XmbdC1(!ke@tdv%p;cm@oTk;YcoI4cQrx9UfhbenC;Y5Sm>9aj;8B?jfR&9$xUxFib;X8CLp=VdYxkjaPG z%avZugH`{D*`LN^gLC&<`(7M%CqRKtPVI)vw!ZFzO#Fazl9t>zc2h!Tvj`^%K!F`} zWshL%Lhys#vvN*dX@FxQCj==@Up{pH

xUQEBfRv-4z`|^~PX`g%k^9Vmg_8=}mL8N74eh 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/long-strings-with-reply-bubble-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/long-strings-with-reply-bubble-layout-linux.png index c7dae339167a765761fd6ef1dfa49d81ab01493c..db283e627ceb16731617e8dd0477a0a3df3823b6 100644 GIT binary patch literal 96394 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

Ic;i-yIf`L*oP-=R2P8ti9II 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 WCno&f`*0d4*gReRT-G@yGywouJ0J`I literal 96379 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 h>VNY+e1ri%0i&(-4 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

QOu15H_s0MEl^eS(&ho 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� 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 z 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/long-strings-with-reply-irc-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/long-strings-with-reply-irc-layout-linux.png index 937bcb3417003935bc9cef1705269635a85869c0..a2d1f1785cdec0a42cdc91923712f7c8b24532ec 100644 GIT binary patch literal 95314 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 L`LI~&MezRx;7~2F literal 95292 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 TJpwlnu$N>c6<-yIzw`QEbaa4^ diff --git a/playwright/snapshots/timeline/timeline.spec.ts/long-strings-with-reply-modern-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/long-strings-with-reply-modern-layout-linux.png index a11b81693d012b9115f5b913dd772d3446dd80a7..e0906e961ab7a6942dd7c9437c20bde6a957e252 100644 GIT binary patch literal 103497 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 vb3JNE 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%0D8&15AdjH!=zcD%-xO4E|9*XuC2Y06K`uT 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 literal 103482 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 literal 19894 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%0D*u~qD zqM@R#TcG+S0cKxZBxl993A;M2(pMrpU)l;SL#lgamH_L?VFm z#m3kA?Q5O-CyN9Y29*T&O~-VGnX~*7DTjl30%{sfLla-|Egac|znvgimoN2TcvE89 zeoZ02lv32^FYJ_|z3oQUT!2He9m%zQ*Qd)wO-yH5z5D@%-i;glL2z7W61s&-oBj4V zopOzstx?mwZtrmC_aJw6s_5+42hb6oji+3udb;iS!n;V7iQps|CZ$a3z2u$t)|!^q zf=qLYF!T3&REvuorX-l4Zmg}#xUR;O2?0Z>y@9pAJTraIAmSwx8`!afTMErAUPqU zO6F-SO{_m`*gR(U6*EQB+QLQS&EYJ%u<*3KebOiNTV*Im{v(juW6EHG=6$8ZG~*|M z8qv*K0z3Ch8WN>)k-0f3N4E)9JqJC1GQAsPF_kJt_mgiMr~B;U!lZ!;6!ZR_A}%O|o2Ts2|88ny$_ zW2%>~yQDF(urx7Qx?9XL0JuQfZQ9qYuk1}69sQc#z?K6*e{Zv|BpWli7B_`abeH>& zE$am3d_(4ON3B%g?gbhg6kXdOkX)v_O+YH+tkk+wfTy#qI|}4|toMuj9=bVE^t<~x z6)2=z#I|qwD(_{M$*dTRX6ycS;O_xn5>;Gj4G;)#(~&Zdx5iZJUisp>R@%vYF6TF@ z6;7Z?2g;7G4YX{2K&$ou{sQp%cM*0-Z3gDF>sdM-O1PYus&XG zjrPHGE_}ePzCM#i)%fZ3`p}hjOIvrVLK*)P&db(Xc`3=htqEc8bY~*fI|U}v24t{L zddm~gl3SuXFy}`Z0eLkdJL7ANYmWL$S1V&HH+uf_V*?|!67=hirQg5&+~uYPfyCSr zV@zGYH%R+t5Z}&}nw!wm!aj59;?uwKR7^a$26`qfd4E8)$tbnYMh}aLzMzNQ{wVWF z_d^5mY`vnCa)yjq?|oeojUyOGR9@L{IDr-3)Tz(FzOXxcVT$^n&By6Q$({x45Aj(C zJ51gBnU60@HH}`2ob_?j`R;*GzeBQaBRkHs=uoMBODFZVo4Z-LSM{2c{LjbGLl7>& z;DVZyTn!b}4MkE35^wfG5fH2_&f8T<-h66gmXGj8_MJ_1xx)+Z*JG=Hhbirz@5dkt}efS>L%m_ ziQqE-z67S*!2Zg*ugR~O0PGedS#>a#H?IuoL{>Ik(UlY#vu27@&t&#orh^a%9yS~QC;JbuU$g;5v=B$*X zy9Vg*^Xyk^jqKb>na!*@T)Ly7pEh8hvsJHP1fy?IO*@48uLvf< zK4;m=5`(9Zth|PXhfoz*8bjy7JdLb(Tb;w)BPlZd#vR-k`?6>mii*#~VDPPxwU#-g zWa_ z-|(opRAY7y{-ATPF!4t+<>7j11%GNom3FPs&SoO#bS<^Lsdn1&YlGAm5a?{>73FgG zva0dC6Lb%TVcEk+NDnJujV${Wfaswnp1Ox-y|t}tDqL6|KFqJ2HwI%GBvR6la%?H7 zk+Pz4%8lV=O~HK+`)Q{nvUrv4x*P=#nJs?Mdy7Y)AF1N0 zf3IitNnXxY@HGqAJ2@UUV5er`{&4TB()FSls7Q;zD0|4=Sz+76!e)o`bKl)>J=&m? z5L0HmTBN!gqd#%C{+^XPoB4bTeq|OKEfet-A0+K^^moO%<7P>5^H@3wy#nfXn!q>| z!vM>kH+ED)!9Jh*E64iv3G_N^n#EKFt{HWdBonx;#b9c;FvDKS_yDUiJytRARfoJC zPvaiV5t2M|F}VwCD`KZpIz4r(b`}S95-$g#0s;CasXR3x$ayFD@N#LjI0L0_a9xD~ z`>cL=b38N!K2=qBY!WlKNj9cU2quA&U#*0atdcFl`yoEq@V| zO!}c@IUTM0)oE2%c63!Q0`&KBQw;J|ttdFsZ1aTVrs4HzJF5Z;^j8HiGGZ{9xM26N zyiL{ALVy)^ZhN0e1scc*H=B7)d65xy=Ur{grCGvq0$8rXV$Y***dU(wBI

>}=$g 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 L^>bP0l+XkK1#(BA diff --git a/playwright/stale-screenshot-reporter.ts b/playwright/stale-screenshot-reporter.ts index 3a3d18e28..e5fe7edc9 100644 --- a/playwright/stale-screenshot-reporter.ts +++ b/playwright/stale-screenshot-reporter.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/playwright/tsconfig.json b/playwright/tsconfig.json index 5f3083fd5..442e2527b 100644 --- a/playwright/tsconfig.json +++ b/playwright/tsconfig.json @@ -6,7 +6,8 @@ "resolveJsonModule": true, "esModuleInterop": true, "moduleResolution": "node", - "module": "es2022" + "module": "es2022", + "allowImportingTsExtensions": true }, "include": [ "**/*.ts", diff --git a/res/css/_animations.pcss b/res/css/_animations.pcss index 96908097e..f78d8143f 100644 --- a/res/css/_animations.pcss +++ b/res/css/_animations.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/res/css/_common.pcss b/res/css/_common.pcss index 605ad41b8..05a3dac06 100644 --- a/res/css/_common.pcss +++ b/res/css/_common.pcss @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. +Copyright 2019-2023 The Matrix.org Foundation C.I.C +Copyright 2017-2019 New Vector Ltd Copyright 2017 Vector Creations Ltd -Copyright 2017 - 2019 New Vector Ltd -Copyright 2019 - 2023 The Matrix.org Foundation C.I.C - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2015, 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ @import url("@vector-im/compound-design-tokens/assets/web/css/compound-design-tokens.css") layer(compound); diff --git a/res/css/_components.pcss b/res/css/_components.pcss index 96c285bc0..dadd9aadb 100644 --- a/res/css/_components.pcss +++ b/res/css/_components.pcss @@ -94,6 +94,7 @@ @import "./structures/auth/_ConfirmSessionLockTheftView.pcss"; @import "./structures/auth/_Login.pcss"; @import "./structures/auth/_LoginSplashView.pcss"; +@import "./structures/auth/_MobileRegistration.pcss"; @import "./structures/auth/_Registration.pcss"; @import "./structures/auth/_SessionLockStolenView.pcss"; @import "./structures/auth/_SetupEncryptionBody.pcss"; @@ -298,6 +299,7 @@ @import "./views/rooms/_NewRoomIntro.pcss"; @import "./views/rooms/_NotificationBadge.pcss"; @import "./views/rooms/_PinnedEventTile.pcss"; +@import "./views/rooms/_PinnedMessageBanner.pcss"; @import "./views/rooms/_PresenceLabel.pcss"; @import "./views/rooms/_ReadReceiptGroup.pcss"; @import "./views/rooms/_ReplyPreview.pcss"; diff --git a/res/css/_font-sizes.pcss b/res/css/_font-sizes.pcss index bb447ebfa..eb6ac362a 100644 --- a/res/css/_font-sizes.pcss +++ b/res/css/_font-sizes.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* diff --git a/res/css/_spacing.pcss b/res/css/_spacing.pcss index eaf46abc0..2fbc380e6 100644 --- a/res/css/_spacing.pcss +++ b/res/css/_spacing.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* SCSS variables representing a range of standard lengths. diff --git a/res/css/components/views/beacon/_BeaconListItem.pcss b/res/css/components/views/beacon/_BeaconListItem.pcss index 3389ccc3a..8090f55ca 100644 --- a/res/css/components/views/beacon/_BeaconListItem.pcss +++ b/res/css/components/views/beacon/_BeaconListItem.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_BeaconListItem { diff --git a/res/css/components/views/beacon/_BeaconStatus.pcss b/res/css/components/views/beacon/_BeaconStatus.pcss index 65e51a934..7dfd401aa 100644 --- a/res/css/components/views/beacon/_BeaconStatus.pcss +++ b/res/css/components/views/beacon/_BeaconStatus.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_BeaconStatus { diff --git a/res/css/components/views/beacon/_BeaconStatusTooltip.pcss b/res/css/components/views/beacon/_BeaconStatusTooltip.pcss index d6ed72e45..e5ee11ee5 100644 --- a/res/css/components/views/beacon/_BeaconStatusTooltip.pcss +++ b/res/css/components/views/beacon/_BeaconStatusTooltip.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_BeaconStatusTooltip { diff --git a/res/css/components/views/beacon/_BeaconViewDialog.pcss b/res/css/components/views/beacon/_BeaconViewDialog.pcss index da5fa1ef3..71a276a62 100644 --- a/res/css/components/views/beacon/_BeaconViewDialog.pcss +++ b/res/css/components/views/beacon/_BeaconViewDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_BeaconViewDialog_wrapper .mx_Dialog { diff --git a/res/css/components/views/beacon/_DialogOwnBeaconStatus.pcss b/res/css/components/views/beacon/_DialogOwnBeaconStatus.pcss index 1ed370919..3e71001eb 100644 --- a/res/css/components/views/beacon/_DialogOwnBeaconStatus.pcss +++ b/res/css/components/views/beacon/_DialogOwnBeaconStatus.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DialogOwnBeaconStatus { diff --git a/res/css/components/views/beacon/_DialogSidebar.pcss b/res/css/components/views/beacon/_DialogSidebar.pcss index 31d3b7b16..4ff9c6da7 100644 --- a/res/css/components/views/beacon/_DialogSidebar.pcss +++ b/res/css/components/views/beacon/_DialogSidebar.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DialogSidebar { diff --git a/res/css/components/views/beacon/_LeftPanelLiveShareWarning.pcss b/res/css/components/views/beacon/_LeftPanelLiveShareWarning.pcss index aa89c801d..83fd0f3fe 100644 --- a/res/css/components/views/beacon/_LeftPanelLiveShareWarning.pcss +++ b/res/css/components/views/beacon/_LeftPanelLiveShareWarning.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LeftPanelLiveShareWarning { diff --git a/res/css/components/views/beacon/_LiveTimeRemaining.pcss b/res/css/components/views/beacon/_LiveTimeRemaining.pcss index de13f7aab..a91fa29bc 100644 --- a/res/css/components/views/beacon/_LiveTimeRemaining.pcss +++ b/res/css/components/views/beacon/_LiveTimeRemaining.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LiveTimeRemaining { diff --git a/res/css/components/views/beacon/_OwnBeaconStatus.pcss b/res/css/components/views/beacon/_OwnBeaconStatus.pcss index a0776b942..e94e07c50 100644 --- a/res/css/components/views/beacon/_OwnBeaconStatus.pcss +++ b/res/css/components/views/beacon/_OwnBeaconStatus.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_OwnBeaconStatus_button { diff --git a/res/css/components/views/beacon/_RoomLiveShareWarning.pcss b/res/css/components/views/beacon/_RoomLiveShareWarning.pcss index f85cebe8b..60d23ed49 100644 --- a/res/css/components/views/beacon/_RoomLiveShareWarning.pcss +++ b/res/css/components/views/beacon/_RoomLiveShareWarning.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomLiveShareWarning { diff --git a/res/css/components/views/beacon/_ShareLatestLocation.pcss b/res/css/components/views/beacon/_ShareLatestLocation.pcss index 4c84a72b7..aed3bc7cb 100644 --- a/res/css/components/views/beacon/_ShareLatestLocation.pcss +++ b/res/css/components/views/beacon/_ShareLatestLocation.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ShareLatestLocation_icon { diff --git a/res/css/components/views/beacon/_StyledLiveBeaconIcon.pcss b/res/css/components/views/beacon/_StyledLiveBeaconIcon.pcss index 4600181d5..89c35791f 100644 --- a/res/css/components/views/beacon/_StyledLiveBeaconIcon.pcss +++ b/res/css/components/views/beacon/_StyledLiveBeaconIcon.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_StyledLiveBeaconIcon { diff --git a/res/css/components/views/context_menus/_KebabContextMenu.pcss b/res/css/components/views/context_menus/_KebabContextMenu.pcss index 5ab678265..26db2552a 100644 --- a/res/css/components/views/context_menus/_KebabContextMenu.pcss +++ b/res/css/components/views/context_menus/_KebabContextMenu.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_KebabContextMenu_icon { diff --git a/res/css/components/views/dialogs/polls/_PollDetailHeader.pcss b/res/css/components/views/dialogs/polls/_PollDetailHeader.pcss index af3a9c2a7..15da6dc9a 100644 --- a/res/css/components/views/dialogs/polls/_PollDetailHeader.pcss +++ b/res/css/components/views/dialogs/polls/_PollDetailHeader.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_PollDetailHeader { diff --git a/res/css/components/views/dialogs/polls/_PollListItem.pcss b/res/css/components/views/dialogs/polls/_PollListItem.pcss index d6036fa37..568d1ad71 100644 --- a/res/css/components/views/dialogs/polls/_PollListItem.pcss +++ b/res/css/components/views/dialogs/polls/_PollListItem.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_PollListItem { diff --git a/res/css/components/views/dialogs/polls/_PollListItemEnded.pcss b/res/css/components/views/dialogs/polls/_PollListItemEnded.pcss index 51b2a07d9..05734c1e7 100644 --- a/res/css/components/views/dialogs/polls/_PollListItemEnded.pcss +++ b/res/css/components/views/dialogs/polls/_PollListItemEnded.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_PollListItemEnded { diff --git a/res/css/components/views/elements/_AppPermission.pcss b/res/css/components/views/elements/_AppPermission.pcss index 3b770c787..25db241f7 100644 --- a/res/css/components/views/elements/_AppPermission.pcss +++ b/res/css/components/views/elements/_AppPermission.pcss @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2019-2023 The Matrix.org Foundation C.I.C. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019 - 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AppPermission { diff --git a/res/css/components/views/elements/_AppWarning.pcss b/res/css/components/views/elements/_AppWarning.pcss index 8d859d12a..9cba3020d 100644 --- a/res/css/components/views/elements/_AppWarning.pcss +++ b/res/css/components/views/elements/_AppWarning.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Suguru Hirahara -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AppWarning { diff --git a/res/css/components/views/elements/_FilterDropdown.pcss b/res/css/components/views/elements/_FilterDropdown.pcss index dc264ca92..ed9f78e1b 100644 --- a/res/css/components/views/elements/_FilterDropdown.pcss +++ b/res/css/components/views/elements/_FilterDropdown.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_FilterDropdown { diff --git a/res/css/components/views/elements/_FilterTabGroup.pcss b/res/css/components/views/elements/_FilterTabGroup.pcss index 5f7338f81..da469ca65 100644 --- a/res/css/components/views/elements/_FilterTabGroup.pcss +++ b/res/css/components/views/elements/_FilterTabGroup.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_FilterTabGroup { diff --git a/res/css/components/views/elements/_LearnMore.pcss b/res/css/components/views/elements/_LearnMore.pcss index 97f3b4c52..388a8254d 100644 --- a/res/css/components/views/elements/_LearnMore.pcss +++ b/res/css/components/views/elements/_LearnMore.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LearnMore_button { diff --git a/res/css/components/views/location/_EnableLiveShare.pcss b/res/css/components/views/location/_EnableLiveShare.pcss index 7c10cc192..4799dda0d 100644 --- a/res/css/components/views/location/_EnableLiveShare.pcss +++ b/res/css/components/views/location/_EnableLiveShare.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EnableLiveShare { diff --git a/res/css/components/views/location/_LiveDurationDropdown.pcss b/res/css/components/views/location/_LiveDurationDropdown.pcss index 9b0e39a07..016610994 100644 --- a/res/css/components/views/location/_LiveDurationDropdown.pcss +++ b/res/css/components/views/location/_LiveDurationDropdown.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LiveDurationDropdown { diff --git a/res/css/components/views/location/_LocationShareMenu.pcss b/res/css/components/views/location/_LocationShareMenu.pcss index f27935b6d..e1c10401f 100644 --- a/res/css/components/views/location/_LocationShareMenu.pcss +++ b/res/css/components/views/location/_LocationShareMenu.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LocationShareMenu { diff --git a/res/css/components/views/location/_MapError.pcss b/res/css/components/views/location/_MapError.pcss index 9437df8b8..a5e83bd64 100644 --- a/res/css/components/views/location/_MapError.pcss +++ b/res/css/components/views/location/_MapError.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MapError { diff --git a/res/css/components/views/location/_MapFallback.pcss b/res/css/components/views/location/_MapFallback.pcss index b40e98c69..68500eb31 100644 --- a/res/css/components/views/location/_MapFallback.pcss +++ b/res/css/components/views/location/_MapFallback.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MapFallback { diff --git a/res/css/components/views/location/_Marker.pcss b/res/css/components/views/location/_Marker.pcss index e4fefd789..e8f321f60 100644 --- a/res/css/components/views/location/_Marker.pcss +++ b/res/css/components/views/location/_Marker.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Marker_defaultColor { diff --git a/res/css/components/views/location/_ShareDialogButtons.pcss b/res/css/components/views/location/_ShareDialogButtons.pcss index 5278e6802..31630bb1e 100644 --- a/res/css/components/views/location/_ShareDialogButtons.pcss +++ b/res/css/components/views/location/_ShareDialogButtons.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ShareDialogButtons { diff --git a/res/css/components/views/location/_ShareType.pcss b/res/css/components/views/location/_ShareType.pcss index 186365a2b..304ecd008 100644 --- a/res/css/components/views/location/_ShareType.pcss +++ b/res/css/components/views/location/_ShareType.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ShareType { diff --git a/res/css/components/views/location/_ZoomButtons.pcss b/res/css/components/views/location/_ZoomButtons.pcss index d6e40e5a4..e44c92943 100644 --- a/res/css/components/views/location/_ZoomButtons.pcss +++ b/res/css/components/views/location/_ZoomButtons.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ZoomButtons { diff --git a/res/css/components/views/messages/_MBeaconBody.pcss b/res/css/components/views/messages/_MBeaconBody.pcss index 1c5a725a0..18d7c4b2b 100644 --- a/res/css/components/views/messages/_MBeaconBody.pcss +++ b/res/css/components/views/messages/_MBeaconBody.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MBeaconBody { diff --git a/res/css/components/views/messages/shared/_MediaProcessingError.pcss b/res/css/components/views/messages/shared/_MediaProcessingError.pcss index 97b82ad0f..de6915f8e 100644 --- a/res/css/components/views/messages/shared/_MediaProcessingError.pcss +++ b/res/css/components/views/messages/shared/_MediaProcessingError.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MediaProcessingError_Icon { diff --git a/res/css/components/views/pips/_WidgetPip.pcss b/res/css/components/views/pips/_WidgetPip.pcss index bc0419a49..db38238a7 100644 --- a/res/css/components/views/pips/_WidgetPip.pcss +++ b/res/css/components/views/pips/_WidgetPip.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ $width: 320px; diff --git a/res/css/components/views/polls/_PollOption.pcss b/res/css/components/views/polls/_PollOption.pcss index 81301f564..a0656c1eb 100644 --- a/res/css/components/views/polls/_PollOption.pcss +++ b/res/css/components/views/polls/_PollOption.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_PollOption { diff --git a/res/css/components/views/settings/_AddRemoveThreepids.pcss b/res/css/components/views/settings/_AddRemoveThreepids.pcss index 0e9ef83ae..a67a790c0 100644 --- a/res/css/components/views/settings/_AddRemoveThreepids.pcss +++ b/res/css/components/views/settings/_AddRemoveThreepids.pcss @@ -1,18 +1,10 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. +Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* diff --git a/res/css/components/views/settings/devices/_CurrentDeviceSection.pcss b/res/css/components/views/settings/devices/_CurrentDeviceSection.pcss index d91dd6457..30d6c752f 100644 --- a/res/css/components/views/settings/devices/_CurrentDeviceSection.pcss +++ b/res/css/components/views/settings/devices/_CurrentDeviceSection.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CurrentDeviceSection_deviceDetails { diff --git a/res/css/components/views/settings/devices/_DeviceDetailHeading.pcss b/res/css/components/views/settings/devices/_DeviceDetailHeading.pcss index 841102536..6ae233ba9 100644 --- a/res/css/components/views/settings/devices/_DeviceDetailHeading.pcss +++ b/res/css/components/views/settings/devices/_DeviceDetailHeading.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DeviceDetailHeading { diff --git a/res/css/components/views/settings/devices/_DeviceDetails.pcss b/res/css/components/views/settings/devices/_DeviceDetails.pcss index 00074f0d2..a6c567ad2 100644 --- a/res/css/components/views/settings/devices/_DeviceDetails.pcss +++ b/res/css/components/views/settings/devices/_DeviceDetails.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DeviceDetails { diff --git a/res/css/components/views/settings/devices/_DeviceExpandDetailsButton.pcss b/res/css/components/views/settings/devices/_DeviceExpandDetailsButton.pcss index 64fb7cfc2..de5d0bc5e 100644 --- a/res/css/components/views/settings/devices/_DeviceExpandDetailsButton.pcss +++ b/res/css/components/views/settings/devices/_DeviceExpandDetailsButton.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DeviceExpandDetailsButton { diff --git a/res/css/components/views/settings/devices/_DeviceSecurityCard.pcss b/res/css/components/views/settings/devices/_DeviceSecurityCard.pcss index 2e4055cfd..ff596309a 100644 --- a/res/css/components/views/settings/devices/_DeviceSecurityCard.pcss +++ b/res/css/components/views/settings/devices/_DeviceSecurityCard.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DeviceSecurityCard { diff --git a/res/css/components/views/settings/devices/_DeviceTile.pcss b/res/css/components/views/settings/devices/_DeviceTile.pcss index 7bfe1e034..1bc301efa 100644 --- a/res/css/components/views/settings/devices/_DeviceTile.pcss +++ b/res/css/components/views/settings/devices/_DeviceTile.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DeviceTile { diff --git a/res/css/components/views/settings/devices/_DeviceTypeIcon.pcss b/res/css/components/views/settings/devices/_DeviceTypeIcon.pcss index 5bd1c29ed..1c0a453f9 100644 --- a/res/css/components/views/settings/devices/_DeviceTypeIcon.pcss +++ b/res/css/components/views/settings/devices/_DeviceTypeIcon.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DeviceTypeIcon { diff --git a/res/css/components/views/settings/devices/_FilteredDeviceList.pcss b/res/css/components/views/settings/devices/_FilteredDeviceList.pcss index 857e56e34..8508122fc 100644 --- a/res/css/components/views/settings/devices/_FilteredDeviceList.pcss +++ b/res/css/components/views/settings/devices/_FilteredDeviceList.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_FilteredDeviceList { diff --git a/res/css/components/views/settings/devices/_FilteredDeviceListHeader.pcss b/res/css/components/views/settings/devices/_FilteredDeviceListHeader.pcss index 810862402..ce0fe84b6 100644 --- a/res/css/components/views/settings/devices/_FilteredDeviceListHeader.pcss +++ b/res/css/components/views/settings/devices/_FilteredDeviceListHeader.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_FilteredDeviceListHeader { diff --git a/res/css/components/views/settings/devices/_SecurityRecommendations.pcss b/res/css/components/views/settings/devices/_SecurityRecommendations.pcss index d0a533355..e40e6048d 100644 --- a/res/css/components/views/settings/devices/_SecurityRecommendations.pcss +++ b/res/css/components/views/settings/devices/_SecurityRecommendations.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SecurityRecommendations_spacing { diff --git a/res/css/components/views/settings/devices/_SelectableDeviceTile.pcss b/res/css/components/views/settings/devices/_SelectableDeviceTile.pcss index ec6a13b26..9a5ad5d2a 100644 --- a/res/css/components/views/settings/devices/_SelectableDeviceTile.pcss +++ b/res/css/components/views/settings/devices/_SelectableDeviceTile.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SelectableDeviceTile { diff --git a/res/css/components/views/settings/shared/_SettingsSubsection.pcss b/res/css/components/views/settings/shared/_SettingsSubsection.pcss index f0e31285c..14261a59c 100644 --- a/res/css/components/views/settings/shared/_SettingsSubsection.pcss +++ b/res/css/components/views/settings/shared/_SettingsSubsection.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SettingsSubsection { @@ -64,4 +56,8 @@ limitations under the License. gap: var(--cpd-space-6x); margin-top: 0; } + + .mx_SettingsSubsection_dropdown { + min-width: 360px; + } } diff --git a/res/css/components/views/settings/shared/_SettingsSubsectionHeading.pcss b/res/css/components/views/settings/shared/_SettingsSubsectionHeading.pcss index 00bcb4abc..fad1a5133 100644 --- a/res/css/components/views/settings/shared/_SettingsSubsectionHeading.pcss +++ b/res/css/components/views/settings/shared/_SettingsSubsectionHeading.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SettingsSubsectionHeading { diff --git a/res/css/components/views/spaces/_QuickThemeSwitcher.pcss b/res/css/components/views/spaces/_QuickThemeSwitcher.pcss index 66a973135..0c7ca8363 100644 --- a/res/css/components/views/spaces/_QuickThemeSwitcher.pcss +++ b/res/css/components/views/spaces/_QuickThemeSwitcher.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_QuickThemeSwitcher { diff --git a/res/css/components/views/typography/_Caption.pcss b/res/css/components/views/typography/_Caption.pcss index cad93f388..1aebc077b 100644 --- a/res/css/components/views/typography/_Caption.pcss +++ b/res/css/components/views/typography/_Caption.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Caption { diff --git a/res/css/components/views/utils/_Box.pcss b/res/css/components/views/utils/_Box.pcss index a8ab7e945..d6063c21f 100644 --- a/res/css/components/views/utils/_Box.pcss +++ b/res/css/components/views/utils/_Box.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Box--flex { diff --git a/res/css/components/views/utils/_Flex.pcss b/res/css/components/views/utils/_Flex.pcss index f9cdc7e3c..7d6ad089a 100644 --- a/res/css/components/views/utils/_Flex.pcss +++ b/res/css/components/views/utils/_Flex.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Flex { diff --git a/res/css/compound/_Icon.pcss b/res/css/compound/_Icon.pcss index 185fb24f3..bbe2f7c89 100644 --- a/res/css/compound/_Icon.pcss +++ b/res/css/compound/_Icon.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* diff --git a/res/css/compound/_SuccessDialog.pcss b/res/css/compound/_SuccessDialog.pcss index 9085cedc1..040c30640 100644 --- a/res/css/compound/_SuccessDialog.pcss +++ b/res/css/compound/_SuccessDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SuccessDialog { diff --git a/res/css/structures/_AutoHideScrollbar.pcss b/res/css/structures/_AutoHideScrollbar.pcss index b678f0c63..610e63e53 100644 --- a/res/css/structures/_AutoHideScrollbar.pcss +++ b/res/css/structures/_AutoHideScrollbar.pcss @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* make any scrollbar grey and thin */ diff --git a/res/css/structures/_AutocompleteInput.pcss b/res/css/structures/_AutocompleteInput.pcss index 5e799c95a..87501fe9a 100644 --- a/res/css/structures/_AutocompleteInput.pcss +++ b/res/css/structures/_AutocompleteInput.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AutocompleteInput { diff --git a/res/css/structures/_BackdropPanel.pcss b/res/css/structures/_BackdropPanel.pcss index 18c544eea..ee2fcf943 100644 --- a/res/css/structures/_BackdropPanel.pcss +++ b/res/css/structures/_BackdropPanel.pcss @@ -1,17 +1,8 @@ /* -Copyright 2021 New Vector Ltd +Copyright 2021-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_BackdropPanel { diff --git a/res/css/structures/_ContextualMenu.pcss b/res/css/structures/_ContextualMenu.pcss index eeb066fd4..ac4af8493 100644 --- a/res/css/structures/_ContextualMenu.pcss +++ b/res/css/structures/_ContextualMenu.pcss @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ContextualMenu_wrapper { diff --git a/res/css/structures/_ErrorMessage.pcss b/res/css/structures/_ErrorMessage.pcss index ece0d7ea2..820d8820d 100644 --- a/res/css/structures/_ErrorMessage.pcss +++ b/res/css/structures/_ErrorMessage.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ErrorMessage { diff --git a/res/css/structures/_FileDropTarget.pcss b/res/css/structures/_FileDropTarget.pcss index b5963385b..bfaa7259c 100644 --- a/res/css/structures/_FileDropTarget.pcss +++ b/res/css/structures/_FileDropTarget.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ @keyframes mx_FileDropTarget_animation { diff --git a/res/css/structures/_FilePanel.pcss b/res/css/structures/_FilePanel.pcss index 186893b24..d9310c4c1 100644 --- a/res/css/structures/_FilePanel.pcss +++ b/res/css/structures/_FilePanel.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_FilePanel { diff --git a/res/css/structures/_GenericDropdownMenu.pcss b/res/css/structures/_GenericDropdownMenu.pcss index 1722c7fd2..7f7342416 100644 --- a/res/css/structures/_GenericDropdownMenu.pcss +++ b/res/css/structures/_GenericDropdownMenu.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_GenericDropdownMenu_button { diff --git a/res/css/structures/_HomePage.pcss b/res/css/structures/_HomePage.pcss index b2f607f82..2c7e665e7 100644 --- a/res/css/structures/_HomePage.pcss +++ b/res/css/structures/_HomePage.pcss @@ -1,19 +1,10 @@ /* -Copyright 2016 OpenMarket Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Copyright 2019 New Vector Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_HomePage { diff --git a/res/css/structures/_LargeLoader.pcss b/res/css/structures/_LargeLoader.pcss index 55f57b029..c18d67a05 100644 --- a/res/css/structures/_LargeLoader.pcss +++ b/res/css/structures/_LargeLoader.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LargeLoader { diff --git a/res/css/structures/_LeftPanel.pcss b/res/css/structures/_LeftPanel.pcss index 9cbffc77d..627f05451 100644 --- a/res/css/structures/_LeftPanel.pcss +++ b/res/css/structures/_LeftPanel.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MatrixChat--with-avatar { diff --git a/res/css/structures/_MainSplit.pcss b/res/css/structures/_MainSplit.pcss index e188e881e..f334e34b9 100644 --- a/res/css/structures/_MainSplit.pcss +++ b/res/css/structures/_MainSplit.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MainSplit { diff --git a/res/css/structures/_MatrixChat.pcss b/res/css/structures/_MatrixChat.pcss index cdbe2fcfe..39cc8c467 100644 --- a/res/css/structures/_MatrixChat.pcss +++ b/res/css/structures/_MatrixChat.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MatrixChat_splash { diff --git a/res/css/structures/_MessagePanel.pcss b/res/css/structures/_MessagePanel.pcss index 487f6dd80..f35abed59 100644 --- a/res/css/structures/_MessagePanel.pcss +++ b/res/css/structures/_MessagePanel.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MessagePanel_myReadMarker { diff --git a/res/css/structures/_NonUrgentToastContainer.pcss b/res/css/structures/_NonUrgentToastContainer.pcss index ba267342f..05c019e0f 100644 --- a/res/css/structures/_NonUrgentToastContainer.pcss +++ b/res/css/structures/_NonUrgentToastContainer.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_NonUrgentToastContainer { diff --git a/res/css/structures/_QuickSettingsButton.pcss b/res/css/structures/_QuickSettingsButton.pcss index 569effd3a..234042105 100644 --- a/res/css/structures/_QuickSettingsButton.pcss +++ b/res/css/structures/_QuickSettingsButton.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_QuickSettingsButton { diff --git a/res/css/structures/_RightPanel.pcss b/res/css/structures/_RightPanel.pcss index d21c435b2..57196985a 100644 --- a/res/css/structures/_RightPanel.pcss +++ b/res/css/structures/_RightPanel.pcss @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RightPanel { diff --git a/res/css/structures/_RoomSearch.pcss b/res/css/structures/_RoomSearch.pcss index fea292c8b..61760c420 100644 --- a/res/css/structures/_RoomSearch.pcss +++ b/res/css/structures/_RoomSearch.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* Note: this component expects to be contained within a flexbox */ @@ -43,7 +35,7 @@ limitations under the License. } .mx_RoomSearch_spotlightTriggerText { - color: $tertiary-content; + color: var(--cpd-color-text-secondary); flex: 1; min-width: 0; /* the following rules are to match that of a real input field */ diff --git a/res/css/structures/_RoomStatusBar.pcss b/res/css/structures/_RoomStatusBar.pcss index d0bfa9f7f..2e5af4638 100644 --- a/res/css/structures/_RoomStatusBar.pcss +++ b/res/css/structures/_RoomStatusBar.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomStatusBar:not(.mx_RoomStatusBar_unsentMessages) { diff --git a/res/css/structures/_RoomView.pcss b/res/css/structures/_RoomView.pcss index 30583384b..52fa523c4 100644 --- a/res/css/structures/_RoomView.pcss +++ b/res/css/structures/_RoomView.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ :root { diff --git a/res/css/structures/_SearchBox.pcss b/res/css/structures/_SearchBox.pcss index 132304179..457f238f3 100644 --- a/res/css/structures/_SearchBox.pcss +++ b/res/css/structures/_SearchBox.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SearchBox { diff --git a/res/css/structures/_SpaceHierarchy.pcss b/res/css/structures/_SpaceHierarchy.pcss index ca129fdba..089b0dab1 100644 --- a/res/css/structures/_SpaceHierarchy.pcss +++ b/res/css/structures/_SpaceHierarchy.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SpaceRoomView_landing { diff --git a/res/css/structures/_SpacePanel.pcss b/res/css/structures/_SpacePanel.pcss index d685617d5..e4cda39a3 100644 --- a/res/css/structures/_SpacePanel.pcss +++ b/res/css/structures/_SpacePanel.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SpacePanel { diff --git a/res/css/structures/_SpaceRoomView.pcss b/res/css/structures/_SpaceRoomView.pcss index 50f6fc927..356af1d93 100644 --- a/res/css/structures/_SpaceRoomView.pcss +++ b/res/css/structures/_SpaceRoomView.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ @define-mixin SpacePillButton { diff --git a/res/css/structures/_SplashPage.pcss b/res/css/structures/_SplashPage.pcss index 58c462a22..ec5e5defc 100644 --- a/res/css/structures/_SplashPage.pcss +++ b/res/css/structures/_SplashPage.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SplashPage { diff --git a/res/css/structures/_TabbedView.pcss b/res/css/structures/_TabbedView.pcss index bb71c8be4..687eaf06f 100644 --- a/res/css/structures/_TabbedView.pcss +++ b/res/css/structures/_TabbedView.pcss @@ -1,19 +1,11 @@ /* -Copyright 2017 Travis Ralston -Copyright 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. +Copyright 2019 New Vector Ltd +Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_TabbedView { diff --git a/res/css/structures/_ThreadsActivityCentre.pcss b/res/css/structures/_ThreadsActivityCentre.pcss index 76b38d6c0..c159ee111 100644 --- a/res/css/structures/_ThreadsActivityCentre.pcss +++ b/res/css/structures/_ThreadsActivityCentre.pcss @@ -1,19 +1,9 @@ /* - * - * Copyright 2024 The Matrix.org Foundation C.I.C. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / +* Copyright 2024 New Vector Ltd. +* Copyright 2024 The Matrix.org Foundation C.I.C. +* +* SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +* Please see LICENSE files in the repository root for full details. */ .mx_ThreadsActivityCentre_container { diff --git a/res/css/structures/_ToastContainer.pcss b/res/css/structures/_ToastContainer.pcss index f8f15bca4..0a12bec3b 100644 --- a/res/css/structures/_ToastContainer.pcss +++ b/res/css/structures/_ToastContainer.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ToastContainer { diff --git a/res/css/structures/_UploadBar.pcss b/res/css/structures/_UploadBar.pcss index a0689d427..ec274a585 100644 --- a/res/css/structures/_UploadBar.pcss +++ b/res/css/structures/_UploadBar.pcss @@ -1,17 +1,9 @@ /* -Copyright 2015, 2016, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015, 2016 , 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UploadBar { diff --git a/res/css/structures/_UserMenu.pcss b/res/css/structures/_UserMenu.pcss index 1f0fc9d2f..451b4d44c 100644 --- a/res/css/structures/_UserMenu.pcss +++ b/res/css/structures/_UserMenu.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UserMenu { diff --git a/res/css/structures/_ViewSource.pcss b/res/css/structures/_ViewSource.pcss index 52d3afecc..68bb123cc 100644 --- a/res/css/structures/_ViewSource.pcss +++ b/res/css/structures/_ViewSource.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ViewSource { diff --git a/res/css/structures/auth/_CompleteSecurity.pcss b/res/css/structures/auth/_CompleteSecurity.pcss index ef8c82cbc..cd5407935 100644 --- a/res/css/structures/auth/_CompleteSecurity.pcss +++ b/res/css/structures/auth/_CompleteSecurity.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CompleteSecurity_header { diff --git a/res/css/structures/auth/_ConfirmSessionLockTheftView.pcss b/res/css/structures/auth/_ConfirmSessionLockTheftView.pcss index 14b92daaa..f06da6032 100644 --- a/res/css/structures/auth/_ConfirmSessionLockTheftView.pcss +++ b/res/css/structures/auth/_ConfirmSessionLockTheftView.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ConfirmSessionLockTheftView { diff --git a/res/css/structures/auth/_Login.pcss b/res/css/structures/auth/_Login.pcss index aa4244bcf..49b2faf19 100644 --- a/res/css/structures/auth/_Login.pcss +++ b/res/css/structures/auth/_Login.pcss @@ -1,18 +1,9 @@ /* +Copyright 2019-2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Login_submit { diff --git a/res/css/structures/auth/_LoginSplashView.pcss b/res/css/structures/auth/_LoginSplashView.pcss index fc9433782..413cda35a 100644 --- a/res/css/structures/auth/_LoginSplashView.pcss +++ b/res/css/structures/auth/_LoginSplashView.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015-2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LoginSplashView_migrationProgress { diff --git a/res/css/structures/auth/_MobileRegistration.pcss b/res/css/structures/auth/_MobileRegistration.pcss new file mode 100644 index 000000000..d50ff8dc1 --- /dev/null +++ b/res/css/structures/auth/_MobileRegistration.pcss @@ -0,0 +1,10 @@ +/* +Copyright 2024 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. +*/ + +.mx_MobileRegister_body { + padding: 32px; +} diff --git a/res/css/structures/auth/_Registration.pcss b/res/css/structures/auth/_Registration.pcss index 42ac7c0fb..7742f256a 100644 --- a/res/css/structures/auth/_Registration.pcss +++ b/res/css/structures/auth/_Registration.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Register_mainContent { diff --git a/res/css/structures/auth/_SessionLockStolenView.pcss b/res/css/structures/auth/_SessionLockStolenView.pcss index e9ab0d95f..046e5c6eb 100644 --- a/res/css/structures/auth/_SessionLockStolenView.pcss +++ b/res/css/structures/auth/_SessionLockStolenView.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SessionLockStolenView { diff --git a/res/css/structures/auth/_SetupEncryptionBody.pcss b/res/css/structures/auth/_SetupEncryptionBody.pcss index 9acd23501..c7836b96d 100644 --- a/res/css/structures/auth/_SetupEncryptionBody.pcss +++ b/res/css/structures/auth/_SetupEncryptionBody.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SetupEncryptionBody_reset { diff --git a/res/css/views/audio_messages/_AudioPlayer.pcss b/res/css/views/audio_messages/_AudioPlayer.pcss index 314632d6c..5a81e266d 100644 --- a/res/css/views/audio_messages/_AudioPlayer.pcss +++ b/res/css/views/audio_messages/_AudioPlayer.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MediaBody.mx_AudioPlayer_container { diff --git a/res/css/views/audio_messages/_PlayPauseButton.pcss b/res/css/views/audio_messages/_PlayPauseButton.pcss index 1093fcd3a..8eb654741 100644 --- a/res/css/views/audio_messages/_PlayPauseButton.pcss +++ b/res/css/views/audio_messages/_PlayPauseButton.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_PlayPauseButton { diff --git a/res/css/views/audio_messages/_PlaybackContainer.pcss b/res/css/views/audio_messages/_PlaybackContainer.pcss index 67b311e96..e02533037 100644 --- a/res/css/views/audio_messages/_PlaybackContainer.pcss +++ b/res/css/views/audio_messages/_PlaybackContainer.pcss @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* Dev note: there's no actual component called . These classes */ diff --git a/res/css/views/audio_messages/_SeekBar.pcss b/res/css/views/audio_messages/_SeekBar.pcss index 45e825bc9..47cce4b47 100644 --- a/res/css/views/audio_messages/_SeekBar.pcss +++ b/res/css/views/audio_messages/_SeekBar.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* CSS inspiration from: */ diff --git a/res/css/views/audio_messages/_Waveform.pcss b/res/css/views/audio_messages/_Waveform.pcss index 0b2c41119..237352f18 100644 --- a/res/css/views/audio_messages/_Waveform.pcss +++ b/res/css/views/audio_messages/_Waveform.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Waveform { diff --git a/res/css/views/auth/_AuthBody.pcss b/res/css/views/auth/_AuthBody.pcss index 770438e97..6a7082fc8 100644 --- a/res/css/views/auth/_AuthBody.pcss +++ b/res/css/views/auth/_AuthBody.pcss @@ -1,18 +1,10 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AuthBody { @@ -24,7 +16,7 @@ limitations under the License. padding: 25px 60px; box-sizing: border-box; - b { + strong { font-weight: var(--cpd-font-weight-semibold); } diff --git a/res/css/views/auth/_AuthFooter.pcss b/res/css/views/auth/_AuthFooter.pcss index 36349594e..c3fac5707 100644 --- a/res/css/views/auth/_AuthFooter.pcss +++ b/res/css/views/auth/_AuthFooter.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AuthFooter { diff --git a/res/css/views/auth/_AuthHeader.pcss b/res/css/views/auth/_AuthHeader.pcss index 13d519516..ef7d4dbff 100644 --- a/res/css/views/auth/_AuthHeader.pcss +++ b/res/css/views/auth/_AuthHeader.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AuthHeader { diff --git a/res/css/views/auth/_AuthHeaderLogo.pcss b/res/css/views/auth/_AuthHeaderLogo.pcss index 86f0313b6..8bc9e1664 100644 --- a/res/css/views/auth/_AuthHeaderLogo.pcss +++ b/res/css/views/auth/_AuthHeaderLogo.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AuthHeaderLogo { diff --git a/res/css/views/auth/_AuthPage.pcss b/res/css/views/auth/_AuthPage.pcss index a9ed7fadd..e73d679c4 100644 --- a/res/css/views/auth/_AuthPage.pcss +++ b/res/css/views/auth/_AuthPage.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AuthPage { diff --git a/res/css/views/auth/_CompleteSecurityBody.pcss b/res/css/views/auth/_CompleteSecurityBody.pcss index 24d612945..404a06d69 100644 --- a/res/css/views/auth/_CompleteSecurityBody.pcss +++ b/res/css/views/auth/_CompleteSecurityBody.pcss @@ -1,18 +1,10 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CompleteSecurityBody { diff --git a/res/css/views/auth/_CountryDropdown.pcss b/res/css/views/auth/_CountryDropdown.pcss index 6fd3c0182..51376fb4e 100644 --- a/res/css/views/auth/_CountryDropdown.pcss +++ b/res/css/views/auth/_CountryDropdown.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CountryDropdown .mx_Dropdown_input .mx_Dropdown_option { diff --git a/res/css/views/auth/_InteractiveAuthEntryComponents.pcss b/res/css/views/auth/_InteractiveAuthEntryComponents.pcss index 81bc958e1..fb0bbfad8 100644 --- a/res/css/views/auth/_InteractiveAuthEntryComponents.pcss +++ b/res/css/views/auth/_InteractiveAuthEntryComponents.pcss @@ -1,18 +1,10 @@ /* -Copyright 2017 Vector Creations Ltd +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_InteractiveAuthEntryComponents { diff --git a/res/css/views/auth/_LanguageSelector.pcss b/res/css/views/auth/_LanguageSelector.pcss index b2e179d00..f76f4d6a7 100644 --- a/res/css/views/auth/_LanguageSelector.pcss +++ b/res/css/views/auth/_LanguageSelector.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AuthBody_language { diff --git a/res/css/views/auth/_LoginWithQR.pcss b/res/css/views/auth/_LoginWithQR.pcss index c4904952b..c24638886 100644 --- a/res/css/views/auth/_LoginWithQR.pcss +++ b/res/css/views/auth/_LoginWithQR.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LoginWithQRSection p { diff --git a/res/css/views/auth/_PassphraseField.pcss b/res/css/views/auth/_PassphraseField.pcss index 2b909a0d6..6020fb2b3 100644 --- a/res/css/views/auth/_PassphraseField.pcss +++ b/res/css/views/auth/_PassphraseField.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ $PassphraseStrengthHigh: $accent; diff --git a/res/css/views/auth/_Welcome.pcss b/res/css/views/auth/_Welcome.pcss index 894174d6e..71f607a8f 100644 --- a/res/css/views/auth/_Welcome.pcss +++ b/res/css/views/auth/_Welcome.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Welcome { diff --git a/res/css/views/avatars/_BaseAvatar.pcss b/res/css/views/avatars/_BaseAvatar.pcss index 07415069d..848752152 100644 --- a/res/css/views/avatars/_BaseAvatar.pcss +++ b/res/css/views/avatars/_BaseAvatar.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ button.mx_BaseAvatar { diff --git a/res/css/views/avatars/_DecoratedRoomAvatar.pcss b/res/css/views/avatars/_DecoratedRoomAvatar.pcss index e5ff87b11..f67f8e4cf 100644 --- a/res/css/views/avatars/_DecoratedRoomAvatar.pcss +++ b/res/css/views/avatars/_DecoratedRoomAvatar.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DecoratedRoomAvatar, diff --git a/res/css/views/avatars/_WidgetAvatar.pcss b/res/css/views/avatars/_WidgetAvatar.pcss index 8e5cfb54d..6e2b77d0e 100644 --- a/res/css/views/avatars/_WidgetAvatar.pcss +++ b/res/css/views/avatars/_WidgetAvatar.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_WidgetAvatar { diff --git a/res/css/views/avatars/_WithPresenceIndicator.pcss b/res/css/views/avatars/_WithPresenceIndicator.pcss index 0a7f0c2ad..1dd779cc5 100644 --- a/res/css/views/avatars/_WithPresenceIndicator.pcss +++ b/res/css/views/avatars/_WithPresenceIndicator.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_WithPresenceIndicator { diff --git a/res/css/views/beta/_BetaCard.pcss b/res/css/views/beta/_BetaCard.pcss index 49148cabb..33f566ae6 100644 --- a/res/css/views/beta/_BetaCard.pcss +++ b/res/css/views/beta/_BetaCard.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_BetaCard { diff --git a/res/css/views/context_menus/_DeviceContextMenu.pcss b/res/css/views/context_menus/_DeviceContextMenu.pcss index 4b886279d..a234f8f5d 100644 --- a/res/css/views/context_menus/_DeviceContextMenu.pcss +++ b/res/css/views/context_menus/_DeviceContextMenu.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DeviceContextMenu { diff --git a/res/css/views/context_menus/_IconizedContextMenu.pcss b/res/css/views/context_menus/_IconizedContextMenu.pcss index d15e63e9f..d42c92823 100644 --- a/res/css/views/context_menus/_IconizedContextMenu.pcss +++ b/res/css/views/context_menus/_IconizedContextMenu.pcss @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* A context menu that largely fits the | [icon] [label] | format. */ diff --git a/res/css/views/context_menus/_LegacyCallContextMenu.pcss b/res/css/views/context_menus/_LegacyCallContextMenu.pcss index d9adc07e6..6b83f2af9 100644 --- a/res/css/views/context_menus/_LegacyCallContextMenu.pcss +++ b/res/css/views/context_menus/_LegacyCallContextMenu.pcss @@ -1,17 +1,8 @@ /* -Copyright 2020 New Vector Ltd +Copyright 2020-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LegacyCallContextMenu_item { diff --git a/res/css/views/context_menus/_MessageContextMenu.pcss b/res/css/views/context_menus/_MessageContextMenu.pcss index be113c770..823b96af2 100644 --- a/res/css/views/context_menus/_MessageContextMenu.pcss +++ b/res/css/views/context_menus/_MessageContextMenu.pcss @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2021 Michael Weimann +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MessageContextMenu { @@ -81,11 +73,11 @@ limitations under the License. } .mx_MessageContextMenu_iconPin::before { - mask-image: url("$(res)/img/element-icons/room/pin-upright.svg"); + mask-image: url("@vector-im/compound-design-tokens/icons/pin.svg"); } .mx_MessageContextMenu_iconUnpin::before { - mask-image: url("$(res)/img/element-icons/room/pin.svg"); + mask-image: url("@vector-im/compound-design-tokens/icons/unpin.svg"); } .mx_MessageContextMenu_iconCopy::before { diff --git a/res/css/views/dialogs/_AddExistingToSpaceDialog.pcss b/res/css/views/dialogs/_AddExistingToSpaceDialog.pcss index 87372e6c4..06005d5a0 100644 --- a/res/css/views/dialogs/_AddExistingToSpaceDialog.pcss +++ b/res/css/views/dialogs/_AddExistingToSpaceDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AddExistingToSpaceDialog_wrapper { diff --git a/res/css/views/dialogs/_AnalyticsLearnMoreDialog.pcss b/res/css/views/dialogs/_AnalyticsLearnMoreDialog.pcss index 06bbe579e..01d69b038 100644 --- a/res/css/views/dialogs/_AnalyticsLearnMoreDialog.pcss +++ b/res/css/views/dialogs/_AnalyticsLearnMoreDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AnalyticsLearnMoreDialog { diff --git a/res/css/views/dialogs/_BugReportDialog.pcss b/res/css/views/dialogs/_BugReportDialog.pcss index 435fd1972..7c1750bc4 100644 --- a/res/css/views/dialogs/_BugReportDialog.pcss +++ b/res/css/views/dialogs/_BugReportDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_BugReportDialog { diff --git a/res/css/views/dialogs/_BulkRedactDialog.pcss b/res/css/views/dialogs/_BulkRedactDialog.pcss index 4891b758e..5d8e9d6ef 100644 --- a/res/css/views/dialogs/_BulkRedactDialog.pcss +++ b/res/css/views/dialogs/_BulkRedactDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Robin Townsend -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_BulkRedactDialog { diff --git a/res/css/views/dialogs/_ChangelogDialog.pcss b/res/css/views/dialogs/_ChangelogDialog.pcss index 460a5f94b..81c6b2683 100644 --- a/res/css/views/dialogs/_ChangelogDialog.pcss +++ b/res/css/views/dialogs/_ChangelogDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2016 Aviral Dasgupta -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ChangelogDialog_content { diff --git a/res/css/views/dialogs/_CompoundDialog.pcss b/res/css/views/dialogs/_CompoundDialog.pcss index addf21086..789184d47 100644 --- a/res/css/views/dialogs/_CompoundDialog.pcss +++ b/res/css/views/dialogs/_CompoundDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* -------------------------------------------------------------------------------- */ diff --git a/res/css/views/dialogs/_ConfirmSpaceUserActionDialog.pcss b/res/css/views/dialogs/_ConfirmSpaceUserActionDialog.pcss index a7ef9e1c8..7c1828183 100644 --- a/res/css/views/dialogs/_ConfirmSpaceUserActionDialog.pcss +++ b/res/css/views/dialogs/_ConfirmSpaceUserActionDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ConfirmSpaceUserActionDialog_wrapper { diff --git a/res/css/views/dialogs/_ConfirmUserActionDialog.pcss b/res/css/views/dialogs/_ConfirmUserActionDialog.pcss index 2d6fd430a..b1810dff0 100644 --- a/res/css/views/dialogs/_ConfirmUserActionDialog.pcss +++ b/res/css/views/dialogs/_ConfirmUserActionDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ConfirmUserActionDialog .mx_Dialog_content .mx_ConfirmUserActionDialog_user { diff --git a/res/css/views/dialogs/_CreateRoomDialog.pcss b/res/css/views/dialogs/_CreateRoomDialog.pcss index 7cbd67d72..86aa5d0f4 100644 --- a/res/css/views/dialogs/_CreateRoomDialog.pcss +++ b/res/css/views/dialogs/_CreateRoomDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CreateRoomDialog_details { diff --git a/res/css/views/dialogs/_CreateSubspaceDialog.pcss b/res/css/views/dialogs/_CreateSubspaceDialog.pcss index bcce6def8..4977ee883 100644 --- a/res/css/views/dialogs/_CreateSubspaceDialog.pcss +++ b/res/css/views/dialogs/_CreateSubspaceDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CreateSubspaceDialog_wrapper { diff --git a/res/css/views/dialogs/_DeactivateAccountDialog.pcss b/res/css/views/dialogs/_DeactivateAccountDialog.pcss index 8941afaf3..d1a899158 100644 --- a/res/css/views/dialogs/_DeactivateAccountDialog.pcss +++ b/res/css/views/dialogs/_DeactivateAccountDialog.pcss @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd. +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DeactivateAccountDialog .mx_Dialog_content { diff --git a/res/css/views/dialogs/_DevtoolsDialog.pcss b/res/css/views/dialogs/_DevtoolsDialog.pcss index 3c646c3ee..8b86233b9 100644 --- a/res/css/views/dialogs/_DevtoolsDialog.pcss +++ b/res/css/views/dialogs/_DevtoolsDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DevtoolsDialog_wrapper { diff --git a/res/css/views/dialogs/_ExportDialog.pcss b/res/css/views/dialogs/_ExportDialog.pcss index ca972aaa7..9a5bc5834 100644 --- a/res/css/views/dialogs/_ExportDialog.pcss +++ b/res/css/views/dialogs/_ExportDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ExportDialog { diff --git a/res/css/views/dialogs/_FeedbackDialog.pcss b/res/css/views/dialogs/_FeedbackDialog.pcss index 2a42d16a6..dde15b4e0 100644 --- a/res/css/views/dialogs/_FeedbackDialog.pcss +++ b/res/css/views/dialogs/_FeedbackDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_FeedbackDialog { diff --git a/res/css/views/dialogs/_ForwardDialog.pcss b/res/css/views/dialogs/_ForwardDialog.pcss index 69c9bafc8..40be3f229 100644 --- a/res/css/views/dialogs/_ForwardDialog.pcss +++ b/res/css/views/dialogs/_ForwardDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Robin Townsend -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ForwardDialog { diff --git a/res/css/views/dialogs/_GenericFeatureFeedbackDialog.pcss b/res/css/views/dialogs/_GenericFeatureFeedbackDialog.pcss index 3777a43bc..cc41e6913 100644 --- a/res/css/views/dialogs/_GenericFeatureFeedbackDialog.pcss +++ b/res/css/views/dialogs/_GenericFeatureFeedbackDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_GenericFeatureFeedbackDialog { diff --git a/res/css/views/dialogs/_IncomingSasDialog.pcss b/res/css/views/dialogs/_IncomingSasDialog.pcss index 3a9d645a9..a455f144f 100644 --- a/res/css/views/dialogs/_IncomingSasDialog.pcss +++ b/res/css/views/dialogs/_IncomingSasDialog.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd. +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_IncomingSasDialog_opponentProfile_image { diff --git a/res/css/views/dialogs/_InviteDialog.pcss b/res/css/views/dialogs/_InviteDialog.pcss index aedb1b250..9283d9d73 100644 --- a/res/css/views/dialogs/_InviteDialog.pcss +++ b/res/css/views/dialogs/_InviteDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_InviteDialog_flexWrapper .mx_Dialog { diff --git a/res/css/views/dialogs/_JoinRuleDropdown.pcss b/res/css/views/dialogs/_JoinRuleDropdown.pcss index da0796ede..f6b5ed474 100644 --- a/res/css/views/dialogs/_JoinRuleDropdown.pcss +++ b/res/css/views/dialogs/_JoinRuleDropdown.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_JoinRuleDropdown { diff --git a/res/css/views/dialogs/_LeaveSpaceDialog.pcss b/res/css/views/dialogs/_LeaveSpaceDialog.pcss index f06cc9a46..b332942f7 100644 --- a/res/css/views/dialogs/_LeaveSpaceDialog.pcss +++ b/res/css/views/dialogs/_LeaveSpaceDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LeaveSpaceDialog_wrapper { diff --git a/res/css/views/dialogs/_LocationViewDialog.pcss b/res/css/views/dialogs/_LocationViewDialog.pcss index 8e04b5f42..118897b92 100644 --- a/res/css/views/dialogs/_LocationViewDialog.pcss +++ b/res/css/views/dialogs/_LocationViewDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LocationViewDialog_wrapper .mx_Dialog { diff --git a/res/css/views/dialogs/_LogoutDialog.pcss b/res/css/views/dialogs/_LogoutDialog.pcss index 3c0767497..0161c00d3 100644 --- a/res/css/views/dialogs/_LogoutDialog.pcss +++ b/res/css/views/dialogs/_LogoutDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Manan Sadana -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LogoutDialog_ExportKeyAdvanced { diff --git a/res/css/views/dialogs/_ManageRestrictedJoinRuleDialog.pcss b/res/css/views/dialogs/_ManageRestrictedJoinRuleDialog.pcss index 501d7a2aa..f6635b979 100644 --- a/res/css/views/dialogs/_ManageRestrictedJoinRuleDialog.pcss +++ b/res/css/views/dialogs/_ManageRestrictedJoinRuleDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ManageRestrictedJoinRuleDialog_wrapper { diff --git a/res/css/views/dialogs/_MessageEditHistoryDialog.pcss b/res/css/views/dialogs/_MessageEditHistoryDialog.pcss index c6fce6164..b1c820e16 100644 --- a/res/css/views/dialogs/_MessageEditHistoryDialog.pcss +++ b/res/css/views/dialogs/_MessageEditHistoryDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MessageEditHistoryDialog { diff --git a/res/css/views/dialogs/_ModalWidgetDialog.pcss b/res/css/views/dialogs/_ModalWidgetDialog.pcss index aa2dd0d39..6b3e475a8 100644 --- a/res/css/views/dialogs/_ModalWidgetDialog.pcss +++ b/res/css/views/dialogs/_ModalWidgetDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ModalWidgetDialog { diff --git a/res/css/views/dialogs/_PollCreateDialog.pcss b/res/css/views/dialogs/_PollCreateDialog.pcss index 46ef43cd0..0dfe69564 100644 --- a/res/css/views/dialogs/_PollCreateDialog.pcss +++ b/res/css/views/dialogs/_PollCreateDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_PollCreateDialog { diff --git a/res/css/views/dialogs/_RegistrationEmailPromptDialog.pcss b/res/css/views/dialogs/_RegistrationEmailPromptDialog.pcss index 02c89e2e4..eea733fa6 100644 --- a/res/css/views/dialogs/_RegistrationEmailPromptDialog.pcss +++ b/res/css/views/dialogs/_RegistrationEmailPromptDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RegistrationEmailPromptDialog { diff --git a/res/css/views/dialogs/_RoomSettingsDialog.pcss b/res/css/views/dialogs/_RoomSettingsDialog.pcss index b0a08919a..84036cab1 100644 --- a/res/css/views/dialogs/_RoomSettingsDialog.pcss +++ b/res/css/views/dialogs/_RoomSettingsDialog.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd. +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* ICONS */ diff --git a/res/css/views/dialogs/_RoomSettingsDialogBridges.pcss b/res/css/views/dialogs/_RoomSettingsDialogBridges.pcss index aad030bd6..36fb34e8b 100644 --- a/res/css/views/dialogs/_RoomSettingsDialogBridges.pcss +++ b/res/css/views/dialogs/_RoomSettingsDialogBridges.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomSettingsDialog_BridgeList { diff --git a/res/css/views/dialogs/_RoomUpgradeDialog.pcss b/res/css/views/dialogs/_RoomUpgradeDialog.pcss index 2e3ac5fde..82bce661e 100644 --- a/res/css/views/dialogs/_RoomUpgradeDialog.pcss +++ b/res/css/views/dialogs/_RoomUpgradeDialog.pcss @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomUpgradeDialog { diff --git a/res/css/views/dialogs/_RoomUpgradeWarningDialog.pcss b/res/css/views/dialogs/_RoomUpgradeWarningDialog.pcss index 05e7f5c2e..79b3228cb 100644 --- a/res/css/views/dialogs/_RoomUpgradeWarningDialog.pcss +++ b/res/css/views/dialogs/_RoomUpgradeWarningDialog.pcss @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomUpgradeWarningDialog { diff --git a/res/css/views/dialogs/_ServerOfflineDialog.pcss b/res/css/views/dialogs/_ServerOfflineDialog.pcss index dd027fc8d..0dcd0dbfa 100644 --- a/res/css/views/dialogs/_ServerOfflineDialog.pcss +++ b/res/css/views/dialogs/_ServerOfflineDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ServerOfflineDialog { diff --git a/res/css/views/dialogs/_ServerPickerDialog.pcss b/res/css/views/dialogs/_ServerPickerDialog.pcss index 308913582..445d5aad6 100644 --- a/res/css/views/dialogs/_ServerPickerDialog.pcss +++ b/res/css/views/dialogs/_ServerPickerDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ServerPickerDialog { diff --git a/res/css/views/dialogs/_SetEmailDialog.pcss b/res/css/views/dialogs/_SetEmailDialog.pcss index a07f83acd..1be983eaa 100644 --- a/res/css/views/dialogs/_SetEmailDialog.pcss +++ b/res/css/views/dialogs/_SetEmailDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SetEmailDialog_email_input { diff --git a/res/css/views/dialogs/_SettingsDialog.pcss b/res/css/views/dialogs/_SettingsDialog.pcss index 9b0205a3b..05be3b54f 100644 --- a/res/css/views/dialogs/_SettingsDialog.pcss +++ b/res/css/views/dialogs/_SettingsDialog.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd. +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* Not actually a component but things shared by settings components */ diff --git a/res/css/views/dialogs/_ShareDialog.pcss b/res/css/views/dialogs/_ShareDialog.pcss index 0d1a5824c..086222af3 100644 --- a/res/css/views/dialogs/_ShareDialog.pcss +++ b/res/css/views/dialogs/_ShareDialog.pcss @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd. +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ShareDialog hr { diff --git a/res/css/views/dialogs/_SlashCommandHelpDialog.pcss b/res/css/views/dialogs/_SlashCommandHelpDialog.pcss index 786a28dee..8efa89e1c 100644 --- a/res/css/views/dialogs/_SlashCommandHelpDialog.pcss +++ b/res/css/views/dialogs/_SlashCommandHelpDialog.pcss @@ -1,17 +1,8 @@ /* -Copyright Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SlashCommandHelpDialog .mx_SlashCommandHelpDialog_headerRow h2 { diff --git a/res/css/views/dialogs/_SpacePreferencesDialog.pcss b/res/css/views/dialogs/_SpacePreferencesDialog.pcss index eb644f802..af75b7866 100644 --- a/res/css/views/dialogs/_SpacePreferencesDialog.pcss +++ b/res/css/views/dialogs/_SpacePreferencesDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SpacePreferencesDialog { diff --git a/res/css/views/dialogs/_SpaceSettingsDialog.pcss b/res/css/views/dialogs/_SpaceSettingsDialog.pcss index 9d4dada64..5837d01f0 100644 --- a/res/css/views/dialogs/_SpaceSettingsDialog.pcss +++ b/res/css/views/dialogs/_SpaceSettingsDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SpaceSettingsDialog { diff --git a/res/css/views/dialogs/_SpotlightDialog.pcss b/res/css/views/dialogs/_SpotlightDialog.pcss index 32c14bca9..102abed58 100644 --- a/res/css/views/dialogs/_SpotlightDialog.pcss +++ b/res/css/views/dialogs/_SpotlightDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SpotlightDialog_wrapper { diff --git a/res/css/views/dialogs/_TermsDialog.pcss b/res/css/views/dialogs/_TermsDialog.pcss index 9b48cb894..268432f44 100644 --- a/res/css/views/dialogs/_TermsDialog.pcss +++ b/res/css/views/dialogs/_TermsDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* diff --git a/res/css/views/dialogs/_UnpinAllDialog.pcss b/res/css/views/dialogs/_UnpinAllDialog.pcss index fb0580952..596f99269 100644 --- a/res/css/views/dialogs/_UnpinAllDialog.pcss +++ b/res/css/views/dialogs/_UnpinAllDialog.pcss @@ -1,17 +1,9 @@ /* - * Copyright 2024 The Matrix.org Foundation C.I.C. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. +* Copyright 2024 New Vector Ltd. +* Copyright 2024 The Matrix.org Foundation C.I.C. +* +* SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +* Please see LICENSE files in the repository root for full details. */ .mx_UnpinAllDialog { diff --git a/res/css/views/dialogs/_UntrustedDeviceDialog.pcss b/res/css/views/dialogs/_UntrustedDeviceDialog.pcss index 30b01c3f4..af7d4863b 100644 --- a/res/css/views/dialogs/_UntrustedDeviceDialog.pcss +++ b/res/css/views/dialogs/_UntrustedDeviceDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UntrustedDeviceDialog { diff --git a/res/css/views/dialogs/_UploadConfirmDialog.pcss b/res/css/views/dialogs/_UploadConfirmDialog.pcss index cf9736ce8..fc633b9b6 100644 --- a/res/css/views/dialogs/_UploadConfirmDialog.pcss +++ b/res/css/views/dialogs/_UploadConfirmDialog.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd. +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UploadConfirmDialog_fileIcon { diff --git a/res/css/views/dialogs/_UserSettingsDialog.pcss b/res/css/views/dialogs/_UserSettingsDialog.pcss index 5e564196b..4f91ea2dd 100644 --- a/res/css/views/dialogs/_UserSettingsDialog.pcss +++ b/res/css/views/dialogs/_UserSettingsDialog.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd. +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SettingsDialog_toastContainer { diff --git a/res/css/views/dialogs/_VerifyEMailDialog.pcss b/res/css/views/dialogs/_VerifyEMailDialog.pcss index c1430326f..ec2449517 100644 --- a/res/css/views/dialogs/_VerifyEMailDialog.pcss +++ b/res/css/views/dialogs/_VerifyEMailDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_VerifyEMailDialog { diff --git a/res/css/views/dialogs/_WidgetCapabilitiesPromptDialog.pcss b/res/css/views/dialogs/_WidgetCapabilitiesPromptDialog.pcss index 3c1eecb34..3cc143962 100644 --- a/res/css/views/dialogs/_WidgetCapabilitiesPromptDialog.pcss +++ b/res/css/views/dialogs/_WidgetCapabilitiesPromptDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_WidgetCapabilitiesPromptDialog { diff --git a/res/css/views/dialogs/security/_AccessSecretStorageDialog.pcss b/res/css/views/dialogs/security/_AccessSecretStorageDialog.pcss index 82e490c78..6e8309370 100644 --- a/res/css/views/dialogs/security/_AccessSecretStorageDialog.pcss +++ b/res/css/views/dialogs/security/_AccessSecretStorageDialog.pcss @@ -1,17 +1,9 @@ /* -Copyright 2018, 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2018, 2019 , 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AccessSecretStorageDialog { diff --git a/res/css/views/dialogs/security/_CreateCrossSigningDialog.pcss b/res/css/views/dialogs/security/_CreateCrossSigningDialog.pcss index 7255c49d9..e543d0892 100644 --- a/res/css/views/dialogs/security/_CreateCrossSigningDialog.pcss +++ b/res/css/views/dialogs/security/_CreateCrossSigningDialog.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CreateCrossSigningDialog { diff --git a/res/css/views/dialogs/security/_CreateKeyBackupDialog.pcss b/res/css/views/dialogs/security/_CreateKeyBackupDialog.pcss index 515d15bb5..4460abd35 100644 --- a/res/css/views/dialogs/security/_CreateKeyBackupDialog.pcss +++ b/res/css/views/dialogs/security/_CreateKeyBackupDialog.pcss @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CreateKeyBackupDialog .mx_Dialog_title { diff --git a/res/css/views/dialogs/security/_CreateSecretStorageDialog.pcss b/res/css/views/dialogs/security/_CreateSecretStorageDialog.pcss index 1a4a3f904..02d989027 100644 --- a/res/css/views/dialogs/security/_CreateSecretStorageDialog.pcss +++ b/res/css/views/dialogs/security/_CreateSecretStorageDialog.pcss @@ -1,18 +1,10 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CreateSecretStorageDialog { diff --git a/res/css/views/dialogs/security/_KeyBackupFailedDialog.pcss b/res/css/views/dialogs/security/_KeyBackupFailedDialog.pcss index 4a4801267..604e948a3 100644 --- a/res/css/views/dialogs/security/_KeyBackupFailedDialog.pcss +++ b/res/css/views/dialogs/security/_KeyBackupFailedDialog.pcss @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_KeyBackupFailedDialog .mx_Dialog_title { diff --git a/res/css/views/dialogs/security/_RestoreKeyBackupDialog.pcss b/res/css/views/dialogs/security/_RestoreKeyBackupDialog.pcss index b0b8f1d7a..832619c58 100644 --- a/res/css/views/dialogs/security/_RestoreKeyBackupDialog.pcss +++ b/res/css/views/dialogs/security/_RestoreKeyBackupDialog.pcss @@ -1,18 +1,10 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RestoreKeyBackupDialog_keyStatus { diff --git a/res/css/views/directory/_NetworkDropdown.pcss b/res/css/views/directory/_NetworkDropdown.pcss index 0b9172c01..a1d9e581b 100644 --- a/res/css/views/directory/_NetworkDropdown.pcss +++ b/res/css/views/directory/_NetworkDropdown.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_NetworkDropdown_wrapper .mx_ContextualMenu { diff --git a/res/css/views/elements/_AccessibleButton.pcss b/res/css/views/elements/_AccessibleButton.pcss index 236cd03ab..24a6c6d01 100644 --- a/res/css/views/elements/_AccessibleButton.pcss +++ b/res/css/views/elements/_AccessibleButton.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AccessibleButton { diff --git a/res/css/views/elements/_CopyableText.pcss b/res/css/views/elements/_CopyableText.pcss index edd1cdf71..7c98d5911 100644 --- a/res/css/views/elements/_CopyableText.pcss +++ b/res/css/views/elements/_CopyableText.pcss @@ -1,18 +1,10 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2022 Šimon Brandner +Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CopyableText { diff --git a/res/css/views/elements/_DesktopCapturerSourcePicker.pcss b/res/css/views/elements/_DesktopCapturerSourcePicker.pcss index 4a164d1f3..1281c74a4 100644 --- a/res/css/views/elements/_DesktopCapturerSourcePicker.pcss +++ b/res/css/views/elements/_DesktopCapturerSourcePicker.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_desktopCapturerSourcePicker { diff --git a/res/css/views/elements/_DialPadBackspaceButton.pcss b/res/css/views/elements/_DialPadBackspaceButton.pcss index b3dbf06d3..020c4ee57 100644 --- a/res/css/views/elements/_DialPadBackspaceButton.pcss +++ b/res/css/views/elements/_DialPadBackspaceButton.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DialPadBackspaceButton { diff --git a/res/css/views/elements/_Dropdown.pcss b/res/css/views/elements/_Dropdown.pcss index 4bc786080..7a3ebb9c2 100644 --- a/res/css/views/elements/_Dropdown.pcss +++ b/res/css/views/elements/_Dropdown.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Dropdown { diff --git a/res/css/views/elements/_EditableItemList.pcss b/res/css/views/elements/_EditableItemList.pcss index 46bd7c32f..34ec3199b 100644 --- a/res/css/views/elements/_EditableItemList.pcss +++ b/res/css/views/elements/_EditableItemList.pcss @@ -1,17 +1,8 @@ /* -Copyright 2017, 2019 New Vector Ltd. +Copyright 2017-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EditableItemList { diff --git a/res/css/views/elements/_ErrorBoundary.pcss b/res/css/views/elements/_ErrorBoundary.pcss index e46ba69a7..74fe0792e 100644 --- a/res/css/views/elements/_ErrorBoundary.pcss +++ b/res/css/views/elements/_ErrorBoundary.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ErrorBoundary { diff --git a/res/css/views/elements/_ExternalLink.pcss b/res/css/views/elements/_ExternalLink.pcss index 78b73ef70..7a2c51bca 100644 --- a/res/css/views/elements/_ExternalLink.pcss +++ b/res/css/views/elements/_ExternalLink.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ExternalLink { diff --git a/res/css/views/elements/_FacePile.pcss b/res/css/views/elements/_FacePile.pcss index dd6229095..e278848c2 100644 --- a/res/css/views/elements/_FacePile.pcss +++ b/res/css/views/elements/_FacePile.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_FacePile_more { diff --git a/res/css/views/elements/_Field.pcss b/res/css/views/elements/_Field.pcss index 149ea054f..92f8e41f0 100644 --- a/res/css/views/elements/_Field.pcss +++ b/res/css/views/elements/_Field.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* TODO: Consider unifying with general input styles in _light.pcss */ diff --git a/res/css/views/elements/_GenericEventListSummary.pcss b/res/css/views/elements/_GenericEventListSummary.pcss index 679078659..c13f81943 100644 --- a/res/css/views/elements/_GenericEventListSummary.pcss +++ b/res/css/views/elements/_GenericEventListSummary.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_GenericEventListSummary { diff --git a/res/css/views/elements/_ImageView.pcss b/res/css/views/elements/_ImageView.pcss index f67f8a126..a1622fe52 100644 --- a/res/css/views/elements/_ImageView.pcss +++ b/res/css/views/elements/_ImageView.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ $button-size: 32px; diff --git a/res/css/views/elements/_InfoTooltip.pcss b/res/css/views/elements/_InfoTooltip.pcss index 566abea29..a9a4dd42e 100644 --- a/res/css/views/elements/_InfoTooltip.pcss +++ b/res/css/views/elements/_InfoTooltip.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_InfoTooltip_icon { diff --git a/res/css/views/elements/_InlineSpinner.pcss b/res/css/views/elements/_InlineSpinner.pcss index 477f28784..f22a0552c 100644 --- a/res/css/views/elements/_InlineSpinner.pcss +++ b/res/css/views/elements/_InlineSpinner.pcss @@ -1,17 +1,8 @@ /* -Copyright 2017 New Vector Ltd. +Copyright 2017-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_InlineSpinner { diff --git a/res/css/views/elements/_InteractiveTooltip.pcss b/res/css/views/elements/_InteractiveTooltip.pcss index 1711b31aa..71d9fa4e2 100644 --- a/res/css/views/elements/_InteractiveTooltip.pcss +++ b/res/css/views/elements/_InteractiveTooltip.pcss @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_InteractiveTooltip_wrapper { diff --git a/res/css/views/elements/_InviteReason.pcss b/res/css/views/elements/_InviteReason.pcss index ad85ccb64..3060e8a16 100644 --- a/res/css/views/elements/_InviteReason.pcss +++ b/res/css/views/elements/_InviteReason.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_InviteReason { diff --git a/res/css/views/elements/_LabelledCheckbox.pcss b/res/css/views/elements/_LabelledCheckbox.pcss index 8545c6747..00eb20530 100644 --- a/res/css/views/elements/_LabelledCheckbox.pcss +++ b/res/css/views/elements/_LabelledCheckbox.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LabelledCheckbox { diff --git a/res/css/views/elements/_LanguageDropdown.pcss b/res/css/views/elements/_LanguageDropdown.pcss index 60f406af7..2ba7188e9 100644 --- a/res/css/views/elements/_LanguageDropdown.pcss +++ b/res/css/views/elements/_LanguageDropdown.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LanguageDropdown { diff --git a/res/css/views/elements/_MiniAvatarUploader.pcss b/res/css/views/elements/_MiniAvatarUploader.pcss index 01616cd3d..9b1845b12 100644 --- a/res/css/views/elements/_MiniAvatarUploader.pcss +++ b/res/css/views/elements/_MiniAvatarUploader.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MiniAvatarUploader { diff --git a/res/css/views/elements/_Pill.pcss b/res/css/views/elements/_Pill.pcss index 8363fc664..ccf82ff6d 100644 --- a/res/css/views/elements/_Pill.pcss +++ b/res/css/views/elements/_Pill.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Pill { diff --git a/res/css/views/elements/_PowerSelector.pcss b/res/css/views/elements/_PowerSelector.pcss index 799f6f246..f400e1076 100644 --- a/res/css/views/elements/_PowerSelector.pcss +++ b/res/css/views/elements/_PowerSelector.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd. +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_PowerSelector { diff --git a/res/css/views/elements/_ProgressBar.pcss b/res/css/views/elements/_ProgressBar.pcss index 636c34bca..8900b7d98 100644 --- a/res/css/views/elements/_ProgressBar.pcss +++ b/res/css/views/elements/_ProgressBar.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ progress.mx_ProgressBar { diff --git a/res/css/views/elements/_QRCode.pcss b/res/css/views/elements/_QRCode.pcss index 96d9114b5..595864270 100644 --- a/res/css/views/elements/_QRCode.pcss +++ b/res/css/views/elements/_QRCode.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_QRCode { diff --git a/res/css/views/elements/_ReplyChain.pcss b/res/css/views/elements/_ReplyChain.pcss index 0b8b984a9..27d8429b6 100644 --- a/res/css/views/elements/_ReplyChain.pcss +++ b/res/css/views/elements/_ReplyChain.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2018 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ReplyChain { @@ -25,7 +17,7 @@ limitations under the License. white-space: nowrap; /* Enforce 'In reply to' to be a single line */ color: $secondary-content; transition: color ease 0.15s; - font-weight: var(--cpd-font-weight-normal); + font-weight: var(--cpd-font-weight-regular); text-decoration: inherit; &:hover { diff --git a/res/css/views/elements/_ResizeHandle.pcss b/res/css/views/elements/_ResizeHandle.pcss index be913eec7..a237662f8 100644 --- a/res/css/views/elements/_ResizeHandle.pcss +++ b/res/css/views/elements/_ResizeHandle.pcss @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd. +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ResizeHandle { diff --git a/res/css/views/elements/_RoomAliasField.pcss b/res/css/views/elements/_RoomAliasField.pcss index 863bf623f..71cc32c38 100644 --- a/res/css/views/elements/_RoomAliasField.pcss +++ b/res/css/views/elements/_RoomAliasField.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomAliasField { diff --git a/res/css/views/elements/_SSOButtons.pcss b/res/css/views/elements/_SSOButtons.pcss index 2de4781c3..b69c5f99d 100644 --- a/res/css/views/elements/_SSOButtons.pcss +++ b/res/css/views/elements/_SSOButtons.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SSOButtons { diff --git a/res/css/views/elements/_SearchWarning.pcss b/res/css/views/elements/_SearchWarning.pcss index c69cfd561..03be05a1b 100644 --- a/res/css/views/elements/_SearchWarning.pcss +++ b/res/css/views/elements/_SearchWarning.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SearchWarning { diff --git a/res/css/views/elements/_ServerPicker.pcss b/res/css/views/elements/_ServerPicker.pcss index 8d4162aee..f525f65df 100644 --- a/res/css/views/elements/_ServerPicker.pcss +++ b/res/css/views/elements/_ServerPicker.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ServerPicker { diff --git a/res/css/views/elements/_SettingsFlag.pcss b/res/css/views/elements/_SettingsFlag.pcss index b53720211..604b42fd9 100644 --- a/res/css/views/elements/_SettingsFlag.pcss +++ b/res/css/views/elements/_SettingsFlag.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SettingsFlag { diff --git a/res/css/views/elements/_Spinner.pcss b/res/css/views/elements/_Spinner.pcss index 4b2016750..f5f5d4707 100644 --- a/res/css/views/elements/_Spinner.pcss +++ b/res/css/views/elements/_Spinner.pcss @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Spinner { diff --git a/res/css/views/elements/_StyledCheckbox.pcss b/res/css/views/elements/_StyledCheckbox.pcss index 66cc13279..1ea3c4d3f 100644 --- a/res/css/views/elements/_StyledCheckbox.pcss +++ b/res/css/views/elements/_StyledCheckbox.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Checkbox { diff --git a/res/css/views/elements/_StyledRadioButton.pcss b/res/css/views/elements/_StyledRadioButton.pcss index 360dc2f55..1df1c453a 100644 --- a/res/css/views/elements/_StyledRadioButton.pcss +++ b/res/css/views/elements/_StyledRadioButton.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/res/css/views/elements/_SyntaxHighlight.pcss b/res/css/views/elements/_SyntaxHighlight.pcss index e97401a16..03ad52675 100644 --- a/res/css/views/elements/_SyntaxHighlight.pcss +++ b/res/css/views/elements/_SyntaxHighlight.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SyntaxHighlight { diff --git a/res/css/views/elements/_TagComposer.pcss b/res/css/views/elements/_TagComposer.pcss index 51d9749e2..92821e827 100644 --- a/res/css/views/elements/_TagComposer.pcss +++ b/res/css/views/elements/_TagComposer.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_TagComposer { diff --git a/res/css/views/elements/_TextWithTooltip.pcss b/res/css/views/elements/_TextWithTooltip.pcss index 4a3702d6c..992215823 100644 --- a/res/css/views/elements/_TextWithTooltip.pcss +++ b/res/css/views/elements/_TextWithTooltip.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd. +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_TextWithTooltip_target { display: inline; diff --git a/res/css/views/elements/_ToggleSwitch.pcss b/res/css/views/elements/_ToggleSwitch.pcss index c18444c0b..5ff2f4610 100644 --- a/res/css/views/elements/_ToggleSwitch.pcss +++ b/res/css/views/elements/_ToggleSwitch.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ToggleSwitch { diff --git a/res/css/views/elements/_Tooltip.pcss b/res/css/views/elements/_Tooltip.pcss index 54a16a0cb..30308ed23 100644 --- a/res/css/views/elements/_Tooltip.pcss +++ b/res/css/views/elements/_Tooltip.pcss @@ -1,18 +1,9 @@ /* +Copyright 2019-2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ @keyframes mx_fadein { diff --git a/res/css/views/elements/_UseCaseSelection.pcss b/res/css/views/elements/_UseCaseSelection.pcss index 8b6a038e8..070a8a243 100644 --- a/res/css/views/elements/_UseCaseSelection.pcss +++ b/res/css/views/elements/_UseCaseSelection.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UseCaseSelection { diff --git a/res/css/views/elements/_UseCaseSelectionButton.pcss b/res/css/views/elements/_UseCaseSelectionButton.pcss index 2ca7f6c9c..99f19a945 100644 --- a/res/css/views/elements/_UseCaseSelectionButton.pcss +++ b/res/css/views/elements/_UseCaseSelectionButton.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UseCaseSelectionButton { diff --git a/res/css/views/elements/_Validation.pcss b/res/css/views/elements/_Validation.pcss index 298c75da3..e92ab9c40 100644 --- a/res/css/views/elements/_Validation.pcss +++ b/res/css/views/elements/_Validation.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Validation { diff --git a/res/css/views/emojipicker/_EmojiPicker.pcss b/res/css/views/emojipicker/_EmojiPicker.pcss index 170fd1327..6872ae873 100644 --- a/res/css/views/emojipicker/_EmojiPicker.pcss +++ b/res/css/views/emojipicker/_EmojiPicker.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 Tulir Asokan -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EmojiPicker { diff --git a/res/css/views/location/_LocationPicker.pcss b/res/css/views/location/_LocationPicker.pcss index 6598237b0..872017546 100644 --- a/res/css/views/location/_LocationPicker.pcss +++ b/res/css/views/location/_LocationPicker.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LocationPicker { diff --git a/res/css/views/messages/_CallEvent.pcss b/res/css/views/messages/_CallEvent.pcss index f8d66c5d7..45be948b4 100644 --- a/res/css/views/messages/_CallEvent.pcss +++ b/res/css/views/messages/_CallEvent.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CallEvent_wrapper { diff --git a/res/css/views/messages/_CreateEvent.pcss b/res/css/views/messages/_CreateEvent.pcss index e616742f7..7f76d0761 100644 --- a/res/css/views/messages/_CreateEvent.pcss +++ b/res/css/views/messages/_CreateEvent.pcss @@ -1,17 +1,9 @@ /* -Copyright 2018, 2020 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2018-2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EventTileBubble.mx_CreateEvent { diff --git a/res/css/views/messages/_DateSeparator.pcss b/res/css/views/messages/_DateSeparator.pcss index 39cffc0f3..7bbf465f5 100644 --- a/res/css/views/messages/_DateSeparator.pcss +++ b/res/css/views/messages/_DateSeparator.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DateSeparator_dateContent { diff --git a/res/css/views/messages/_DecryptionFailureBody.pcss b/res/css/views/messages/_DecryptionFailureBody.pcss index 2414f6caa..64a09be7e 100644 --- a/res/css/views/messages/_DecryptionFailureBody.pcss +++ b/res/css/views/messages/_DecryptionFailureBody.pcss @@ -1,20 +1,33 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DecryptionFailureBody { color: $secondary-content; font-style: italic; } + +/* Formatting for the "Verified identity has changed" error */ +.mx_DecryptionFailureVerifiedIdentityChanged > span { + /* Show it in red */ + color: var(--cpd-color-text-critical-primary); + background-color: var(--cpd-color-bg-critical-subtle); + + /* With a red border */ + border: 1px solid var(--cpd-color-border-critical-subtle); + border-radius: $font-16px; + + /* Some space inside the border */ + padding: var(--cpd-space-1x) var(--cpd-space-3x) var(--cpd-space-1x) var(--cpd-space-2x); + + /* some space between the (!) icon and text */ + display: inline-flex; + gap: var(--cpd-space-2x); + + /* Center vertically */ + align-items: center; +} diff --git a/res/css/views/messages/_DisambiguatedProfile.pcss b/res/css/views/messages/_DisambiguatedProfile.pcss index 7f65ef75d..25a28971d 100644 --- a/res/css/views/messages/_DisambiguatedProfile.pcss +++ b/res/css/views/messages/_DisambiguatedProfile.pcss @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DisambiguatedProfile { diff --git a/res/css/views/messages/_EventTileBubble.pcss b/res/css/views/messages/_EventTileBubble.pcss index f9f591893..16d48185f 100644 --- a/res/css/views/messages/_EventTileBubble.pcss +++ b/res/css/views/messages/_EventTileBubble.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EventTileBubble { diff --git a/res/css/views/messages/_HiddenBody.pcss b/res/css/views/messages/_HiddenBody.pcss index 79eb7de6a..05c8df1b0 100644 --- a/res/css/views/messages/_HiddenBody.pcss +++ b/res/css/views/messages/_HiddenBody.pcss @@ -1,15 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_HiddenBody { diff --git a/res/css/views/messages/_JumpToDatePicker.pcss b/res/css/views/messages/_JumpToDatePicker.pcss index e31fc3836..b65091aa4 100644 --- a/res/css/views/messages/_JumpToDatePicker.pcss +++ b/res/css/views/messages/_JumpToDatePicker.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_JumpToDatePicker_form { diff --git a/res/css/views/messages/_LegacyCallEvent.pcss b/res/css/views/messages/_LegacyCallEvent.pcss index 4b8c6a73c..e9a88dd8f 100644 --- a/res/css/views/messages/_LegacyCallEvent.pcss +++ b/res/css/views/messages/_LegacyCallEvent.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LegacyCallEvent_wrapper { diff --git a/res/css/views/messages/_MEmoteBody.pcss b/res/css/views/messages/_MEmoteBody.pcss index 18940844f..4d90af68f 100644 --- a/res/css/views/messages/_MEmoteBody.pcss +++ b/res/css/views/messages/_MEmoteBody.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MEmoteBody { diff --git a/res/css/views/messages/_MFileBody.pcss b/res/css/views/messages/_MFileBody.pcss index 0b7c90143..cdc0f062a 100644 --- a/res/css/views/messages/_MFileBody.pcss +++ b/res/css/views/messages/_MFileBody.pcss @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MFileBody_download { diff --git a/res/css/views/messages/_MImageBody.pcss b/res/css/views/messages/_MImageBody.pcss index e0b96f357..bb6ca1b78 100644 --- a/res/css/views/messages/_MImageBody.pcss +++ b/res/css/views/messages/_MImageBody.pcss @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MImageBody_banner { diff --git a/res/css/views/messages/_MImageReplyBody.pcss b/res/css/views/messages/_MImageReplyBody.pcss index 51ed8ed2b..58621c787 100644 --- a/res/css/views/messages/_MImageReplyBody.pcss +++ b/res/css/views/messages/_MImageReplyBody.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 Tulir Asokan -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MImageReplyBody { diff --git a/res/css/views/messages/_MJitsiWidgetEvent.pcss b/res/css/views/messages/_MJitsiWidgetEvent.pcss index 50cb9c34a..6375c99d5 100644 --- a/res/css/views/messages/_MJitsiWidgetEvent.pcss +++ b/res/css/views/messages/_MJitsiWidgetEvent.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EventTileBubble.mx_MJitsiWidgetEvent { diff --git a/res/css/views/messages/_MLocationBody.pcss b/res/css/views/messages/_MLocationBody.pcss index 27d328ee6..c388a58ee 100644 --- a/res/css/views/messages/_MLocationBody.pcss +++ b/res/css/views/messages/_MLocationBody.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MLocationBody { diff --git a/res/css/views/messages/_MNoticeBody.pcss b/res/css/views/messages/_MNoticeBody.pcss index b68bfd2c0..92647ba90 100644 --- a/res/css/views/messages/_MNoticeBody.pcss +++ b/res/css/views/messages/_MNoticeBody.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MNoticeBody { diff --git a/res/css/views/messages/_MPollBody.pcss b/res/css/views/messages/_MPollBody.pcss index 60a516b00..7b272d7aa 100644 --- a/res/css/views/messages/_MPollBody.pcss +++ b/res/css/views/messages/_MPollBody.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MPollBody { diff --git a/res/css/views/messages/_MPollEndBody.pcss b/res/css/views/messages/_MPollEndBody.pcss index db3026550..59787818b 100644 --- a/res/css/views/messages/_MPollEndBody.pcss +++ b/res/css/views/messages/_MPollEndBody.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MPollEndBody_icon { diff --git a/res/css/views/messages/_MStickerBody.pcss b/res/css/views/messages/_MStickerBody.pcss index 5fea4adf8..7db1c396c 100644 --- a/res/css/views/messages/_MStickerBody.pcss +++ b/res/css/views/messages/_MStickerBody.pcss @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd. +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MStickerBody_wrapper { diff --git a/res/css/views/messages/_MTextBody.pcss b/res/css/views/messages/_MTextBody.pcss index 93a89ad1b..9d17fc4f0 100644 --- a/res/css/views/messages/_MTextBody.pcss +++ b/res/css/views/messages/_MTextBody.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MTextBody { diff --git a/res/css/views/messages/_MVideoBody.pcss b/res/css/views/messages/_MVideoBody.pcss index 94ef39eb1..bc384754a 100644 --- a/res/css/views/messages/_MVideoBody.pcss +++ b/res/css/views/messages/_MVideoBody.pcss @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ span.mx_MVideoBody { diff --git a/res/css/views/messages/_MediaBody.pcss b/res/css/views/messages/_MediaBody.pcss index b4fd93058..aeafe0f0e 100644 --- a/res/css/views/messages/_MediaBody.pcss +++ b/res/css/views/messages/_MediaBody.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* A "media body" is any file upload looking thing, apart from images and videos (they */ diff --git a/res/css/views/messages/_MessageActionBar.pcss b/res/css/views/messages/_MessageActionBar.pcss index 64c51972e..b8333defd 100644 --- a/res/css/views/messages/_MessageActionBar.pcss +++ b/res/css/views/messages/_MessageActionBar.pcss @@ -1,18 +1,9 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MessageActionBar { diff --git a/res/css/views/messages/_MessageTimestamp.pcss b/res/css/views/messages/_MessageTimestamp.pcss index 62da40665..2bb90033e 100644 --- a/res/css/views/messages/_MessageTimestamp.pcss +++ b/res/css/views/messages/_MessageTimestamp.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ :root { diff --git a/res/css/views/messages/_MjolnirBody.pcss b/res/css/views/messages/_MjolnirBody.pcss index 2760adfd7..5c9a749c0 100644 --- a/res/css/views/messages/_MjolnirBody.pcss +++ b/res/css/views/messages/_MjolnirBody.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MjolnirBody { diff --git a/res/css/views/messages/_ReactionsRow.pcss b/res/css/views/messages/_ReactionsRow.pcss index 7d54e3ce2..36e4ec26e 100644 --- a/res/css/views/messages/_ReactionsRow.pcss +++ b/res/css/views/messages/_ReactionsRow.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ReactionsRow { diff --git a/res/css/views/messages/_ReactionsRowButton.pcss b/res/css/views/messages/_ReactionsRowButton.pcss index 26d2d25fa..f2e3885de 100644 --- a/res/css/views/messages/_ReactionsRowButton.pcss +++ b/res/css/views/messages/_ReactionsRowButton.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ReactionsRowButton { diff --git a/res/css/views/messages/_RedactedBody.pcss b/res/css/views/messages/_RedactedBody.pcss index 3db574468..65027ffb9 100644 --- a/res/css/views/messages/_RedactedBody.pcss +++ b/res/css/views/messages/_RedactedBody.pcss @@ -1,15 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RedactedBody { diff --git a/res/css/views/messages/_RoomAvatarEvent.pcss b/res/css/views/messages/_RoomAvatarEvent.pcss index 6b232cd93..f8ff857c8 100644 --- a/res/css/views/messages/_RoomAvatarEvent.pcss +++ b/res/css/views/messages/_RoomAvatarEvent.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomAvatarEvent_avatar { diff --git a/res/css/views/messages/_TextualEvent.pcss b/res/css/views/messages/_TextualEvent.pcss index a8f8d606e..2a27efccc 100644 --- a/res/css/views/messages/_TextualEvent.pcss +++ b/res/css/views/messages/_TextualEvent.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_TextualEvent { diff --git a/res/css/views/messages/_TimelineSeparator.pcss b/res/css/views/messages/_TimelineSeparator.pcss index d8550179a..fcf41e9f0 100644 --- a/res/css/views/messages/_TimelineSeparator.pcss +++ b/res/css/views/messages/_TimelineSeparator.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_TimelineSeparator { @@ -20,7 +12,7 @@ limitations under the License. display: flex; align-items: center; font: var(--cpd-font-body-md-regular); - color: var(--cpd-color-text-secondary); + color: var(--cpd-color-text-primary); } .mx_TimelineSeparator > hr { diff --git a/res/css/views/messages/_UnknownBody.pcss b/res/css/views/messages/_UnknownBody.pcss index 9036e12bf..2b7680521 100644 --- a/res/css/views/messages/_UnknownBody.pcss +++ b/res/css/views/messages/_UnknownBody.pcss @@ -1,14 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UnknownBody { diff --git a/res/css/views/messages/_ViewSourceEvent.pcss b/res/css/views/messages/_ViewSourceEvent.pcss index 0b76ed595..b8b240816 100644 --- a/res/css/views/messages/_ViewSourceEvent.pcss +++ b/res/css/views/messages/_ViewSourceEvent.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EventTile_content.mx_ViewSourceEvent { diff --git a/res/css/views/messages/_common_CryptoEvent.pcss b/res/css/views/messages/_common_CryptoEvent.pcss index 41d9e378f..ef0177c2d 100644 --- a/res/css/views/messages/_common_CryptoEvent.pcss +++ b/res/css/views/messages/_common_CryptoEvent.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EventTileBubble.mx_cryptoEvent { diff --git a/res/css/views/polls/pollHistory/_PollHistory.pcss b/res/css/views/polls/pollHistory/_PollHistory.pcss index ee7860dd6..a68e6ffaf 100644 --- a/res/css/views/polls/pollHistory/_PollHistory.pcss +++ b/res/css/views/polls/pollHistory/_PollHistory.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_PollHistory_content { diff --git a/res/css/views/polls/pollHistory/_PollHistoryList.pcss b/res/css/views/polls/pollHistory/_PollHistoryList.pcss index be6ca7423..4ac97a70d 100644 --- a/res/css/views/polls/pollHistory/_PollHistoryList.pcss +++ b/res/css/views/polls/pollHistory/_PollHistoryList.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_PollHistoryList { diff --git a/res/css/views/right_panel/_BaseCard.pcss b/res/css/views/right_panel/_BaseCard.pcss index 12a0abda1..2adf71e25 100644 --- a/res/css/views/right_panel/_BaseCard.pcss +++ b/res/css/views/right_panel/_BaseCard.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_BaseCard { diff --git a/res/css/views/right_panel/_EmptyState.pcss b/res/css/views/right_panel/_EmptyState.pcss index 4bf620bae..8ac6ac255 100644 --- a/res/css/views/right_panel/_EmptyState.pcss +++ b/res/css/views/right_panel/_EmptyState.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EmptyState { diff --git a/res/css/views/right_panel/_EncryptionInfo.pcss b/res/css/views/right_panel/_EncryptionInfo.pcss index b3d4275f6..e9fbc7368 100644 --- a/res/css/views/right_panel/_EncryptionInfo.pcss +++ b/res/css/views/right_panel/_EncryptionInfo.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EncryptionInfo_spinner { diff --git a/res/css/views/right_panel/_ExtensionsCard.pcss b/res/css/views/right_panel/_ExtensionsCard.pcss index ea5431fb3..f731ab4b2 100644 --- a/res/css/views/right_panel/_ExtensionsCard.pcss +++ b/res/css/views/right_panel/_ExtensionsCard.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ExtensionsCard { diff --git a/res/css/views/right_panel/_PinnedMessagesCard.pcss b/res/css/views/right_panel/_PinnedMessagesCard.pcss index 23e23bae8..731af8b14 100644 --- a/res/css/views/right_panel/_PinnedMessagesCard.pcss +++ b/res/css/views/right_panel/_PinnedMessagesCard.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_PinnedMessagesCard { diff --git a/res/css/views/right_panel/_RightPanelTabs.pcss b/res/css/views/right_panel/_RightPanelTabs.pcss index afaae6c65..24824d3fe 100644 --- a/res/css/views/right_panel/_RightPanelTabs.pcss +++ b/res/css/views/right_panel/_RightPanelTabs.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RightPanelTabs { diff --git a/res/css/views/right_panel/_RoomSummaryCard.pcss b/res/css/views/right_panel/_RoomSummaryCard.pcss index da1a5a251..6648adc85 100644 --- a/res/css/views/right_panel/_RoomSummaryCard.pcss +++ b/res/css/views/right_panel/_RoomSummaryCard.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomSummaryCard { diff --git a/res/css/views/right_panel/_ThreadPanel.pcss b/res/css/views/right_panel/_ThreadPanel.pcss index fc1d39c9c..c350a450a 100644 --- a/res/css/views/right_panel/_ThreadPanel.pcss +++ b/res/css/views/right_panel/_ThreadPanel.pcss @@ -1,17 +1,9 @@ /* -Copyright 2021,2024 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ThreadPanel { diff --git a/res/css/views/right_panel/_TimelineCard.pcss b/res/css/views/right_panel/_TimelineCard.pcss index 0333201f0..adaf20f28 100644 --- a/res/css/views/right_panel/_TimelineCard.pcss +++ b/res/css/views/right_panel/_TimelineCard.pcss @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_TimelineCard { diff --git a/res/css/views/right_panel/_UserInfo.pcss b/res/css/views/right_panel/_UserInfo.pcss index 186eb78a3..0deb3d370 100644 --- a/res/css/views/right_panel/_UserInfo.pcss +++ b/res/css/views/right_panel/_UserInfo.pcss @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UserInfo.mx_BaseCard { @@ -132,6 +124,10 @@ limitations under the License. } } + .mx_UserInfo_timezone { + margin: var(--cpd-space-1x) 0; + } + .mx_PresenceLabel { font: var(--cpd-font-body-sm-regular); opacity: 1; diff --git a/res/css/views/right_panel/_VerificationPanel.pcss b/res/css/views/right_panel/_VerificationPanel.pcss index ff080e8cb..f743724b5 100644 --- a/res/css/views/right_panel/_VerificationPanel.pcss +++ b/res/css/views/right_panel/_VerificationPanel.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_VerificationPanel_verified_section, diff --git a/res/css/views/right_panel/_WidgetCard.pcss b/res/css/views/right_panel/_WidgetCard.pcss index b50f30145..6fcc3e996 100644 --- a/res/css/views/right_panel/_WidgetCard.pcss +++ b/res/css/views/right_panel/_WidgetCard.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_WidgetCard { diff --git a/res/css/views/room_settings/_AliasSettings.pcss b/res/css/views/room_settings/_AliasSettings.pcss index f813d6d21..ca2c24b29 100644 --- a/res/css/views/room_settings/_AliasSettings.pcss +++ b/res/css/views/room_settings/_AliasSettings.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd. +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AliasSettings_localAddresses { diff --git a/res/css/views/rooms/_AppsDrawer.pcss b/res/css/views/rooms/_AppsDrawer.pcss index 83888d0b9..baf967b7d 100644 --- a/res/css/views/rooms/_AppsDrawer.pcss +++ b/res/css/views/rooms/_AppsDrawer.pcss @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ :root { diff --git a/res/css/views/rooms/_AuxPanel.pcss b/res/css/views/rooms/_AuxPanel.pcss index 80abbb138..f1440fd98 100644 --- a/res/css/views/rooms/_AuxPanel.pcss +++ b/res/css/views/rooms/_AuxPanel.pcss @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AuxPanel { diff --git a/res/css/views/rooms/_BasicMessageComposer.pcss b/res/css/views/rooms/_BasicMessageComposer.pcss index 3add788b1..e34c991d8 100644 --- a/res/css/views/rooms/_BasicMessageComposer.pcss +++ b/res/css/views/rooms/_BasicMessageComposer.pcss @@ -1,18 +1,9 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_BasicMessageComposer { diff --git a/res/css/views/rooms/_DecryptionFailureBar.pcss b/res/css/views/rooms/_DecryptionFailureBar.pcss index 4d9ed91e5..d38d753e0 100644 --- a/res/css/views/rooms/_DecryptionFailureBar.pcss +++ b/res/css/views/rooms/_DecryptionFailureBar.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DecryptionFailureBar { diff --git a/res/css/views/rooms/_E2EIcon.pcss b/res/css/views/rooms/_E2EIcon.pcss index d6c184f10..0d9e7cf7e 100644 --- a/res/css/views/rooms/_E2EIcon.pcss +++ b/res/css/views/rooms/_E2EIcon.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_E2EIcon { diff --git a/res/css/views/rooms/_EditMessageComposer.pcss b/res/css/views/rooms/_EditMessageComposer.pcss index 72f721408..0fcc8345e 100644 --- a/res/css/views/rooms/_EditMessageComposer.pcss +++ b/res/css/views/rooms/_EditMessageComposer.pcss @@ -1,18 +1,9 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EditMessageComposer { diff --git a/res/css/views/rooms/_EmojiButton.pcss b/res/css/views/rooms/_EmojiButton.pcss index 8de0a78fe..8efdbb7dd 100644 --- a/res/css/views/rooms/_EmojiButton.pcss +++ b/res/css/views/rooms/_EmojiButton.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EmojiButton { diff --git a/res/css/views/rooms/_EntityTile.pcss b/res/css/views/rooms/_EntityTile.pcss index 1df4ff3dc..7b23cde43 100644 --- a/res/css/views/rooms/_EntityTile.pcss +++ b/res/css/views/rooms/_EntityTile.pcss @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EntityTile { diff --git a/res/css/views/rooms/_EventBubbleTile.pcss b/res/css/views/rooms/_EventBubbleTile.pcss index 6abf1ac83..ec443c44d 100644 --- a/res/css/views/rooms/_EventBubbleTile.pcss +++ b/res/css/views/rooms/_EventBubbleTile.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomView_body[data-layout="bubble"] { diff --git a/res/css/views/rooms/_EventTile.pcss b/res/css/views/rooms/_EventTile.pcss index 62204b52c..e1bd30463 100644 --- a/res/css/views/rooms/_EventTile.pcss +++ b/res/css/views/rooms/_EventTile.pcss @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2020-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ $left-gutter: 64px; @@ -126,7 +118,8 @@ $left-gutter: 64px; .mx_ReplyChain--expanded { .mx_EventTile_body { - display: block; + /* !important needed to override .mx_ReplyTile .mx_EventTile_content .mx_EventTile_body */ + display: block !important; overflow-y: scroll; } @@ -899,7 +892,7 @@ $left-gutter: 64px; object-fit: contain; object-position: left top; - /* Override the default colors of the 'github-markdown-css' library + /* Override the default colors of the 'github-markdown-css' library (#fff for light theme, #000 for dark theme) to match the inherited theme */ background-color: inherit !important; } diff --git a/res/css/views/rooms/_HistoryTile.pcss b/res/css/views/rooms/_HistoryTile.pcss index 5f656381c..659ccdaef 100644 --- a/res/css/views/rooms/_HistoryTile.pcss +++ b/res/css/views/rooms/_HistoryTile.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Robin Townsend -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EventTileBubble.mx_HistoryTile { diff --git a/res/css/views/rooms/_IRCLayout.pcss b/res/css/views/rooms/_IRCLayout.pcss index 6f4b7c280..ecf1c2571 100644 --- a/res/css/views/rooms/_IRCLayout.pcss +++ b/res/css/views/rooms/_IRCLayout.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ :root { diff --git a/res/css/views/rooms/_JumpToBottomButton.pcss b/res/css/views/rooms/_JumpToBottomButton.pcss index 5bf2c0c0b..7ca4efe5d 100644 --- a/res/css/views/rooms/_JumpToBottomButton.pcss +++ b/res/css/views/rooms/_JumpToBottomButton.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_JumpToBottomButton { diff --git a/res/css/views/rooms/_LegacyRoomHeader.pcss b/res/css/views/rooms/_LegacyRoomHeader.pcss index a570b0435..2a2a40265 100644 --- a/res/css/views/rooms/_LegacyRoomHeader.pcss +++ b/res/css/views/rooms/_LegacyRoomHeader.pcss @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ :root { diff --git a/res/css/views/rooms/_LinkPreviewGroup.pcss b/res/css/views/rooms/_LinkPreviewGroup.pcss index 2857db5a3..9c9ad1825 100644 --- a/res/css/views/rooms/_LinkPreviewGroup.pcss +++ b/res/css/views/rooms/_LinkPreviewGroup.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LinkPreviewGroup { diff --git a/res/css/views/rooms/_LinkPreviewWidget.pcss b/res/css/views/rooms/_LinkPreviewWidget.pcss index 7949233a9..03134ce73 100644 --- a/res/css/views/rooms/_LinkPreviewWidget.pcss +++ b/res/css/views/rooms/_LinkPreviewWidget.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LinkPreviewWidget { diff --git a/res/css/views/rooms/_LiveContentSummary.pcss b/res/css/views/rooms/_LiveContentSummary.pcss index 2cd6230d7..03f62d975 100644 --- a/res/css/views/rooms/_LiveContentSummary.pcss +++ b/res/css/views/rooms/_LiveContentSummary.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LiveContentSummary { diff --git a/res/css/views/rooms/_MemberList.pcss b/res/css/views/rooms/_MemberList.pcss index 6e2e5a43a..dd3d385bd 100644 --- a/res/css/views/rooms/_MemberList.pcss +++ b/res/css/views/rooms/_MemberList.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MemberList { diff --git a/res/css/views/rooms/_MessageComposer.pcss b/res/css/views/rooms/_MessageComposer.pcss index d88350e94..c8f4105ed 100644 --- a/res/css/views/rooms/_MessageComposer.pcss +++ b/res/css/views/rooms/_MessageComposer.pcss @@ -1,18 +1,9 @@ /* +Copyright 2018-2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MessageComposer_wrapper { diff --git a/res/css/views/rooms/_MessageComposerFormatBar.pcss b/res/css/views/rooms/_MessageComposerFormatBar.pcss index 1cbabecc3..cb412ff82 100644 --- a/res/css/views/rooms/_MessageComposerFormatBar.pcss +++ b/res/css/views/rooms/_MessageComposerFormatBar.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MessageComposerFormatBar { diff --git a/res/css/views/rooms/_NewRoomIntro.pcss b/res/css/views/rooms/_NewRoomIntro.pcss index 8ca27ac36..84fa5aead 100644 --- a/res/css/views/rooms/_NewRoomIntro.pcss +++ b/res/css/views/rooms/_NewRoomIntro.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_NewRoomIntro { diff --git a/res/css/views/rooms/_NotificationBadge.pcss b/res/css/views/rooms/_NotificationBadge.pcss index 6ffe7d9da..1e708fc84 100644 --- a/res/css/views/rooms/_NotificationBadge.pcss +++ b/res/css/views/rooms/_NotificationBadge.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_NotificationBadge { diff --git a/res/css/views/rooms/_PinnedEventTile.pcss b/res/css/views/rooms/_PinnedEventTile.pcss index b42de7564..f58645ee8 100644 --- a/res/css/views/rooms/_PinnedEventTile.pcss +++ b/res/css/views/rooms/_PinnedEventTile.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_PinnedEventTile { @@ -23,7 +15,11 @@ limitations under the License. display: flex; flex-direction: column; gap: var(--cpd-space-1x); - width: 100%; + /* Remove avatar width and space between the avatar and the wrapper */ + /* We need it to make the location fit */ + width: calc(100% - var(--cpd-space-4x) - 32px); + /* Prevent a long sender name to overflow the tile */ + overflow: hidden; .mx_PinnedEventTile_top { display: flex; @@ -35,6 +31,30 @@ limitations under the License. text-overflow: ellipsis; overflow: hidden; white-space: nowrap; + font: var(--cpd-font-body-md-semibold); + } + } + + .mx_PinnedEventTile_thread { + display: flex; + gap: var(--cpd-space-2x); + font: var(--cpd-font-body-sm-regular); + + svg { + width: 20px; + fill: var(--cpd-color-icon-tertiary); + } + + span { + display: flex; + color: var(--cpd-color-text-secondary); + } + + button { + background: transparent; + border: none; + cursor: pointer; + text-decoration: underline; } } } diff --git a/res/css/views/rooms/_PinnedMessageBanner.pcss b/res/css/views/rooms/_PinnedMessageBanner.pcss new file mode 100644 index 000000000..dd753b7c9 --- /dev/null +++ b/res/css/views/rooms/_PinnedMessageBanner.pcss @@ -0,0 +1,116 @@ +/* +* Copyright 2024 New Vector Ltd. +* Copyright 2024 The Matrix.org Foundation C.I.C. +* +* SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +* Please see LICENSE files in the repository root for full details. + */ + +.mx_PinnedMessageBanner { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--cpd-space-4x); + /* 64px = 63px + 1px from the bottom border */ + height: 63px; + padding: 0 var(--cpd-space-4x); + + background-color: var(--cpd-color-bg-canvas-default); + border-bottom: 1px solid var(--cpd-color-gray-400); + + /* From figma */ + box-shadow: 0 var(--cpd-space-2x) var(--cpd-space-6x) calc(var(--cpd-space-2x) * -1) rgba(27, 29, 34, 0.1); + + .mx_PinnedMessageBanner_main { + background: transparent; + border: none; + text-align: start; + cursor: pointer; + + height: 100%; + flex-grow: 1; + display: flex; + align-items: center; + + .mx_PinnedMessageBanner_content { + display: grid; + grid-template: + "indicators pinIcon title" auto + "indicators pinIcon message" auto; + column-gap: var(--cpd-space-2x); + } + + .mx_PinnedMessageBanner_Indicators { + grid-area: indicators; + display: flex; + flex-direction: column; + gap: var(--cpd-space-0-5x); + height: 100%; + + .mx_PinnedMessageBanner_Indicator { + width: var(--cpd-space-0-5x); + background-color: var(--cpd-color-gray-600); + height: 100%; + } + + .mx_PinnedMessageBanner_Indicator--active { + background-color: var(--cpd-color-icon-accent-primary); + } + + .mx_PinnedMessageBanner_Indicator--hidden { + background-color: transparent; + } + } + + .mx_PinnedMessageBanner_PinIcon { + grid-area: pinIcon; + align-self: center; + fill: var(--cpd-color-icon-secondary-alpha); + } + + .mx_PinnedMessageBanner_title { + grid-area: title; + font: var(--cpd-font-body-sm-regular); + color: var(--cpd-color-text-action-accent); + line-height: 20px; + + .mx_PinnedMessageBanner_title_counter { + font: var(--cpd-font-body-sm-semibold); + } + } + + .mx_PinnedMessageBanner_message { + grid-area: message; + font: var(--cpd-font-body-sm-regular); + line-height: 20px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + .mx_PinnedMessageBanner_prefix { + font: var(--cpd-font-body-sm-semibold); + } + } + + .mx_PinnedMessageBanner_redactedMessage { + grid-area: message; + height: 20px; + display: flex; + align-items: center; + } + } + + .mx_PinnedMessageBanner_actions { + white-space: nowrap; + } +} + +.mx_PinnedMessageBanner[data-single-message="true"] { + .mx_PinnedMessageBanner_content { + grid-template: "indicators pinIcon message" auto; + + .mx_PinnedMessageBanner_message { + line-height: 40px; + } + } +} diff --git a/res/css/views/rooms/_PresenceLabel.pcss b/res/css/views/rooms/_PresenceLabel.pcss index e775fb08e..c9c610c22 100644 --- a/res/css/views/rooms/_PresenceLabel.pcss +++ b/res/css/views/rooms/_PresenceLabel.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_PresenceLabel { diff --git a/res/css/views/rooms/_ReadReceiptGroup.pcss b/res/css/views/rooms/_ReadReceiptGroup.pcss index 5176a3208..743f38459 100644 --- a/res/css/views/rooms/_ReadReceiptGroup.pcss +++ b/res/css/views/rooms/_ReadReceiptGroup.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ReadReceiptGroup { diff --git a/res/css/views/rooms/_ReplyPreview.pcss b/res/css/views/rooms/_ReplyPreview.pcss index 95a061c40..086d829e3 100644 --- a/res/css/views/rooms/_ReplyPreview.pcss +++ b/res/css/views/rooms/_ReplyPreview.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2018 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ReplyPreview { diff --git a/res/css/views/rooms/_ReplyTile.pcss b/res/css/views/rooms/_ReplyTile.pcss index 980e0b00d..98b3c36c7 100644 --- a/res/css/views/rooms/_ReplyTile.pcss +++ b/res/css/views/rooms/_ReplyTile.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 Tulir Asokan -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ReplyTile { @@ -77,6 +69,11 @@ limitations under the License. font-size: $font-14px !important; /* Override the big emoji override */ } + // in order to keep the message on two lines, we need to make the body inline + .mx_EventTile_body { + display: inline; + } + // Hide line numbers and edited indicator .mx_EventTile_lineNumbers, .mx_EventTile_edited { diff --git a/res/css/views/rooms/_RoomBreadcrumbs.pcss b/res/css/views/rooms/_RoomBreadcrumbs.pcss index 73c4b2743..8aadb3061 100644 --- a/res/css/views/rooms/_RoomBreadcrumbs.pcss +++ b/res/css/views/rooms/_RoomBreadcrumbs.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomBreadcrumbs { diff --git a/res/css/views/rooms/_RoomCallBanner.pcss b/res/css/views/rooms/_RoomCallBanner.pcss index 974b1be25..1b0b08992 100644 --- a/res/css/views/rooms/_RoomCallBanner.pcss +++ b/res/css/views/rooms/_RoomCallBanner.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomCallBanner { diff --git a/res/css/views/rooms/_RoomHeader.pcss b/res/css/views/rooms/_RoomHeader.pcss index 86eabd703..911cf4721 100644 --- a/res/css/views/rooms/_RoomHeader.pcss +++ b/res/css/views/rooms/_RoomHeader.pcss @@ -1,23 +1,15 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomHeader { height: 64px; box-sizing: border-box; - padding: 0 var(--cpd-space-3x); + padding: 0 var(--cpd-space-3x) 0 calc(var(--cpd-space-3x) + var(--cpd-space-1-5x)); border-bottom: 1px solid $separator; background-color: $background; transition: all 0.2s ease; @@ -39,6 +31,8 @@ limitations under the License. cursor: pointer; gap: var(--cpd-space-3x); text-align: left; + height: 100%; + padding: 0; } .mx_RoomHeader_info { diff --git a/res/css/views/rooms/_RoomInfoLine.pcss b/res/css/views/rooms/_RoomInfoLine.pcss index 237ba389e..9bff47c28 100644 --- a/res/css/views/rooms/_RoomInfoLine.pcss +++ b/res/css/views/rooms/_RoomInfoLine.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomInfoLine { diff --git a/res/css/views/rooms/_RoomKnocksBar.pcss b/res/css/views/rooms/_RoomKnocksBar.pcss index 90b7d6b3f..4fc1ab9a7 100644 --- a/res/css/views/rooms/_RoomKnocksBar.pcss +++ b/res/css/views/rooms/_RoomKnocksBar.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Nordeck IT + Consulting GmbH -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomKnocksBar { diff --git a/res/css/views/rooms/_RoomList.pcss b/res/css/views/rooms/_RoomList.pcss index 32d03253d..4ceba9a20 100644 --- a/res/css/views/rooms/_RoomList.pcss +++ b/res/css/views/rooms/_RoomList.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomList { diff --git a/res/css/views/rooms/_RoomListHeader.pcss b/res/css/views/rooms/_RoomListHeader.pcss index 84e391c09..e474cacfc 100644 --- a/res/css/views/rooms/_RoomListHeader.pcss +++ b/res/css/views/rooms/_RoomListHeader.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomListHeader { diff --git a/res/css/views/rooms/_RoomPreviewBar.pcss b/res/css/views/rooms/_RoomPreviewBar.pcss index a3fae0e00..e05283837 100644 --- a/res/css/views/rooms/_RoomPreviewBar.pcss +++ b/res/css/views/rooms/_RoomPreviewBar.pcss @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomPreviewBar { diff --git a/res/css/views/rooms/_RoomPreviewCard.pcss b/res/css/views/rooms/_RoomPreviewCard.pcss index 241b6f37f..6b070de27 100644 --- a/res/css/views/rooms/_RoomPreviewCard.pcss +++ b/res/css/views/rooms/_RoomPreviewCard.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomPreviewCard { diff --git a/res/css/views/rooms/_RoomSearchAuxPanel.pcss b/res/css/views/rooms/_RoomSearchAuxPanel.pcss index a47616a68..91ed8fe9f 100644 --- a/res/css/views/rooms/_RoomSearchAuxPanel.pcss +++ b/res/css/views/rooms/_RoomSearchAuxPanel.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomSearchAuxPanel { diff --git a/res/css/views/rooms/_RoomSublist.pcss b/res/css/views/rooms/_RoomSublist.pcss index 0e9ad1a9b..9fae0e9ba 100644 --- a/res/css/views/rooms/_RoomSublist.pcss +++ b/res/css/views/rooms/_RoomSublist.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomSublist { diff --git a/res/css/views/rooms/_RoomTile.pcss b/res/css/views/rooms/_RoomTile.pcss index decd1067b..9db013463 100644 --- a/res/css/views/rooms/_RoomTile.pcss +++ b/res/css/views/rooms/_RoomTile.pcss @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* Note: the room tile expects to be in a flexbox column container */ diff --git a/res/css/views/rooms/_RoomUpgradeWarningBar.pcss b/res/css/views/rooms/_RoomUpgradeWarningBar.pcss index 26a63232a..240132dd7 100644 --- a/res/css/views/rooms/_RoomUpgradeWarningBar.pcss +++ b/res/css/views/rooms/_RoomUpgradeWarningBar.pcss @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomUpgradeWarningBar { diff --git a/res/css/views/rooms/_SendMessageComposer.pcss b/res/css/views/rooms/_SendMessageComposer.pcss index 30f2670c5..b88bb3947 100644 --- a/res/css/views/rooms/_SendMessageComposer.pcss +++ b/res/css/views/rooms/_SendMessageComposer.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SendMessageComposer { diff --git a/res/css/views/rooms/_ThirdPartyMemberInfo.pcss b/res/css/views/rooms/_ThirdPartyMemberInfo.pcss index cd680eea6..c645a0ba3 100644 --- a/res/css/views/rooms/_ThirdPartyMemberInfo.pcss +++ b/res/css/views/rooms/_ThirdPartyMemberInfo.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ThirdPartyMemberInfo { diff --git a/res/css/views/rooms/_ThreadSummary.pcss b/res/css/views/rooms/_ThreadSummary.pcss index ccfc52797..b07c747d2 100644 --- a/res/css/views/rooms/_ThreadSummary.pcss +++ b/res/css/views/rooms/_ThreadSummary.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ThreadSummary, diff --git a/res/css/views/rooms/_TopUnreadMessagesBar.pcss b/res/css/views/rooms/_TopUnreadMessagesBar.pcss index 6c25ff8e7..01fa75ef0 100644 --- a/res/css/views/rooms/_TopUnreadMessagesBar.pcss +++ b/res/css/views/rooms/_TopUnreadMessagesBar.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_TopUnreadMessagesBar { diff --git a/res/css/views/rooms/_VoiceRecordComposerTile.pcss b/res/css/views/rooms/_VoiceRecordComposerTile.pcss index 936aee0f3..92a06f93f 100644 --- a/res/css/views/rooms/_VoiceRecordComposerTile.pcss +++ b/res/css/views/rooms/_VoiceRecordComposerTile.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_VoiceRecordComposerTile_stop { diff --git a/res/css/views/rooms/_WhoIsTypingTile.pcss b/res/css/views/rooms/_WhoIsTypingTile.pcss index b981526e5..a126a8baf 100644 --- a/res/css/views/rooms/_WhoIsTypingTile.pcss +++ b/res/css/views/rooms/_WhoIsTypingTile.pcss @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_WhoIsTypingTile { diff --git a/res/css/views/rooms/wysiwyg_composer/_EditWysiwygComposer.pcss b/res/css/views/rooms/wysiwyg_composer/_EditWysiwygComposer.pcss index 235c2db91..4f40280c2 100644 --- a/res/css/views/rooms/wysiwyg_composer/_EditWysiwygComposer.pcss +++ b/res/css/views/rooms/wysiwyg_composer/_EditWysiwygComposer.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_EditWysiwygComposer { diff --git a/res/css/views/rooms/wysiwyg_composer/_SendWysiwygComposer.pcss b/res/css/views/rooms/wysiwyg_composer/_SendWysiwygComposer.pcss index 5ca1cab01..b629088da 100644 --- a/res/css/views/rooms/wysiwyg_composer/_SendWysiwygComposer.pcss +++ b/res/css/views/rooms/wysiwyg_composer/_SendWysiwygComposer.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SendWysiwygComposer { diff --git a/res/css/views/rooms/wysiwyg_composer/components/_Editor.pcss b/res/css/views/rooms/wysiwyg_composer/components/_Editor.pcss index 595a67b12..81c1e3bfe 100644 --- a/res/css/views/rooms/wysiwyg_composer/components/_Editor.pcss +++ b/res/css/views/rooms/wysiwyg_composer/components/_Editor.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_WysiwygComposer_Editor_container { diff --git a/res/css/views/rooms/wysiwyg_composer/components/_FormattingButtons.pcss b/res/css/views/rooms/wysiwyg_composer/components/_FormattingButtons.pcss index 347f47506..420475316 100644 --- a/res/css/views/rooms/wysiwyg_composer/components/_FormattingButtons.pcss +++ b/res/css/views/rooms/wysiwyg_composer/components/_FormattingButtons.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_FormattingButtons { diff --git a/res/css/views/rooms/wysiwyg_composer/components/_LinkModal.pcss b/res/css/views/rooms/wysiwyg_composer/components/_LinkModal.pcss index b5c1c04d5..77848421f 100644 --- a/res/css/views/rooms/wysiwyg_composer/components/_LinkModal.pcss +++ b/res/css/views/rooms/wysiwyg_composer/components/_LinkModal.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LinkModal { diff --git a/res/css/views/settings/_AvatarSetting.pcss b/res/css/views/settings/_AvatarSetting.pcss index 7f63c3a56..fcab16a98 100644 --- a/res/css/views/settings/_AvatarSetting.pcss +++ b/res/css/views/settings/_AvatarSetting.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AvatarSetting_avatar { diff --git a/res/css/views/settings/_CrossSigningPanel.pcss b/res/css/views/settings/_CrossSigningPanel.pcss index c00c9dfdc..7a68fcddf 100644 --- a/res/css/views/settings/_CrossSigningPanel.pcss +++ b/res/css/views/settings/_CrossSigningPanel.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CrossSigningPanel_statusList { diff --git a/res/css/views/settings/_CryptographyPanel.pcss b/res/css/views/settings/_CryptographyPanel.pcss index 3440ce655..dfef7285d 100644 --- a/res/css/views/settings/_CryptographyPanel.pcss +++ b/res/css/views/settings/_CryptographyPanel.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CryptographyPanel_sessionInfo { diff --git a/res/css/views/settings/_FontScalingPanel.pcss b/res/css/views/settings/_FontScalingPanel.pcss index 974ca0fa0..e66c22053 100644 --- a/res/css/views/settings/_FontScalingPanel.pcss +++ b/res/css/views/settings/_FontScalingPanel.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_FontScalingPanel_preview { diff --git a/res/css/views/settings/_ImageSizePanel.pcss b/res/css/views/settings/_ImageSizePanel.pcss index 89500c55b..8456d16d9 100644 --- a/res/css/views/settings/_ImageSizePanel.pcss +++ b/res/css/views/settings/_ImageSizePanel.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ImageSizePanel_radios { diff --git a/res/css/views/settings/_IntegrationManager.pcss b/res/css/views/settings/_IntegrationManager.pcss index 0576a0724..2bc8e9440 100644 --- a/res/css/views/settings/_IntegrationManager.pcss +++ b/res/css/views/settings/_IntegrationManager.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_IntegrationManager { diff --git a/res/css/views/settings/_JoinRuleSettings.pcss b/res/css/views/settings/_JoinRuleSettings.pcss index fcd89f7bd..965db9fb4 100644 --- a/res/css/views/settings/_JoinRuleSettings.pcss +++ b/res/css/views/settings/_JoinRuleSettings.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_JoinRuleSettings_upgradeRequired { diff --git a/res/css/views/settings/_KeyboardShortcut.pcss b/res/css/views/settings/_KeyboardShortcut.pcss index f1593a4d9..826935eb1 100644 --- a/res/css/views/settings/_KeyboardShortcut.pcss +++ b/res/css/views/settings/_KeyboardShortcut.pcss @@ -1,18 +1,10 @@ /* -Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner +Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_KeyboardShortcut { diff --git a/res/css/views/settings/_LayoutSwitcher.pcss b/res/css/views/settings/_LayoutSwitcher.pcss index 96fe27b42..07da23389 100644 --- a/res/css/views/settings/_LayoutSwitcher.pcss +++ b/res/css/views/settings/_LayoutSwitcher.pcss @@ -1,18 +1,10 @@ /* -Copyright 2020 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LayoutSwitcher_LayoutSelector { diff --git a/res/css/views/settings/_NotificationPusherSettings.pcss b/res/css/views/settings/_NotificationPusherSettings.pcss index db573bb4e..78c2e9f17 100644 --- a/res/css/views/settings/_NotificationPusherSettings.pcss +++ b/res/css/views/settings/_NotificationPusherSettings.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_NotificationPusherSettings { diff --git a/res/css/views/settings/_NotificationSettings2.pcss b/res/css/views/settings/_NotificationSettings2.pcss index 8f806e229..a56326ac3 100644 --- a/res/css/views/settings/_NotificationSettings2.pcss +++ b/res/css/views/settings/_NotificationSettings2.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_NotificationSettings2 { diff --git a/res/css/views/settings/_Notifications.pcss b/res/css/views/settings/_Notifications.pcss index cc6ce5699..a7f38507c 100644 --- a/res/css/views/settings/_Notifications.pcss +++ b/res/css/views/settings/_Notifications.pcss @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UserNotifSettings_grid { diff --git a/res/css/views/settings/_PhoneNumbers.pcss b/res/css/views/settings/_PhoneNumbers.pcss index a2e202110..e6de1320f 100644 --- a/res/css/views/settings/_PhoneNumbers.pcss +++ b/res/css/views/settings/_PhoneNumbers.pcss @@ -1,18 +1,9 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_GeneralUserSettingsTab_section--discovery_existing_verification { diff --git a/res/css/views/settings/_PowerLevelSelector.pcss b/res/css/views/settings/_PowerLevelSelector.pcss index 50745d1cd..6d5cf0a78 100644 --- a/res/css/views/settings/_PowerLevelSelector.pcss +++ b/res/css/views/settings/_PowerLevelSelector.pcss @@ -1,19 +1,9 @@ /* - * - * Copyright 2024 The Matrix.org Foundation C.I.C. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / +* Copyright 2024 New Vector Ltd. +* Copyright 2024 The Matrix.org Foundation C.I.C. +* +* SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +* Please see LICENSE files in the repository root for full details. */ .mx_PowerLevelSelector_Button { diff --git a/res/css/views/settings/_RoomProfileSettings.pcss b/res/css/views/settings/_RoomProfileSettings.pcss index 8af0249ab..14251ff29 100644 --- a/res/css/views/settings/_RoomProfileSettings.pcss +++ b/res/css/views/settings/_RoomProfileSettings.pcss @@ -1,17 +1,9 @@ /* -Copyright 2019, 2020, 2024 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019, 2020 , 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomProfileSettings { diff --git a/res/css/views/settings/_SecureBackupPanel.pcss b/res/css/views/settings/_SecureBackupPanel.pcss index 38250e977..ed77fcad4 100644 --- a/res/css/views/settings/_SecureBackupPanel.pcss +++ b/res/css/views/settings/_SecureBackupPanel.pcss @@ -1,18 +1,10 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SecureBackupPanel_deviceName { diff --git a/res/css/views/settings/_SetIdServer.pcss b/res/css/views/settings/_SetIdServer.pcss index 7813a3542..da752b17f 100644 --- a/res/css/views/settings/_SetIdServer.pcss +++ b/res/css/views/settings/_SetIdServer.pcss @@ -1,17 +1,9 @@ /* -Copyright 2019, 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SetIdServer { diff --git a/res/css/views/settings/_SetIntegrationManager.pcss b/res/css/views/settings/_SetIntegrationManager.pcss index db511edab..acdff6902 100644 --- a/res/css/views/settings/_SetIntegrationManager.pcss +++ b/res/css/views/settings/_SetIntegrationManager.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SetIntegrationManager { diff --git a/res/css/views/settings/_SettingsFieldset.pcss b/res/css/views/settings/_SettingsFieldset.pcss index aad1c1e36..d45671f37 100644 --- a/res/css/views/settings/_SettingsFieldset.pcss +++ b/res/css/views/settings/_SettingsFieldset.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SettingsFieldset { diff --git a/res/css/views/settings/_SpellCheckLanguages.pcss b/res/css/views/settings/_SpellCheckLanguages.pcss index 4c88ae8d2..afd506d49 100644 --- a/res/css/views/settings/_SpellCheckLanguages.pcss +++ b/res/css/views/settings/_SpellCheckLanguages.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ExistingSpellCheckLanguage { diff --git a/res/css/views/settings/_ThemeChoicePanel.pcss b/res/css/views/settings/_ThemeChoicePanel.pcss index f70cdf92e..33a4b0d17 100644 --- a/res/css/views/settings/_ThemeChoicePanel.pcss +++ b/res/css/views/settings/_ThemeChoicePanel.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_ThemeChoicePanel_ThemeSelectors { diff --git a/res/css/views/settings/_UpdateCheckButton.pcss b/res/css/views/settings/_UpdateCheckButton.pcss index 14f5d8d3e..6b81efec8 100644 --- a/res/css/views/settings/_UpdateCheckButton.pcss +++ b/res/css/views/settings/_UpdateCheckButton.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UpdateCheckButton_summary { diff --git a/res/css/views/settings/_UserProfileSettings.pcss b/res/css/views/settings/_UserProfileSettings.pcss index 31c1ef628..a46972e58 100644 --- a/res/css/views/settings/_UserProfileSettings.pcss +++ b/res/css/views/settings/_UserProfileSettings.pcss @@ -1,17 +1,9 @@ /* -Copyright 2019, 2020, 2024 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019, 2020 , 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UserProfileSettings { diff --git a/res/css/views/settings/tabs/_SettingsBanner.pcss b/res/css/views/settings/tabs/_SettingsBanner.pcss index a6a0de634..d1adf2889 100644 --- a/res/css/views/settings/tabs/_SettingsBanner.pcss +++ b/res/css/views/settings/tabs/_SettingsBanner.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SettingsBanner { diff --git a/res/css/views/settings/tabs/_SettingsIndent.pcss b/res/css/views/settings/tabs/_SettingsIndent.pcss index fe328d436..65dd95bee 100644 --- a/res/css/views/settings/tabs/_SettingsIndent.pcss +++ b/res/css/views/settings/tabs/_SettingsIndent.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SettingsIndent { diff --git a/res/css/views/settings/tabs/_SettingsSection.pcss b/res/css/views/settings/tabs/_SettingsSection.pcss index 6177cff01..a00350c08 100644 --- a/res/css/views/settings/tabs/_SettingsSection.pcss +++ b/res/css/views/settings/tabs/_SettingsSection.pcss @@ -1,17 +1,8 @@ /* -Copyright 2023 New Vector Ltd +Copyright 2023, 2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SettingsSection { diff --git a/res/css/views/settings/tabs/_SettingsTab.pcss b/res/css/views/settings/tabs/_SettingsTab.pcss index 788209a6e..43a5a8fd1 100644 --- a/res/css/views/settings/tabs/_SettingsTab.pcss +++ b/res/css/views/settings/tabs/_SettingsTab.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019, 2020 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SettingsTab { diff --git a/res/css/views/settings/tabs/room/_NotificationSettingsTab.pcss b/res/css/views/settings/tabs/room/_NotificationSettingsTab.pcss index 92fc9d599..a36cc92fb 100644 --- a/res/css/views/settings/tabs/room/_NotificationSettingsTab.pcss +++ b/res/css/views/settings/tabs/room/_NotificationSettingsTab.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_NotificationSettingsTab_notificationsSection { diff --git a/res/css/views/settings/tabs/room/_PeopleRoomSettingsTab.pcss b/res/css/views/settings/tabs/room/_PeopleRoomSettingsTab.pcss index 4341d248d..5a2700e71 100644 --- a/res/css/views/settings/tabs/room/_PeopleRoomSettingsTab.pcss +++ b/res/css/views/settings/tabs/room/_PeopleRoomSettingsTab.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Nordeck IT + Consulting GmbH -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_PeopleRoomSettingsTab_knock { diff --git a/res/css/views/settings/tabs/room/_RolesRoomSettingsTab.pcss b/res/css/views/settings/tabs/room/_RolesRoomSettingsTab.pcss index ce8dff9f0..018beed35 100644 --- a/res/css/views/settings/tabs/room/_RolesRoomSettingsTab.pcss +++ b/res/css/views/settings/tabs/room/_RolesRoomSettingsTab.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RolesRoomSettingsTab_bannedList { diff --git a/res/css/views/settings/tabs/room/_SecurityRoomSettingsTab.pcss b/res/css/views/settings/tabs/room/_SecurityRoomSettingsTab.pcss index 339b5d259..dfd3817be 100644 --- a/res/css/views/settings/tabs/room/_SecurityRoomSettingsTab.pcss +++ b/res/css/views/settings/tabs/room/_SecurityRoomSettingsTab.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SecurityRoomSettingsTab_advancedSection { diff --git a/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.pcss b/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.pcss index ff4e2f17b..614bfa009 100644 --- a/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.pcss +++ b/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.pcss @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Field.mx_AppearanceUserSettingsTab_checkboxControlledField { diff --git a/res/css/views/settings/tabs/user/_HelpUserSettingsTab.pcss b/res/css/views/settings/tabs/user/_HelpUserSettingsTab.pcss index b5e5f39b0..e3b4c1cf6 100644 --- a/res/css/views/settings/tabs/user/_HelpUserSettingsTab.pcss +++ b/res/css/views/settings/tabs/user/_HelpUserSettingsTab.pcss @@ -1,18 +1,10 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2022 Šimon Brandner +Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_HelpUserSettingsTab_accessTokenDetails { diff --git a/res/css/views/settings/tabs/user/_KeyboardUserSettingsTab.pcss b/res/css/views/settings/tabs/user/_KeyboardUserSettingsTab.pcss index c4e5b5c0a..b9eda93b2 100644 --- a/res/css/views/settings/tabs/user/_KeyboardUserSettingsTab.pcss +++ b/res/css/views/settings/tabs/user/_KeyboardUserSettingsTab.pcss @@ -1,18 +1,10 @@ /* -Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner +Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_KeyboardShortcut_shortcutList { diff --git a/res/css/views/settings/tabs/user/_MjolnirUserSettingsTab.pcss b/res/css/views/settings/tabs/user/_MjolnirUserSettingsTab.pcss index 160abc9e3..83e2b45c7 100644 --- a/res/css/views/settings/tabs/user/_MjolnirUserSettingsTab.pcss +++ b/res/css/views/settings/tabs/user/_MjolnirUserSettingsTab.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_MjolnirUserSettingsTab_listItem { diff --git a/res/css/views/settings/tabs/user/_PreferencesUserSettingsTab.pcss b/res/css/views/settings/tabs/user/_PreferencesUserSettingsTab.pcss index 0cc2b3d5a..3dadcb562 100644 --- a/res/css/views/settings/tabs/user/_PreferencesUserSettingsTab.pcss +++ b/res/css/views/settings/tabs/user/_PreferencesUserSettingsTab.pcss @@ -1,18 +1,10 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. +Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_PreferencesUserSettingsTab_section_hint { diff --git a/res/css/views/settings/tabs/user/_SecurityUserSettingsTab.pcss b/res/css/views/settings/tabs/user/_SecurityUserSettingsTab.pcss index ad5b3f8a1..94cc7d949 100644 --- a/res/css/views/settings/tabs/user/_SecurityUserSettingsTab.pcss +++ b/res/css/views/settings/tabs/user/_SecurityUserSettingsTab.pcss @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SecurityUserSettingsTab_bulkOptions { diff --git a/res/css/views/settings/tabs/user/_SidebarUserSettingsTab.pcss b/res/css/views/settings/tabs/user/_SidebarUserSettingsTab.pcss index 26e042bff..445af1052 100644 --- a/res/css/views/settings/tabs/user/_SidebarUserSettingsTab.pcss +++ b/res/css/views/settings/tabs/user/_SidebarUserSettingsTab.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SidebarUserSettingsTab_homeAllRoomsCheckbox { diff --git a/res/css/views/spaces/_SpaceBasicSettings.pcss b/res/css/views/spaces/_SpaceBasicSettings.pcss index 030e44182..f20edad7f 100644 --- a/res/css/views/spaces/_SpaceBasicSettings.pcss +++ b/res/css/views/spaces/_SpaceBasicSettings.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SpaceBasicSettings { diff --git a/res/css/views/spaces/_SpaceChildrenPicker.pcss b/res/css/views/spaces/_SpaceChildrenPicker.pcss index 42fc2b480..2deeadf5f 100644 --- a/res/css/views/spaces/_SpaceChildrenPicker.pcss +++ b/res/css/views/spaces/_SpaceChildrenPicker.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SpaceChildrenPicker { diff --git a/res/css/views/spaces/_SpaceCreateMenu.pcss b/res/css/views/spaces/_SpaceCreateMenu.pcss index b10fc3f23..e501852e2 100644 --- a/res/css/views/spaces/_SpaceCreateMenu.pcss +++ b/res/css/views/spaces/_SpaceCreateMenu.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SpaceCreateMenu_wrapper { diff --git a/res/css/views/spaces/_SpacePublicShare.pcss b/res/css/views/spaces/_SpacePublicShare.pcss index f993d2236..58cf3659a 100644 --- a/res/css/views/spaces/_SpacePublicShare.pcss +++ b/res/css/views/spaces/_SpacePublicShare.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_SpacePublicShare { diff --git a/res/css/views/terms/_InlineTermsAgreement.pcss b/res/css/views/terms/_InlineTermsAgreement.pcss index 162d1341e..bd738ca7c 100644 --- a/res/css/views/terms/_InlineTermsAgreement.pcss +++ b/res/css/views/terms/_InlineTermsAgreement.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_InlineTermsAgreement_cbContainer { diff --git a/res/css/views/toasts/_AnalyticsToast.pcss b/res/css/views/toasts/_AnalyticsToast.pcss index 1cf2c83e1..2ffaf257a 100644 --- a/res/css/views/toasts/_AnalyticsToast.pcss +++ b/res/css/views/toasts/_AnalyticsToast.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_AnalyticsToast { diff --git a/res/css/views/toasts/_IncomingCallToast.pcss b/res/css/views/toasts/_IncomingCallToast.pcss index 8bc86db13..0085737af 100644 --- a/res/css/views/toasts/_IncomingCallToast.pcss +++ b/res/css/views/toasts/_IncomingCallToast.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_IncomingCallToast { diff --git a/res/css/views/toasts/_IncomingLegacyCallToast.pcss b/res/css/views/toasts/_IncomingLegacyCallToast.pcss index 695b58893..8fe94e9ba 100644 --- a/res/css/views/toasts/_IncomingLegacyCallToast.pcss +++ b/res/css/views/toasts/_IncomingLegacyCallToast.pcss @@ -1,18 +1,10 @@ /* -Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner +Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_IncomingLegacyCallToast { diff --git a/res/css/views/toasts/_NonUrgentEchoFailureToast.pcss b/res/css/views/toasts/_NonUrgentEchoFailureToast.pcss index ddf25aa40..e1fc0b80c 100644 --- a/res/css/views/toasts/_NonUrgentEchoFailureToast.pcss +++ b/res/css/views/toasts/_NonUrgentEchoFailureToast.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_NonUrgentEchoFailureToast { diff --git a/res/css/views/typography/_Heading.pcss b/res/css/views/typography/_Heading.pcss index 6a45a4332..6082c6061 100644 --- a/res/css/views/typography/_Heading.pcss +++ b/res/css/views/typography/_Heading.pcss @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023x The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 x The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Heading_h1, diff --git a/res/css/views/user-onboarding/_UserOnboardingButton.pcss b/res/css/views/user-onboarding/_UserOnboardingButton.pcss index 0f031af33..546b161c6 100644 --- a/res/css/views/user-onboarding/_UserOnboardingButton.pcss +++ b/res/css/views/user-onboarding/_UserOnboardingButton.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UserOnboardingButton { diff --git a/res/css/views/user-onboarding/_UserOnboardingHeader.pcss b/res/css/views/user-onboarding/_UserOnboardingHeader.pcss index 0059f1d7f..5a659ec17 100644 --- a/res/css/views/user-onboarding/_UserOnboardingHeader.pcss +++ b/res/css/views/user-onboarding/_UserOnboardingHeader.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UserOnboardingHeader { diff --git a/res/css/views/user-onboarding/_UserOnboardingList.pcss b/res/css/views/user-onboarding/_UserOnboardingList.pcss index f00906888..689048793 100644 --- a/res/css/views/user-onboarding/_UserOnboardingList.pcss +++ b/res/css/views/user-onboarding/_UserOnboardingList.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UserOnboardingList { diff --git a/res/css/views/user-onboarding/_UserOnboardingPage.pcss b/res/css/views/user-onboarding/_UserOnboardingPage.pcss index f2c778d8f..638bc4b35 100644 --- a/res/css/views/user-onboarding/_UserOnboardingPage.pcss +++ b/res/css/views/user-onboarding/_UserOnboardingPage.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UserOnboardingPage { diff --git a/res/css/views/user-onboarding/_UserOnboardingTask.pcss b/res/css/views/user-onboarding/_UserOnboardingTask.pcss index 6bb54207b..cf7453293 100644 --- a/res/css/views/user-onboarding/_UserOnboardingTask.pcss +++ b/res/css/views/user-onboarding/_UserOnboardingTask.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_UserOnboardingTask { diff --git a/res/css/views/verification/_VerificationShowSas.pcss b/res/css/views/verification/_VerificationShowSas.pcss index 40588179b..74cb4d439 100644 --- a/res/css/views/verification/_VerificationShowSas.pcss +++ b/res/css/views/verification/_VerificationShowSas.pcss @@ -1,18 +1,10 @@ /* -Copyright 2019 New Vector Ltd. +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_VerificationShowSas_decimalSas { diff --git a/res/css/views/voip/LegacyCallView/_LegacyCallViewButtons.pcss b/res/css/views/voip/LegacyCallView/_LegacyCallViewButtons.pcss index 8e24318ef..7feb73c7c 100644 --- a/res/css/views/voip/LegacyCallView/_LegacyCallViewButtons.pcss +++ b/res/css/views/voip/LegacyCallView/_LegacyCallViewButtons.pcss @@ -1,19 +1,11 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 Šimon Brandner +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2020 - 2021 The Matrix.org Foundation C.I.C. -Copyright 2021 - 2022 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* data-whatintent makes more sense here semantically but then the tooltip would stay visible without the button */ diff --git a/res/css/views/voip/_CallDuration.pcss b/res/css/views/voip/_CallDuration.pcss index 49524c88c..e38f90a0c 100644 --- a/res/css/views/voip/_CallDuration.pcss +++ b/res/css/views/voip/_CallDuration.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CallDuration { diff --git a/res/css/views/voip/_CallView.pcss b/res/css/views/voip/_CallView.pcss index 44cbbfd0b..648c1dbb4 100644 --- a/res/css/views/voip/_CallView.pcss +++ b/res/css/views/voip/_CallView.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_CallView { diff --git a/res/css/views/voip/_DialPad.pcss b/res/css/views/voip/_DialPad.pcss index abf9d7f76..18867c386 100644 --- a/res/css/views/voip/_DialPad.pcss +++ b/res/css/views/voip/_DialPad.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DialPad { diff --git a/res/css/views/voip/_DialPadContextMenu.pcss b/res/css/views/voip/_DialPadContextMenu.pcss index 322fb633e..feee0a5fb 100644 --- a/res/css/views/voip/_DialPadContextMenu.pcss +++ b/res/css/views/voip/_DialPadContextMenu.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_DialPadContextMenu_dialPad .mx_DialPad { diff --git a/res/css/views/voip/_DialPadModal.pcss b/res/css/views/voip/_DialPadModal.pcss index 93071c8c7..46b68fed7 100644 --- a/res/css/views/voip/_DialPadModal.pcss +++ b/res/css/views/voip/_DialPadModal.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_Dialog_dialPadWrapper .mx_Dialog { diff --git a/res/css/views/voip/_LegacyCallPreview.pcss b/res/css/views/voip/_LegacyCallPreview.pcss index a73974719..526fb5982 100644 --- a/res/css/views/voip/_LegacyCallPreview.pcss +++ b/res/css/views/voip/_LegacyCallPreview.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LegacyCallPreview { diff --git a/res/css/views/voip/_LegacyCallView.pcss b/res/css/views/voip/_LegacyCallView.pcss index 730a02b63..45873face 100644 --- a/res/css/views/voip/_LegacyCallView.pcss +++ b/res/css/views/voip/_LegacyCallView.pcss @@ -1,19 +1,11 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 Šimon Brandner +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2020 - 2021 The Matrix.org Foundation C.I.C. -Copyright 2021 - 2022 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LegacyCallView { diff --git a/res/css/views/voip/_LegacyCallViewForRoom.pcss b/res/css/views/voip/_LegacyCallViewForRoom.pcss index ae6ade8b8..53b08648f 100644 --- a/res/css/views/voip/_LegacyCallViewForRoom.pcss +++ b/res/css/views/voip/_LegacyCallViewForRoom.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LegacyCallViewForRoom { diff --git a/res/css/views/voip/_LegacyCallViewHeader.pcss b/res/css/views/voip/_LegacyCallViewHeader.pcss index 39c52ba63..b40c01563 100644 --- a/res/css/views/voip/_LegacyCallViewHeader.pcss +++ b/res/css/views/voip/_LegacyCallViewHeader.pcss @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 Šimon Brandner Copyright 2021 The Matrix.org Foundation C.I.C. -Copyright 2021 - 2022 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LegacyCallViewHeader { diff --git a/res/css/views/voip/_LegacyCallViewSidebar.pcss b/res/css/views/voip/_LegacyCallViewSidebar.pcss index 32a5c47b1..fa8c552ef 100644 --- a/res/css/views/voip/_LegacyCallViewSidebar.pcss +++ b/res/css/views/voip/_LegacyCallViewSidebar.pcss @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 Šimon Brandner +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LegacyCallViewSidebar { diff --git a/res/css/views/voip/_VideoFeed.pcss b/res/css/views/voip/_VideoFeed.pcss index 53d00c12f..86c61ec15 100644 --- a/res/css/views/voip/_VideoFeed.pcss +++ b/res/css/views/voip/_VideoFeed.pcss @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016, 2020, 2021 The Matrix.org Foundation C.I.C. -Copyright 2021 - 2022 Šimon Brandner +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 Šimon Brandner +Copyright 2015, 2016 , 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_VideoFeed { diff --git a/res/css/voice-broadcast/atoms/_LiveBadge.pcss b/res/css/voice-broadcast/atoms/_LiveBadge.pcss index f9be09acf..7d5f23819 100644 --- a/res/css/voice-broadcast/atoms/_LiveBadge.pcss +++ b/res/css/voice-broadcast/atoms/_LiveBadge.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_LiveBadge { diff --git a/res/css/voice-broadcast/atoms/_VoiceBroadcastControl.pcss b/res/css/voice-broadcast/atoms/_VoiceBroadcastControl.pcss index 7e31afdd4..5bd7bfe09 100644 --- a/res/css/voice-broadcast/atoms/_VoiceBroadcastControl.pcss +++ b/res/css/voice-broadcast/atoms/_VoiceBroadcastControl.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_VoiceBroadcastControl { diff --git a/res/css/voice-broadcast/atoms/_VoiceBroadcastHeader.pcss b/res/css/voice-broadcast/atoms/_VoiceBroadcastHeader.pcss index 37476eedd..c5e21233b 100644 --- a/res/css/voice-broadcast/atoms/_VoiceBroadcastHeader.pcss +++ b/res/css/voice-broadcast/atoms/_VoiceBroadcastHeader.pcss @@ -1,14 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_VoiceBroadcastHeader { diff --git a/res/css/voice-broadcast/atoms/_VoiceBroadcastRecordingConnectionError.pcss b/res/css/voice-broadcast/atoms/_VoiceBroadcastRecordingConnectionError.pcss index bf2e53509..f21c0bb73 100644 --- a/res/css/voice-broadcast/atoms/_VoiceBroadcastRecordingConnectionError.pcss +++ b/res/css/voice-broadcast/atoms/_VoiceBroadcastRecordingConnectionError.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_VoiceBroadcastRecordingConnectionError { diff --git a/res/css/voice-broadcast/atoms/_VoiceBroadcastRoomSubtitle.pcss b/res/css/voice-broadcast/atoms/_VoiceBroadcastRoomSubtitle.pcss index 570a30e6f..e0748e762 100644 --- a/res/css/voice-broadcast/atoms/_VoiceBroadcastRoomSubtitle.pcss +++ b/res/css/voice-broadcast/atoms/_VoiceBroadcastRoomSubtitle.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_RoomTile .mx_RoomTile_titleContainer .mx_RoomTile_subtitle.mx_RoomTile_subtitle--voice-broadcast { diff --git a/res/css/voice-broadcast/molecules/_VoiceBroadcastBody.pcss b/res/css/voice-broadcast/molecules/_VoiceBroadcastBody.pcss index cc53c674e..45ed0e98f 100644 --- a/res/css/voice-broadcast/molecules/_VoiceBroadcastBody.pcss +++ b/res/css/voice-broadcast/molecules/_VoiceBroadcastBody.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ .mx_VoiceBroadcastBody { diff --git a/res/themes/dark/css/_dark.pcss b/res/themes/dark/css/_dark.pcss index d398fb596..56630763f 100644 --- a/res/themes/dark/css/_dark.pcss +++ b/res/themes/dark/css/_dark.pcss @@ -250,7 +250,7 @@ $live-badge-color: #ffffff; $progressbar-bg-color: var(--cpd-color-gray-200); $kbd-border-color: $strong-input-border-color; $visual-bell-bg-color: #800; -$event-timestamp-color: $text-secondary-color; +$event-timestamp-color: var(--cpd-color-text-secondary); $composer-shadow-color: rgba(0, 0, 0, 0.28); $breadcrumb-placeholder-bg-color: #272c35; $theme-button-bg-color: #e3e8f0; diff --git a/res/themes/light-custom/css/_custom.pcss b/res/themes/light-custom/css/_custom.pcss index 0c5758f72..4d0d214ba 100644 --- a/res/themes/light-custom/css/_custom.pcss +++ b/res/themes/light-custom/css/_custom.pcss @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ $font-family: var(--font-family, $font-family); diff --git a/res/themes/light/css/_light.pcss b/res/themes/light/css/_light.pcss index 1a237427f..2e808c1a7 100644 --- a/res/themes/light/css/_light.pcss +++ b/res/themes/light/css/_light.pcss @@ -314,7 +314,7 @@ $call-light-quaternary-content: #c1c6cd; $progressbar-bg-color: var(--cpd-color-gray-200); $kbd-border-color: $strong-input-border-color; $visual-bell-bg-color: #faa; -$event-timestamp-color: #acacac; +$event-timestamp-color: var(--cpd-color-text-secondary); $composer-shadow-color: rgba(0, 0, 0, 0.04); $breadcrumb-placeholder-bg-color: #e8eef5; $theme-button-bg-color: $quinary-content; diff --git a/sonar-project.properties b/sonar-project.properties index ba7881344..770df182b 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,5 +1,5 @@ -sonar.projectKey=matrix-react-sdk -sonar.organization=matrix-org +sonar.projectKey=element-hq_matrix-react-sdk +sonar.organization=element-hq # Encoding of the source code. Default is default system encoding #sonar.sourceEncoding=UTF-8 diff --git a/src/@types/common.ts b/src/@types/common.ts index 50e02e6a8..d0ab03221 100644 --- a/src/@types/common.ts +++ b/src/@types/common.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { JSXElementConstructor } from "react"; diff --git a/src/@types/commonmark.ts b/src/@types/commonmark.ts index bd14cdfbb..d773b736a 100644 --- a/src/@types/commonmark.ts +++ b/src/@types/commonmark.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as commonmark from "commonmark"; diff --git a/src/@types/diff-dom.d.ts b/src/@types/diff-dom.d.ts index bf9150a69..0ee966ad2 100644 --- a/src/@types/diff-dom.d.ts +++ b/src/@types/diff-dom.d.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ declare module "diff-dom" { diff --git a/src/@types/electron-to-chromium.d.ts b/src/@types/electron-to-chromium.d.ts index 8ee13e92a..b8dea3f83 100644 --- a/src/@types/electron-to-chromium.d.ts +++ b/src/@types/electron-to-chromium.d.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ declare module "electron-to-chromium/versions" { diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index fab9791ad..e83d5fddb 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -1,17 +1,9 @@ /* -Copyright 2020-2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // eslint-disable-next-line no-restricted-imports diff --git a/src/@types/matrix-js-sdk.d.ts b/src/@types/matrix-js-sdk.d.ts index a58eea55b..dcef9c2eb 100644 --- a/src/@types/matrix-js-sdk.d.ts +++ b/src/@types/matrix-js-sdk.d.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { IWidget } from "matrix-widget-api"; diff --git a/src/@types/opus-recorder.d.ts b/src/@types/opus-recorder.d.ts index a964278aa..8b4605a24 100644 --- a/src/@types/opus-recorder.d.ts +++ b/src/@types/opus-recorder.d.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ declare module "opus-recorder/dist/recorder.min.js" { diff --git a/src/@types/png-chunks-extract.d.ts b/src/@types/png-chunks-extract.d.ts index 697e68d34..38ea84c32 100644 --- a/src/@types/png-chunks-extract.d.ts +++ b/src/@types/png-chunks-extract.d.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ declare module "png-chunks-extract" { diff --git a/src/@types/polyfill.ts b/src/@types/polyfill.ts index 6434512e7..1e10b1730 100644 --- a/src/@types/polyfill.ts +++ b/src/@types/polyfill.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // This is intended to fix re-resizer because of its unguarded `instanceof TouchEvent` checks. diff --git a/src/@types/raw-loader.d.ts b/src/@types/raw-loader.d.ts index 04663e572..902a257a1 100644 --- a/src/@types/raw-loader.d.ts +++ b/src/@types/raw-loader.d.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ declare module "!!raw-loader!*" { diff --git a/src/@types/react.d.ts b/src/@types/react.d.ts index f1f57c540..3579e0cec 100644 --- a/src/@types/react.d.ts +++ b/src/@types/react.d.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { PropsWithChildren } from "react"; diff --git a/src/@types/sanitize-html.d.ts b/src/@types/sanitize-html.d.ts index 373189f22..34474fc65 100644 --- a/src/@types/sanitize-html.d.ts +++ b/src/@types/sanitize-html.d.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import sanitizeHtml from "sanitize-html"; diff --git a/src/@types/svg.d.ts b/src/@types/svg.d.ts index f4b99be05..f0491a594 100644 --- a/src/@types/svg.d.ts +++ b/src/@types/svg.d.ts @@ -1,18 +1,10 @@ /* -Copyright 2021 Šimon Brandner +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. +Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ declare module "*.svg" { diff --git a/src/@types/worker-loader.d.ts b/src/@types/worker-loader.d.ts index 9eecd5905..39734725e 100644 --- a/src/@types/worker-loader.d.ts +++ b/src/@types/worker-loader.d.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ declare module "*.worker.ts" { diff --git a/src/AddThreepid.ts b/src/AddThreepid.ts index 9549e6d08..7e53bd79a 100644 --- a/src/AddThreepid.ts +++ b/src/AddThreepid.ts @@ -1,19 +1,11 @@ /* -Copyright 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2017 Vector Creations Ltd +Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/AsyncWrapper.tsx b/src/AsyncWrapper.tsx index 962a6519c..179d42668 100644 --- a/src/AsyncWrapper.tsx +++ b/src/AsyncWrapper.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentType, PropsWithChildren } from "react"; diff --git a/src/Avatar.ts b/src/Avatar.ts index 7e54c634c..5821647ea 100644 --- a/src/Avatar.ts +++ b/src/Avatar.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RoomMember, User, Room, ResizeMethod } from "matrix-js-sdk/src/matrix"; diff --git a/src/BasePlatform.ts b/src/BasePlatform.ts index 3c515dff8..20e9e7add 100644 --- a/src/BasePlatform.ts +++ b/src/BasePlatform.ts @@ -1,20 +1,12 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd Copyright 2016 Aviral Dasgupta Copyright 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd -Copyright 2020 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { @@ -440,12 +432,8 @@ export default abstract class BasePlatform { redirectUris: [this.getOidcCallbackUrl().href], logoUri: config.oidc_metadata?.logo_uri ?? new URL("vector-icons/1024.png", this.baseUrl).href, applicationType: "web", - // XXX: We break the spec by not consistently supplying these required fields - // @ts-ignore contacts: config.oidc_metadata?.contacts, - // @ts-ignore tosUri: config.oidc_metadata?.tos_uri ?? config.terms_and_conditions_links?.[0]?.url, - // @ts-ignore policyUri: config.oidc_metadata?.policy_uri ?? config.privacy_policy_url, }; } diff --git a/src/BlurhashEncoder.ts b/src/BlurhashEncoder.ts index 457fe01e7..63521d5d0 100644 --- a/src/BlurhashEncoder.ts +++ b/src/BlurhashEncoder.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // @ts-ignore - `.ts` is needed here to make TS happy diff --git a/src/ContentMessages.ts b/src/ContentMessages.ts index 799909568..07c5491f5 100644 --- a/src/ContentMessages.ts +++ b/src/ContentMessages.ts @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/DateUtils.ts b/src/DateUtils.ts index f95529968..0710e0b86 100644 --- a/src/DateUtils.ts +++ b/src/DateUtils.ts @@ -1,24 +1,17 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. +Copyright 2017 Vector Creations Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Optional } from "matrix-events-sdk"; import { _t, getUserLanguage } from "./languageHandler"; +import { getUserTimezone } from "./TimezoneHandler"; export const MINUTE_MS = 60000; export const HOUR_MS = MINUTE_MS * 60; @@ -77,6 +70,7 @@ export function formatDate(date: Date, showTwelveHour = false, locale?: string): weekday: "short", hour: "numeric", minute: "2-digit", + timeZone: getUserTimezone(), }).format(date); } else if (now.getFullYear() === date.getFullYear()) { return new Intl.DateTimeFormat(_locale, { @@ -86,6 +80,7 @@ export function formatDate(date: Date, showTwelveHour = false, locale?: string): day: "numeric", hour: "numeric", minute: "2-digit", + timeZone: getUserTimezone(), }).format(date); } return formatFullDate(date, showTwelveHour, false, _locale); @@ -104,6 +99,7 @@ export function formatFullDateNoTime(date: Date, locale?: string): string { month: "short", day: "numeric", year: "numeric", + timeZone: getUserTimezone(), }).format(date); } @@ -127,6 +123,7 @@ export function formatFullDate(date: Date, showTwelveHour = false, showSeconds = hour: "numeric", minute: "2-digit", second: showSeconds ? "2-digit" : undefined, + timeZone: getUserTimezone(), }).format(date); } @@ -160,6 +157,7 @@ export function formatFullTime(date: Date, showTwelveHour = false, locale?: stri hour: "numeric", minute: "2-digit", second: "2-digit", + timeZone: getUserTimezone(), }).format(date); } @@ -178,6 +176,7 @@ export function formatTime(date: Date, showTwelveHour = false, locale?: string): ...getTwelveHourOptions(showTwelveHour), hour: "numeric", minute: "2-digit", + timeZone: getUserTimezone(), }).format(date); } @@ -285,6 +284,7 @@ export function formatFullDateNoDayNoTime(date: Date, locale?: string): string { year: "numeric", month: "numeric", day: "numeric", + timeZone: getUserTimezone(), }).format(date); } @@ -354,6 +354,9 @@ export function formatPreciseDuration(durationMs: number): string { * @returns {string} formattedDate */ export const formatLocalDateShort = (timestamp: number, locale?: string): string => - new Intl.DateTimeFormat(locale ?? getUserLanguage(), { day: "2-digit", month: "2-digit", year: "2-digit" }).format( - timestamp, - ); + new Intl.DateTimeFormat(locale ?? getUserLanguage(), { + day: "2-digit", + month: "2-digit", + year: "2-digit", + timeZone: getUserTimezone(), + }).format(timestamp); diff --git a/src/DecryptionFailureTracker.ts b/src/DecryptionFailureTracker.ts index 99ad2e8ca..54030cdec 100644 --- a/src/DecryptionFailureTracker.ts +++ b/src/DecryptionFailureTracker.ts @@ -1,17 +1,9 @@ /* -Copyright 2018 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2018-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ScalableBloomFilter } from "bloom-filters"; diff --git a/src/DeviceListener.ts b/src/DeviceListener.ts index bf23412cc..813a73426 100644 --- a/src/DeviceListener.ts +++ b/src/DeviceListener.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/DraftCleaner.ts b/src/DraftCleaner.ts index 5e6c1cbae..eebc7b87d 100644 --- a/src/DraftCleaner.ts +++ b/src/DraftCleaner.ts @@ -1,23 +1,16 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; import { MatrixClientPeg } from "./MatrixClientPeg"; import { EDITOR_STATE_STORAGE_PREFIX } from "./components/views/rooms/SendMessageComposer"; +import { WYSIWYG_EDITOR_STATE_STORAGE_PREFIX } from "./components/views/rooms/MessageComposer"; // The key used to persist the the timestamp we last cleaned up drafts export const DRAFT_LAST_CLEANUP_KEY = "mx_draft_cleanup"; @@ -61,14 +54,21 @@ function shouldCleanupDrafts(): boolean { } /** - * Clear all drafts for the CIDER editor if the room does not exist in the known rooms. + * Clear all drafts for the CIDER and WYSIWYG editors if the room does not exist in the known rooms. */ function cleaupDrafts(): void { for (let i = 0; i < localStorage.length; i++) { const keyName = localStorage.key(i); - if (!keyName?.startsWith(EDITOR_STATE_STORAGE_PREFIX)) continue; + if (!keyName) continue; + let roomId: string | undefined = undefined; + if (keyName.startsWith(EDITOR_STATE_STORAGE_PREFIX)) { + roomId = keyName.slice(EDITOR_STATE_STORAGE_PREFIX.length).split("_$")[0]; + } + if (keyName.startsWith(WYSIWYG_EDITOR_STATE_STORAGE_PREFIX)) { + roomId = keyName.slice(WYSIWYG_EDITOR_STATE_STORAGE_PREFIX.length).split("_$")[0]; + } + if (!roomId) continue; // Remove the prefix and the optional event id suffix to leave the room id - const roomId = keyName.slice(EDITOR_STATE_STORAGE_PREFIX.length).split("_$")[0]; const room = MatrixClientPeg.safeGet().getRoom(roomId); if (!room) { logger.debug(`Removing draft for unknown room with key ${keyName}`); diff --git a/src/Editing.ts b/src/Editing.ts index e331a3dca..1d0cd26ab 100644 --- a/src/Editing.ts +++ b/src/Editing.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { TimelineRenderingType } from "./contexts/RoomContext"; diff --git a/src/HtmlUtils.tsx b/src/HtmlUtils.tsx index 774cef87a..8b0b73c69 100644 --- a/src/HtmlUtils.tsx +++ b/src/HtmlUtils.tsx @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017, 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2017, 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { LegacyRef, ReactNode } from "react"; diff --git a/src/IConfigOptions.ts b/src/IConfigOptions.ts index ab8dfcad1..0ad02d9f7 100644 --- a/src/IConfigOptions.ts +++ b/src/IConfigOptions.ts @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. Copyright 2016 OpenMarket Ltd -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IClientWellKnown } from "matrix-js-sdk/src/matrix"; @@ -60,6 +52,8 @@ export interface IConfigOptions { auth_footer_links?: { text: string; url: string }[]; }; + force_verification?: boolean; // if true, users must verify new logins + map_style_url?: string; // for location-shared maps embedded_pages?: { @@ -98,6 +92,7 @@ export interface IConfigOptions { integrations_ui_url?: string; integrations_rest_url?: string; integrations_widgets_urls?: string[]; + default_widget_container_height?: number; // height in pixels show_labs_settings: boolean; features?: Record; // diff --git a/src/IdentityAuthClient.tsx b/src/IdentityAuthClient.tsx index 872a1323a..aa2a226fc 100644 --- a/src/IdentityAuthClient.tsx +++ b/src/IdentityAuthClient.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -162,7 +154,7 @@ export default class IdentityAuthClient { "terms|identity_server_no_terms_description_1", {}, { - server: () => {abbreviateUrl(identityServerUrl)}, + server: () => {abbreviateUrl(identityServerUrl)}, }, )}

diff --git a/src/ImageUtils.ts b/src/ImageUtils.ts index 80fbb928b..0b5ed28d2 100644 --- a/src/ImageUtils.ts +++ b/src/ImageUtils.ts @@ -1,17 +1,9 @@ /* -Copyright 2015, 2016, 2020 Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015, 2016 , 2020 Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/KeyBindingsDefaults.ts b/src/KeyBindingsDefaults.ts index e936ae1de..10d89ecfd 100644 --- a/src/KeyBindingsDefaults.ts +++ b/src/KeyBindingsDefaults.ts @@ -1,18 +1,10 @@ /* -Copyright 2021 Clemens Zeidler +Copyright 2024 New Vector Ltd. Copyright 2022 Šimon Brandner +Copyright 2021 Clemens Zeidler -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IS_MAC, Key } from "./Keyboard"; diff --git a/src/KeyBindingsManager.ts b/src/KeyBindingsManager.ts index fad4cf208..007b6abf1 100644 --- a/src/KeyBindingsManager.ts +++ b/src/KeyBindingsManager.ts @@ -1,18 +1,10 @@ /* -Copyright 2021 Clemens Zeidler +Copyright 2024 New Vector Ltd. Copyright 2022 Šimon Brandner +Copyright 2021 Clemens Zeidler -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { KeyBindingAction } from "./accessibility/KeyboardShortcuts"; diff --git a/src/Keyboard.ts b/src/Keyboard.ts index 33ce4e4e7..5688ac2a2 100644 --- a/src/Keyboard.ts +++ b/src/Keyboard.ts @@ -1,19 +1,11 @@ /* -Copyright 2016 OpenMarket Ltd -Copyright 2017 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2017 New Vector Ltd +Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/LegacyCallHandler.tsx b/src/LegacyCallHandler.tsx index 145784fe0..226cb6379 100644 --- a/src/LegacyCallHandler.tsx +++ b/src/LegacyCallHandler.tsx @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017, 2018 New Vector Ltd -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. Copyright 2021 Šimon Brandner +Copyright 2017, 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/Lifecycle.ts b/src/Lifecycle.ts index 38852c68f..e83b8df20 100644 --- a/src/Lifecycle.ts +++ b/src/Lifecycle.ts @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd +Copyright 2024 New Vector Ltd. +Copyright 2019, 2020 , 2023 The Matrix.org Foundation C.I.C. Copyright 2018 New Vector Ltd -Copyright 2019, 2020, 2023 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2017 Vector Creations Ltd +Copyright 2015, 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ReactNode } from "react"; @@ -211,7 +203,7 @@ export async function loadSession(opts: ILoadSessionOpts = {}): Promise false, ).then(() => true); } - const success = await restoreFromLocalStorage({ + const success = await restoreSessionFromStorage({ ignoreGuest: Boolean(opts.ignoreGuest), }); if (success) { @@ -556,17 +548,19 @@ async function abortLogin(): Promise { } } -// returns a promise which resolves to true if a session is found in -// localstorage -// -// N.B. Lifecycle.js should not maintain any further localStorage state, we -// are moving towards using SessionStore to keep track of state related -// to the current session (which is typically backed by localStorage). -// -// The plan is to gradually move the localStorage access done here into -// SessionStore to avoid bugs where the view becomes out-of-sync with -// localStorage (e.g. isGuest etc.) -export async function restoreFromLocalStorage(opts?: { ignoreGuest?: boolean }): Promise { +/** Attempt to restore the session from localStorage or indexeddb. + * + * @returns true if a session was found; false if no existing session was found. + * + * N.B. Lifecycle.js should not maintain any further localStorage state, we + * are moving towards using SessionStore to keep track of state related + * to the current session (which is typically backed by localStorage). + * + * The plan is to gradually move the localStorage access done here into + * SessionStore to avoid bugs where the view becomes out-of-sync with + * localStorage (e.g. isGuest etc.) + */ +export async function restoreSessionFromStorage(opts?: { ignoreGuest?: boolean }): Promise { const ignoreGuest = opts?.ignoreGuest; if (!localStorage) { @@ -590,10 +584,11 @@ export async function restoreFromLocalStorage(opts?: { ignoreGuest?: boolean }): if (pickleKey) { logger.log(`Got pickle key for ${userId}|${deviceId}`); } else { - logger.log("No pickle key available"); + logger.log(`No pickle key available for ${userId}|${deviceId}`); } const decryptedAccessToken = await tryDecryptToken(pickleKey, accessToken, ACCESS_TOKEN_IV); - const decryptedRefreshToken = await tryDecryptToken(pickleKey, refreshToken, REFRESH_TOKEN_IV); + const decryptedRefreshToken = + refreshToken && (await tryDecryptToken(pickleKey, refreshToken, REFRESH_TOKEN_IV)); const freshLogin = sessionStorage.getItem("mx_fresh_login") === "true"; sessionStorage.removeItem("mx_fresh_login"); @@ -603,7 +598,7 @@ export async function restoreFromLocalStorage(opts?: { ignoreGuest?: boolean }): { userId: userId, deviceId: deviceId, - accessToken: decryptedAccessToken!, + accessToken: decryptedAccessToken, refreshToken: decryptedRefreshToken, homeserverUrl: hsUrl, identityServerUrl: isUrl, diff --git a/src/Linkify.tsx b/src/Linkify.tsx index 910acc9dd..d980c496c 100644 --- a/src/Linkify.tsx +++ b/src/Linkify.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement } from "react"; diff --git a/src/Livestream.ts b/src/Livestream.ts index 77668011a..ffa59282e 100644 --- a/src/Livestream.ts +++ b/src/Livestream.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ClientWidgetApi } from "matrix-widget-api"; diff --git a/src/Login.ts b/src/Login.ts index abfdcedf8..5e1b1d1a3 100644 --- a/src/Login.ts +++ b/src/Login.ts @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015-2021 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/Markdown.ts b/src/Markdown.ts index cf57f9354..5e4265bc2 100644 --- a/src/Markdown.ts +++ b/src/Markdown.ts @@ -1,18 +1,10 @@ /* -Copyright 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. +Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import "./@types/commonmark"; // import better types than @types/commonmark diff --git a/src/MatrixClientPeg.ts b/src/MatrixClientPeg.ts index 72340cb35..c787eeaaf 100644 --- a/src/MatrixClientPeg.ts +++ b/src/MatrixClientPeg.ts @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. +Copyright 2019-2023 The Matrix.org Foundation C.I.C. +Copyright 2017, 2018 , 2019 New Vector Ltd Copyright 2017 Vector Creations Ltd. -Copyright 2017, 2018, 2019 New Vector Ltd -Copyright 2019 - 2023 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2015, 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { @@ -53,6 +45,7 @@ import { formatList } from "./utils/FormattingUtils"; import SdkConfig from "./SdkConfig"; import { Features } from "./settings/Settings"; import { PhasedRolloutFeature } from "./utils/PhasedRolloutFeature"; +import { setDeviceIsolationMode } from "./settings/controllers/DeviceIsolationModeController.ts"; export interface IMatrixClientCreds { homeserverUrl: string; @@ -379,6 +372,9 @@ class MatrixClientPegClass implements IMatrixClientPeg { }); StorageManager.setCryptoInitialised(true); + + setDeviceIsolationMode(this.matrixClient, SettingsStore.getValue("feature_exclude_insecure_devices")); + // TODO: device dehydration and whathaveyou return; } @@ -501,11 +497,6 @@ class MatrixClientPegClass implements IMatrixClientPeg { }, }; - const dehydrationKeyCallback = ModuleRunner.instance.extensions.cryptoSetup.getDehydrationKeyCallback(); - if (dehydrationKeyCallback) { - opts.cryptoCallbacks!.getDehydrationKey = dehydrationKeyCallback; - } - this.matrixClient = createMatrixClient(opts); this.matrixClient.setGuest(Boolean(creds.guest)); diff --git a/src/MediaDeviceHandler.ts b/src/MediaDeviceHandler.ts index 022a9061e..147cabb7c 100644 --- a/src/MediaDeviceHandler.ts +++ b/src/MediaDeviceHandler.ts @@ -1,18 +1,10 @@ /* -Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner +Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import EventEmitter from "events"; diff --git a/src/Modal.tsx b/src/Modal.tsx index b8dacdbc1..22e8a5692 100644 --- a/src/Modal.tsx +++ b/src/Modal.tsx @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/NodeAnimator.tsx b/src/NodeAnimator.tsx index 85151bf3b..eb1ce8cc4 100644 --- a/src/NodeAnimator.tsx +++ b/src/NodeAnimator.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { Key, MutableRefObject, ReactElement, ReactFragment, ReactInstance, ReactPortal } from "react"; diff --git a/src/Notifier.ts b/src/Notifier.ts index d482091c3..23d239de0 100644 --- a/src/Notifier.ts +++ b/src/Notifier.ts @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. +Copyright 2020 The Matrix.org Foundation C.I.C. Copyright 2017 Vector Creations Ltd Copyright 2017 New Vector Ltd -Copyright 2020 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2015, 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { @@ -521,12 +513,7 @@ class NotifierClass extends TypedEventEmitter m.sender === cli.getUserId()); - if ( - EventType.CallNotify === ev.getType() && - SettingsStore.getValue("feature_group_calls") && - (ev.getAge() ?? 0) < 10000 && - !thisUserHasConnectedDevice - ) { + if (EventType.CallNotify === ev.getType() && (ev.getAge() ?? 0) < 10000 && !thisUserHasConnectedDevice) { const content = ev.getContent(); const roomId = ev.getRoomId(); if (typeof content.call_id !== "string") { diff --git a/src/PageTypes.ts b/src/PageTypes.ts index 1e181b4e3..1ebb82430 100644 --- a/src/PageTypes.ts +++ b/src/PageTypes.ts @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** The types of page which can be shown by the LoggedInView */ diff --git a/src/PasswordReset.ts b/src/PasswordReset.ts index 0564f008a..b5ca039d7 100644 --- a/src/PasswordReset.ts +++ b/src/PasswordReset.ts @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { createClient, IRequestTokenResponse, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/PlatformPeg.ts b/src/PlatformPeg.ts index cc7bb8dc1..87c3b1748 100644 --- a/src/PlatformPeg.ts +++ b/src/PlatformPeg.ts @@ -1,18 +1,10 @@ /* -Copyright 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import BasePlatform from "./BasePlatform"; diff --git a/src/PlaybackEncoder.ts b/src/PlaybackEncoder.ts index a08292e01..aa3fb9bf6 100644 --- a/src/PlaybackEncoder.ts +++ b/src/PlaybackEncoder.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // @ts-ignore - `.ts` is needed here to make TS happy diff --git a/src/PosthogAnalytics.ts b/src/PosthogAnalytics.ts index f8518d925..78d53e959 100644 --- a/src/PosthogAnalytics.ts +++ b/src/PosthogAnalytics.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import posthog, { CaptureOptions, PostHog, Properties } from "posthog-js"; diff --git a/src/PosthogTrackers.ts b/src/PosthogTrackers.ts index 18b6edc06..5d7c793f6 100644 --- a/src/PosthogTrackers.ts +++ b/src/PosthogTrackers.ts @@ -1,22 +1,15 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { PureComponent, SyntheticEvent } from "react"; import { WebScreen as ScreenEvent } from "@matrix-org/analytics-events/types/typescript/WebScreen"; import { Interaction as InteractionEvent } from "@matrix-org/analytics-events/types/typescript/Interaction"; +import { PinUnpinAction } from "@matrix-org/analytics-events/types/typescript/PinUnpinAction"; import PageType from "./PageTypes"; import Views from "./Views"; @@ -106,6 +99,19 @@ export default class PosthogTrackers { name, }); } + + /** + * Track a pin or unpin action on a message. + * @param kind - Is pin or unpin. + * @param from - From where the action is triggered. + */ + public static trackPinUnpinMessage(kind: PinUnpinAction["kind"], from: PinUnpinAction["from"]): void { + PosthogAnalytics.instance.trackEvent({ + eventName: "PinUnpinAction", + kind, + from, + }); + } } export class PosthogScreenTracker extends PureComponent<{ screenName: ScreenName }> { diff --git a/src/Presence.ts b/src/Presence.ts index 9432fb306..3326dac96 100644 --- a/src/Presence.ts +++ b/src/Presence.ts @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/Registration.tsx b/src/Registration.tsx index f5ae5fd9f..bbb6295f7 100644 --- a/src/Registration.tsx +++ b/src/Registration.tsx @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/Resend.ts b/src/Resend.ts index b79db7544..064bebf93 100644 --- a/src/Resend.ts +++ b/src/Resend.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, EventStatus, Room, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/Roles.ts b/src/Roles.ts index f1ccbd71d..38b6d7465 100644 --- a/src/Roles.ts +++ b/src/Roles.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { _t } from "./languageHandler"; diff --git a/src/RoomAliasCache.ts b/src/RoomAliasCache.ts index f565d8d2d..81a85b4a0 100644 --- a/src/RoomAliasCache.ts +++ b/src/RoomAliasCache.ts @@ -1,17 +1,9 @@ /* -Copyright 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/RoomInvite.tsx b/src/RoomInvite.tsx index 72d9d50c8..d4f156c91 100644 --- a/src/RoomInvite.tsx +++ b/src/RoomInvite.tsx @@ -1,17 +1,9 @@ /* -Copyright 2016 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps } from "react"; @@ -153,7 +145,7 @@ export function showAnyInviteErrors( "invite|room_failed_partial", {}, { - RoomName: () => {room.name}, + RoomName: () => {room.name}, }, )}
diff --git a/src/RoomNotifs.ts b/src/RoomNotifs.ts index 1fb5e5ba4..cc027c968 100644 --- a/src/RoomNotifs.ts +++ b/src/RoomNotifs.ts @@ -1,17 +1,9 @@ /* -Copyright 2016, 2019, 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2019 , 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { PushProcessor } from "matrix-js-sdk/src/pushprocessor"; diff --git a/src/Rooms.ts b/src/Rooms.ts index 9e14f026c..d24f008b5 100644 --- a/src/Rooms.ts +++ b/src/Rooms.ts @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, EventType, RoomMember, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/ScalarAuthClient.ts b/src/ScalarAuthClient.ts index 5be7a5d86..de1bf2943 100644 --- a/src/ScalarAuthClient.ts +++ b/src/ScalarAuthClient.ts @@ -1,17 +1,9 @@ /* -Copyright 2016, 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2019 , 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/ScalarMessaging.ts b/src/ScalarMessaging.ts index 0ee6921a2..d8092953f 100644 --- a/src/ScalarMessaging.ts +++ b/src/ScalarMessaging.ts @@ -1,19 +1,10 @@ /* -Copyright 2016 OpenMarket Ltd +Copyright 2018-2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Copyright 2018 New Vector Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // TODO: Generify the name of this and all components within - it's not just for scalar. diff --git a/src/SdkConfig.ts b/src/SdkConfig.ts index 92b31ae91..96b33923c 100644 --- a/src/SdkConfig.ts +++ b/src/SdkConfig.ts @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. Copyright 2016 OpenMarket Ltd -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Optional } from "matrix-events-sdk"; diff --git a/src/Searching.ts b/src/Searching.ts index f868942b5..85483eb23 100644 --- a/src/Searching.ts +++ b/src/Searching.ts @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/SecurityManager.ts b/src/SecurityManager.ts index 02edff219..e4cb04a76 100644 --- a/src/SecurityManager.ts +++ b/src/SecurityManager.ts @@ -1,22 +1,14 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Crypto, ICryptoCallbacks, MatrixClient, encodeBase64, SecretStorage } from "matrix-js-sdk/src/matrix"; import { deriveKey } from "matrix-js-sdk/src/crypto/key_passphrase"; -import { decodeRecoveryKey } from "matrix-js-sdk/src/crypto/recoverykey"; +import { deriveRecoveryKeyFromPassphrase, decodeRecoveryKey } from "matrix-js-sdk/src/crypto-api"; import { logger } from "matrix-js-sdk/src/logger"; import type CreateSecretStorageDialog from "./async-components/views/dialogs/security/CreateSecretStorageDialog"; @@ -79,7 +71,7 @@ function makeInputToKey( ): (keyParams: KeyParams) => Promise { return async ({ passphrase, recoveryKey }): Promise => { if (passphrase) { - return deriveKey(passphrase, keyInfo.passphrase.salt, keyInfo.passphrase.iterations); + return deriveRecoveryKeyFromPassphrase(passphrase, keyInfo.passphrase.salt, keyInfo.passphrase.iterations); } else if (recoveryKey) { return decodeRecoveryKey(recoveryKey); } @@ -121,14 +113,6 @@ async function getSecretStorageKey({ return [keyId, secretStorageKeys[keyId]]; } - if (dehydrationCache.key) { - if (await MatrixClientPeg.safeGet().checkSecretStorageKey(dehydrationCache.key, keyInfo)) { - logger.debug("getSecretStorageKey: returning key from dehydration cache"); - cacheSecretStorageKey(keyId, keyInfo, dehydrationCache.key); - return [keyId, dehydrationCache.key]; - } - } - const keyFromCustomisations = ModuleRunner.instance.extensions.cryptoSetup.getSecretStorageKey(); if (keyFromCustomisations) { logger.log("getSecretStorageKey: Using secret storage key from CryptoSetupExtension"); @@ -177,56 +161,6 @@ async function getSecretStorageKey({ return [keyId, key]; } -export async function getDehydrationKey( - keyInfo: SecretStorage.SecretStorageKeyDescription, - checkFunc: (data: Uint8Array) => void, -): Promise { - const keyFromCustomisations = ModuleRunner.instance.extensions.cryptoSetup.getSecretStorageKey(); - if (keyFromCustomisations) { - logger.log("CryptoSetupExtension: Using key from extension (dehydration)"); - return keyFromCustomisations; - } - - const inputToKey = makeInputToKey(keyInfo); - const { finished } = Modal.createDialog( - AccessSecretStorageDialog, - /* props= */ - { - keyInfo, - checkPrivateKey: async (input: KeyParams): Promise => { - const key = await inputToKey(input); - try { - checkFunc(key); - return true; - } catch (e) { - return false; - } - }, - }, - /* className= */ undefined, - /* isPriorityModal= */ false, - /* isStaticModal= */ false, - /* options= */ { - onBeforeClose: async (reason): Promise => { - if (reason === "backgroundClick") { - return confirmToDismiss(); - } - return true; - }, - }, - ); - const [input] = await finished; - if (!input) { - throw new AccessCancelledError(); - } - const key = await inputToKey(input); - - // need to copy the key because rehydration (unpickling) will clobber it - dehydrationCache = { key: new Uint8Array(key), keyInfo }; - - return key; -} - function cacheSecretStorageKey( keyId: string, keyInfo: SecretStorage.SecretStorageKeyDescription, @@ -238,50 +172,9 @@ function cacheSecretStorageKey( } } -async function onSecretRequested( - userId: string, - deviceId: string, - requestId: string, - name: string, - deviceTrust: Crypto.DeviceVerificationStatus, -): Promise { - logger.log("onSecretRequested", userId, deviceId, requestId, name, deviceTrust); - const client = MatrixClientPeg.safeGet(); - if (userId !== client.getUserId()) { - return; - } - if (!deviceTrust?.isVerified()) { - logger.log(`Ignoring secret request from untrusted device ${deviceId}`); - return; - } - if ( - name === "m.cross_signing.master" || - name === "m.cross_signing.self_signing" || - name === "m.cross_signing.user_signing" - ) { - const callbacks = client.getCrossSigningCacheCallbacks(); - if (!callbacks?.getCrossSigningKeyCache) return; - const keyId = name.replace("m.cross_signing.", ""); - const key = await callbacks.getCrossSigningKeyCache(keyId); - if (!key) { - logger.log(`${keyId} requested by ${deviceId}, but not found in cache`); - } - return key ? encodeBase64(key) : undefined; - } else if (name === "m.megolm_backup.v1") { - const key = await client.crypto?.getSessionBackupPrivateKey(); - if (!key) { - logger.log(`session backup key requested by ${deviceId}, but not found in cache`); - } - return key ? encodeBase64(key) : undefined; - } - logger.warn("onSecretRequested didn't recognise the secret named ", name); -} - export const crossSigningCallbacks: ICryptoCallbacks = { getSecretStorageKey, cacheSecretStorageKey, - onSecretRequested, - getDehydrationKey, }; /** diff --git a/src/SendHistoryManager.ts b/src/SendHistoryManager.ts index 32d6056a8..07da60ef6 100644 --- a/src/SendHistoryManager.ts +++ b/src/SendHistoryManager.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Aviral Dasgupta -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { clamp } from "lodash"; diff --git a/src/SlashCommands.tsx b/src/SlashCommands.tsx index d7728f976..9d91ec098 100644 --- a/src/SlashCommands.tsx +++ b/src/SlashCommands.tsx @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd -Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; diff --git a/src/SlidingSyncManager.ts b/src/SlidingSyncManager.ts index 4885ffa8d..578a17574 100644 --- a/src/SlidingSyncManager.ts +++ b/src/SlidingSyncManager.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* diff --git a/src/SupportedBrowser.ts b/src/SupportedBrowser.ts index 071a64f4f..099648a93 100644 --- a/src/SupportedBrowser.ts +++ b/src/SupportedBrowser.ts @@ -1,22 +1,13 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; import browserlist from "browserslist"; -import electronToChromium from "electron-to-chromium/versions"; import PopOutIcon from "@vector-im/compound-design-tokens/assets/web/icons/pop-out"; import { DeviceType, parseUserAgent } from "./utils/device/parseUserAgent"; @@ -46,14 +37,6 @@ function onDismissClick(): void { function getBrowserNameVersion(browser: string): [name: string, version: number] { const [browserName, browserVersion] = browser.split(" "); const browserNameLc = browserName.toLowerCase(); - if (browserNameLc === "electron") { - // The electron-to-chromium map is keyed by the major and minor version of Electron - const chromiumVersion = electronToChromium[browserVersion.split(".").slice(0, 2).join(".")]; - if (chromiumVersion) { - return ["chrome", parseInt(chromiumVersion, 10)]; - } - } - return [browserNameLc, parseInt(browserVersion, 10)]; } @@ -80,6 +63,12 @@ export function getBrowserSupport(): boolean { } if (details.client) { + // We don't care about the browser version for desktop devices + // We ship our own browser (electron) for desktop devices + if (details.deviceType === DeviceType.Desktop) { + return supported; + } + const [browserName, browserVersion] = getBrowserNameVersion(details.client); const minimumVersion = minimumBrowserVersions.get(browserName); // Check both with the sub-version cut off and without as some browsers have less granular versioning e.g. Safari diff --git a/src/Terms.ts b/src/Terms.ts index 6aa18436e..6fd8a8d53 100644 --- a/src/Terms.ts +++ b/src/Terms.ts @@ -1,17 +1,9 @@ /* -Copyright 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/TextForEvent.tsx b/src/TextForEvent.tsx index 96eb38f01..1ffae62ae 100644 --- a/src/TextForEvent.tsx +++ b/src/TextForEvent.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -40,12 +32,13 @@ import { WIDGET_LAYOUT_EVENT_TYPE } from "./stores/widgets/WidgetLayoutStore"; import { RightPanelPhases } from "./stores/right-panel/RightPanelStorePhases"; import defaultDispatcher from "./dispatcher/dispatcher"; import { RoomSettingsTab } from "./components/views/dialogs/RoomSettingsDialog"; -import AccessibleButton, { ButtonEvent } from "./components/views/elements/AccessibleButton"; +import AccessibleButton from "./components/views/elements/AccessibleButton"; import RightPanelStore from "./stores/right-panel/RightPanelStore"; import { highlightEvent, isLocationEvent } from "./utils/EventUtils"; import { ElementCall } from "./models/Call"; import { textForVoiceBroadcastStoppedEvent, VoiceBroadcastInfoEventType } from "./voice-broadcast"; import { getSenderName } from "./utils/event/getSenderName"; +import PosthogTrackers from "./PosthogTrackers.ts"; function getRoomMemberDisplayname(client: MatrixClient, event: MatrixEvent, userId = event.getSender()): string { const roomId = event.getRoomId(); @@ -563,11 +556,11 @@ function textForPowerEvent(event: MatrixEvent, client: MatrixClient): (() => str } const onPinnedMessagesClick = (): void => { + PosthogTrackers.trackInteraction("PinnedMessageStateEventClick"); RightPanelStore.instance.setCard({ phase: RightPanelPhases.PinnedMessages }, false); }; function textForPinnedEvent(event: MatrixEvent, client: MatrixClient, allowJSX: boolean): (() => Renderable) | null { - if (!SettingsStore.getValue("feature_pinning")) return null; const senderName = getSenderName(event); const roomId = event.getRoomId()!; @@ -590,7 +583,10 @@ function textForPinnedEvent(event: MatrixEvent, client: MatrixClient, allowJSX: a: (sub) => ( highlightEvent(roomId, messageId)} + onClick={() => { + PosthogTrackers.trackInteraction("PinnedMessageStateEventClick"); + highlightEvent(roomId, messageId); + }} > {sub} @@ -623,7 +619,10 @@ function textForPinnedEvent(event: MatrixEvent, client: MatrixClient, allowJSX: a: (sub) => ( highlightEvent(roomId, messageId)} + onClick={() => { + PosthogTrackers.trackInteraction("PinnedMessageStateEventClick"); + highlightEvent(roomId, messageId); + }} > {sub} diff --git a/src/TimezoneHandler.ts b/src/TimezoneHandler.ts new file mode 100644 index 000000000..c7c603b5f --- /dev/null +++ b/src/TimezoneHandler.ts @@ -0,0 +1,47 @@ +/* +Copyright 2024 New Vector Ltd. +Copyright 2024 The Matrix.org Foundation C.I.C. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. +*/ + +import { SettingLevel } from "./settings/SettingLevel"; +import SettingsStore from "./settings/SettingsStore"; + +export const USER_TIMEZONE_KEY = "userTimezone"; + +/** + * Returning `undefined` ensure that if unset the browser default will be used in `DateTimeFormat`. + * @returns The user specified timezone or `undefined` + */ +export function getUserTimezone(): string | undefined { + const tz = SettingsStore.getValueAt(SettingLevel.DEVICE, USER_TIMEZONE_KEY); + return tz || undefined; +} + +/** + * Set in the settings the given timezone + * @timezone + */ +export function setUserTimezone(timezone: string): Promise { + return SettingsStore.setValue(USER_TIMEZONE_KEY, null, SettingLevel.DEVICE, timezone); +} + +/** + * Return all the available timezones + */ +export function getAllTimezones(): string[] { + return Intl.supportedValuesOf("timeZone"); +} + +/** + * Return the current timezone in a short human readable way + */ +export function shortBrowserTimezone(): string { + return ( + new Intl.DateTimeFormat(undefined, { timeZoneName: "short" }) + .formatToParts(new Date()) + .find((x) => x.type === "timeZoneName")?.value ?? "GMT" + ); +} diff --git a/src/Typeguards.ts b/src/Typeguards.ts index 397cbbd29..4d39847dc 100644 --- a/src/Typeguards.ts +++ b/src/Typeguards.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export function isNotNull(arg: T): arg is Exclude { diff --git a/src/Unread.ts b/src/Unread.ts index 0db1c5c77..06d234493 100644 --- a/src/Unread.ts +++ b/src/Unread.ts @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { M_BEACON, Room, Thread, MatrixEvent, EventType, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/UserActivity.ts b/src/UserActivity.ts index e65f627e7..61f3c93ca 100644 --- a/src/UserActivity.ts +++ b/src/UserActivity.ts @@ -1,18 +1,9 @@ /* +Copyright 2019-2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import dis from "./dispatcher/dispatcher"; diff --git a/src/UserAddress.ts b/src/UserAddress.ts index b6e37ce99..4f576d076 100644 --- a/src/UserAddress.ts +++ b/src/UserAddress.ts @@ -1,17 +1,9 @@ /* -Copyright 2017 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2017-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ const emailRegex = /^\S+@\S+\.\S+$/; diff --git a/src/Views.ts b/src/Views.ts index 4c7f002d5..d554991b5 100644 --- a/src/Views.ts +++ b/src/Views.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** constants for MatrixChat.state.view */ @@ -54,6 +46,9 @@ enum Views { // Another instance of the application has started up. We just show an error page. LOCK_STOLEN, + + // :TCHAP: screen before launching sso + EMAIL_PRECHECK_SSO } export default Views; diff --git a/src/VoipUserMapper.ts b/src/VoipUserMapper.ts index 09e7cbd1a..41e0ab3df 100644 --- a/src/VoipUserMapper.ts +++ b/src/VoipUserMapper.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, EventType } from "matrix-js-sdk/src/matrix"; diff --git a/src/WhoIsTyping.ts b/src/WhoIsTyping.ts index 054bea9d1..9a0b279c3 100644 --- a/src/WhoIsTyping.ts +++ b/src/WhoIsTyping.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, RoomMember } from "matrix-js-sdk/src/matrix"; diff --git a/src/WorkerManager.ts b/src/WorkerManager.ts index 2ad5191b2..1878769c2 100644 --- a/src/WorkerManager.ts +++ b/src/WorkerManager.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { defer, IDeferred } from "matrix-js-sdk/src/utils"; diff --git a/src/accessibility/KeyboardShortcutUtils.ts b/src/accessibility/KeyboardShortcutUtils.ts index 8743d2d40..6b049ab41 100644 --- a/src/accessibility/KeyboardShortcutUtils.ts +++ b/src/accessibility/KeyboardShortcutUtils.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { KeyCombo } from "../KeyBindingsManager"; diff --git a/src/accessibility/KeyboardShortcuts.ts b/src/accessibility/KeyboardShortcuts.ts index f5e18d205..bdc0123ee 100644 --- a/src/accessibility/KeyboardShortcuts.ts +++ b/src/accessibility/KeyboardShortcuts.ts @@ -1,19 +1,11 @@ /* -Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Copyright 2021 - 2022 Šimon Brandner - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2021, 2022 Šimon Brandner +Copyright 2020 The Matrix.org Foundation C.I.C. -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { _td, TranslationKey } from "../languageHandler"; diff --git a/src/accessibility/LandmarkNavigation.ts b/src/accessibility/LandmarkNavigation.ts index 50ec478d2..68c9e0b11 100644 --- a/src/accessibility/LandmarkNavigation.ts +++ b/src/accessibility/LandmarkNavigation.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { TimelineRenderingType } from "../contexts/RoomContext"; diff --git a/src/accessibility/RovingTabIndex.tsx b/src/accessibility/RovingTabIndex.tsx index 9da2b4281..2fb22e9f8 100644 --- a/src/accessibility/RovingTabIndex.tsx +++ b/src/accessibility/RovingTabIndex.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { diff --git a/src/accessibility/Toolbar.tsx b/src/accessibility/Toolbar.tsx index c5a81aeda..7d4b1f936 100644 --- a/src/accessibility/Toolbar.tsx +++ b/src/accessibility/Toolbar.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { forwardRef } from "react"; diff --git a/src/accessibility/context_menu/ContextMenuButton.tsx b/src/accessibility/context_menu/ContextMenuButton.tsx index 35dd986f8..d8c7d912c 100644 --- a/src/accessibility/context_menu/ContextMenuButton.tsx +++ b/src/accessibility/context_menu/ContextMenuButton.tsx @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps, forwardRef, Ref } from "react"; diff --git a/src/accessibility/context_menu/ContextMenuTooltipButton.tsx b/src/accessibility/context_menu/ContextMenuTooltipButton.tsx index 3a3048d41..11437866b 100644 --- a/src/accessibility/context_menu/ContextMenuTooltipButton.tsx +++ b/src/accessibility/context_menu/ContextMenuTooltipButton.tsx @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps, forwardRef, Ref } from "react"; diff --git a/src/accessibility/context_menu/MenuGroup.tsx b/src/accessibility/context_menu/MenuGroup.tsx index 28538f67f..30c5550f3 100644 --- a/src/accessibility/context_menu/MenuGroup.tsx +++ b/src/accessibility/context_menu/MenuGroup.tsx @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/accessibility/context_menu/MenuItem.tsx b/src/accessibility/context_menu/MenuItem.tsx index db3c64468..f30fd64f7 100644 --- a/src/accessibility/context_menu/MenuItem.tsx +++ b/src/accessibility/context_menu/MenuItem.tsx @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/accessibility/context_menu/MenuItemCheckbox.tsx b/src/accessibility/context_menu/MenuItemCheckbox.tsx index 8237da757..2e383393e 100644 --- a/src/accessibility/context_menu/MenuItemCheckbox.tsx +++ b/src/accessibility/context_menu/MenuItemCheckbox.tsx @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/accessibility/context_menu/MenuItemRadio.tsx b/src/accessibility/context_menu/MenuItemRadio.tsx index 12b16370a..69e690f83 100644 --- a/src/accessibility/context_menu/MenuItemRadio.tsx +++ b/src/accessibility/context_menu/MenuItemRadio.tsx @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/accessibility/context_menu/StyledMenuItemCheckbox.tsx b/src/accessibility/context_menu/StyledMenuItemCheckbox.tsx index e8e69865d..af49288d0 100644 --- a/src/accessibility/context_menu/StyledMenuItemCheckbox.tsx +++ b/src/accessibility/context_menu/StyledMenuItemCheckbox.tsx @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/accessibility/context_menu/StyledMenuItemRadio.tsx b/src/accessibility/context_menu/StyledMenuItemRadio.tsx index 7a394a3d1..a6a6993e7 100644 --- a/src/accessibility/context_menu/StyledMenuItemRadio.tsx +++ b/src/accessibility/context_menu/StyledMenuItemRadio.tsx @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/accessibility/roving/RovingAccessibleButton.tsx b/src/accessibility/roving/RovingAccessibleButton.tsx index 01e126824..f50fb010a 100644 --- a/src/accessibility/roving/RovingAccessibleButton.tsx +++ b/src/accessibility/roving/RovingAccessibleButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps } from "react"; diff --git a/src/accessibility/roving/RovingTabIndexWrapper.tsx b/src/accessibility/roving/RovingTabIndexWrapper.tsx index 4208d4749..93436ef4b 100644 --- a/src/accessibility/roving/RovingTabIndexWrapper.tsx +++ b/src/accessibility/roving/RovingTabIndexWrapper.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement } from "react"; diff --git a/src/accessibility/roving/types.ts b/src/accessibility/roving/types.ts index cc6a98e1d..98b498844 100644 --- a/src/accessibility/roving/types.ts +++ b/src/accessibility/roving/types.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RefObject } from "react"; diff --git a/src/actions/MatrixActionCreators.ts b/src/actions/MatrixActionCreators.ts index b3f17d8bb..6f32220ee 100644 --- a/src/actions/MatrixActionCreators.ts +++ b/src/actions/MatrixActionCreators.ts @@ -1,17 +1,9 @@ /* -Copyright 2017, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2017-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/actions/RoomListActions.ts b/src/actions/RoomListActions.ts index 00df31b44..1b693ba4d 100644 --- a/src/actions/RoomListActions.ts +++ b/src/actions/RoomListActions.ts @@ -1,18 +1,10 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/actions/actionCreators.ts b/src/actions/actionCreators.ts index b6eb263fb..55a6ec729 100644 --- a/src/actions/actionCreators.ts +++ b/src/actions/actionCreators.ts @@ -1,18 +1,10 @@ /* -Copyright 2017 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2017 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { AsyncActionFn, AsyncActionPayload } from "../dispatcher/payloads"; diff --git a/src/actions/handlers/viewUserDeviceSettings.ts b/src/actions/handlers/viewUserDeviceSettings.ts index 8af795e51..56083dd4e 100644 --- a/src/actions/handlers/viewUserDeviceSettings.ts +++ b/src/actions/handlers/viewUserDeviceSettings.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { UserTab } from "../../components/views/dialogs/UserTab"; diff --git a/src/async-components/views/dialogs/eventindex/DisableEventIndexDialog.tsx b/src/async-components/views/dialogs/eventindex/DisableEventIndexDialog.tsx index c1d2c4645..90b0ee299 100644 --- a/src/async-components/views/dialogs/eventindex/DisableEventIndexDialog.tsx +++ b/src/async-components/views/dialogs/eventindex/DisableEventIndexDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.tsx b/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.tsx index cc36bf478..01b7e8227 100644 --- a/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.tsx +++ b/src/async-components/views/dialogs/eventindex/ManageEventIndexDialog.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020-2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent } from "react"; diff --git a/src/async-components/views/dialogs/security/CreateKeyBackupDialog.tsx b/src/async-components/views/dialogs/security/CreateKeyBackupDialog.tsx index 1dd280d08..3ec62c3df 100644 --- a/src/async-components/views/dialogs/security/CreateKeyBackupDialog.tsx +++ b/src/async-components/views/dialogs/security/CreateKeyBackupDialog.tsx @@ -1,18 +1,10 @@ /* -Copyright 2018, 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2018, 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/async-components/views/dialogs/security/CreateSecretStorageDialog.tsx b/src/async-components/views/dialogs/security/CreateSecretStorageDialog.tsx index e72da1dfe..1591cb354 100644 --- a/src/async-components/views/dialogs/security/CreateSecretStorageDialog.tsx +++ b/src/async-components/views/dialogs/security/CreateSecretStorageDialog.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2019, 2020 , 2023 The Matrix.org Foundation C.I.C. Copyright 2018, 2019 New Vector Ltd -Copyright 2019, 2020, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/async-components/views/dialogs/security/ExportE2eKeysDialog.tsx b/src/async-components/views/dialogs/security/ExportE2eKeysDialog.tsx index 0223d1bee..3913d7a80 100644 --- a/src/async-components/views/dialogs/security/ExportE2eKeysDialog.tsx +++ b/src/async-components/views/dialogs/security/ExportE2eKeysDialog.tsx @@ -1,18 +1,10 @@ /* -Copyright 2017 Vector Creations Ltd +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. +Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import FileSaver from "file-saver"; diff --git a/src/async-components/views/dialogs/security/ImportE2eKeysDialog.tsx b/src/async-components/views/dialogs/security/ImportE2eKeysDialog.tsx index 498de104a..fa41d53a4 100644 --- a/src/async-components/views/dialogs/security/ImportE2eKeysDialog.tsx +++ b/src/async-components/views/dialogs/security/ImportE2eKeysDialog.tsx @@ -1,18 +1,10 @@ /* -Copyright 2017 Vector Creations Ltd +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. +Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/async-components/views/dialogs/security/NewRecoveryMethodDialog.tsx b/src/async-components/views/dialogs/security/NewRecoveryMethodDialog.tsx index cf5e7c61a..ba08bcad2 100644 --- a/src/async-components/views/dialogs/security/NewRecoveryMethodDialog.tsx +++ b/src/async-components/views/dialogs/security/NewRecoveryMethodDialog.tsx @@ -1,18 +1,10 @@ /* -Copyright 2018, 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2018, 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/async-components/views/dialogs/security/RecoveryMethodRemovedDialog.tsx b/src/async-components/views/dialogs/security/RecoveryMethodRemovedDialog.tsx index c864eb1ab..aec447735 100644 --- a/src/async-components/views/dialogs/security/RecoveryMethodRemovedDialog.tsx +++ b/src/async-components/views/dialogs/security/RecoveryMethodRemovedDialog.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/audio/BackgroundAudio.ts b/src/audio/BackgroundAudio.ts index c7a03f2a0..7bb6ebb50 100644 --- a/src/audio/BackgroundAudio.ts +++ b/src/audio/BackgroundAudio.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/audio/ManagedPlayback.ts b/src/audio/ManagedPlayback.ts index 175154557..cab2142c2 100644 --- a/src/audio/ManagedPlayback.ts +++ b/src/audio/ManagedPlayback.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Playback } from "./Playback"; diff --git a/src/audio/Playback.ts b/src/audio/Playback.ts index 957d54173..f0155574c 100644 --- a/src/audio/Playback.ts +++ b/src/audio/Playback.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import EventEmitter from "events"; diff --git a/src/audio/PlaybackClock.ts b/src/audio/PlaybackClock.ts index 051064f83..a0f1b3b5b 100644 --- a/src/audio/PlaybackClock.ts +++ b/src/audio/PlaybackClock.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { SimpleObservable } from "matrix-widget-api"; diff --git a/src/audio/PlaybackManager.ts b/src/audio/PlaybackManager.ts index 30bc38767..d33b31ea7 100644 --- a/src/audio/PlaybackManager.ts +++ b/src/audio/PlaybackManager.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Playback, PlaybackState } from "./Playback"; diff --git a/src/audio/PlaybackQueue.ts b/src/audio/PlaybackQueue.ts index a32fb54e7..bc3b3c692 100644 --- a/src/audio/PlaybackQueue.ts +++ b/src/audio/PlaybackQueue.ts @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, Room, EventType } from "matrix-js-sdk/src/matrix"; diff --git a/src/audio/RecorderWorklet.ts b/src/audio/RecorderWorklet.ts index 3cb9cf03d..509dac09c 100644 --- a/src/audio/RecorderWorklet.ts +++ b/src/audio/RecorderWorklet.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IAmplitudePayload, ITimingPayload, PayloadEvent, WORKLET_NAME } from "./consts"; diff --git a/src/audio/VoiceMessageRecording.ts b/src/audio/VoiceMessageRecording.ts index 589e250c5..8824206b8 100644 --- a/src/audio/VoiceMessageRecording.ts +++ b/src/audio/VoiceMessageRecording.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/audio/VoiceRecording.ts b/src/audio/VoiceRecording.ts index 9f12dc33f..692f731c2 100644 --- a/src/audio/VoiceRecording.ts +++ b/src/audio/VoiceRecording.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import Recorder from "opus-recorder/dist/recorder.min.js"; diff --git a/src/audio/compat.ts b/src/audio/compat.ts index ce0fc3081..bce98874a 100644 --- a/src/audio/compat.ts +++ b/src/audio/compat.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // @ts-ignore - we know that this is not a module. We're looking for a path. diff --git a/src/audio/consts.ts b/src/audio/consts.ts index 4c8fb4602..bf6405a03 100644 --- a/src/audio/consts.ts +++ b/src/audio/consts.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { arraySeed } from "../utils/arrays"; diff --git a/src/audio/recorderWorkletFactory.ts b/src/audio/recorderWorkletFactory.ts index 0a0c15a12..460f32595 100644 --- a/src/audio/recorderWorkletFactory.ts +++ b/src/audio/recorderWorkletFactory.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import mxRecorderWorkletPath from "./RecorderWorklet"; diff --git a/src/autocomplete/AutocompleteProvider.tsx b/src/autocomplete/AutocompleteProvider.tsx index ace9f541e..8c755cc95 100644 --- a/src/autocomplete/AutocompleteProvider.tsx +++ b/src/autocomplete/AutocompleteProvider.tsx @@ -1,19 +1,10 @@ /* -Copyright 2016 Aviral Dasgupta +Copyright 2017-2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Copyright 2017, 2018 New Vector Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2016 Aviral Dasgupta -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/autocomplete/Autocompleter.ts b/src/autocomplete/Autocompleter.ts index 7919608ca..b2a2b1e13 100644 --- a/src/autocomplete/Autocompleter.ts +++ b/src/autocomplete/Autocompleter.ts @@ -1,18 +1,9 @@ /* +Copyright 2017-2024 New Vector Ltd. Copyright 2016 Aviral Dasgupta -Copyright 2017, 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ReactElement } from "react"; diff --git a/src/autocomplete/CommandProvider.tsx b/src/autocomplete/CommandProvider.tsx index 1e3e4a325..e57377518 100644 --- a/src/autocomplete/CommandProvider.tsx +++ b/src/autocomplete/CommandProvider.tsx @@ -1,20 +1,12 @@ /* -Copyright 2016 Aviral Dasgupta +Copyright 2024 New Vector Ltd. +Copyright 2018 Michael Telatynski <7t3chguy@gmail.com> Copyright 2017 Vector Creations Ltd Copyright 2017 New Vector Ltd -Copyright 2018 Michael Telatynski <7t3chguy@gmail.com> - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2016 Aviral Dasgupta -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/autocomplete/Components.tsx b/src/autocomplete/Components.tsx index b3ded3f76..0dcfd467e 100644 --- a/src/autocomplete/Components.tsx +++ b/src/autocomplete/Components.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2016 Aviral Dasgupta -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { forwardRef } from "react"; diff --git a/src/autocomplete/EmojiProvider.tsx b/src/autocomplete/EmojiProvider.tsx index 5b89ea7e2..f25b94f99 100644 --- a/src/autocomplete/EmojiProvider.tsx +++ b/src/autocomplete/EmojiProvider.tsx @@ -1,21 +1,13 @@ /* -Copyright 2016 Aviral Dasgupta -Copyright 2017 Vector Creations Ltd -Copyright 2017, 2018 New Vector Ltd -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. Copyright 2022 Ryan Browne +Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2017, 2018 New Vector Ltd +Copyright 2017 Vector Creations Ltd +Copyright 2016 Aviral Dasgupta -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/autocomplete/NotifProvider.tsx b/src/autocomplete/NotifProvider.tsx index b524454bc..0d9741276 100644 --- a/src/autocomplete/NotifProvider.tsx +++ b/src/autocomplete/NotifProvider.tsx @@ -1,17 +1,8 @@ /* -Copyright 2017 New Vector Ltd +Copyright 2017-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/autocomplete/QueryMatcher.ts b/src/autocomplete/QueryMatcher.ts index ba052d190..242662142 100644 --- a/src/autocomplete/QueryMatcher.ts +++ b/src/autocomplete/QueryMatcher.ts @@ -1,19 +1,11 @@ /* -Copyright 2017 Aviral Dasgupta +Copyright 2024 New Vector Ltd. Copyright 2018 Michael Telatynski <7t3chguy@gmail.com> Copyright 2018 New Vector Ltd +Copyright 2017 Aviral Dasgupta -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { at, uniq } from "lodash"; diff --git a/src/autocomplete/RoomProvider.tsx b/src/autocomplete/RoomProvider.tsx index f12fdd004..94763486e 100644 --- a/src/autocomplete/RoomProvider.tsx +++ b/src/autocomplete/RoomProvider.tsx @@ -1,19 +1,11 @@ /* -Copyright 2016 Aviral Dasgupta -Copyright 2018 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2017-2023 The Matrix.org Foundation C.I.C. +Copyright 2018 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2016 Aviral Dasgupta -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/autocomplete/SpaceProvider.tsx b/src/autocomplete/SpaceProvider.tsx index 0b0e7bd90..88bc9f3d1 100644 --- a/src/autocomplete/SpaceProvider.tsx +++ b/src/autocomplete/SpaceProvider.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/autocomplete/UserProvider.tsx b/src/autocomplete/UserProvider.tsx index f362ff75e..18c93d0cd 100644 --- a/src/autocomplete/UserProvider.tsx +++ b/src/autocomplete/UserProvider.tsx @@ -1,20 +1,12 @@ /* -Copyright 2016 Aviral Dasgupta -Copyright 2017 Vector Creations Ltd -Copyright 2017, 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2018 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2017, 2018 New Vector Ltd +Copyright 2017 Vector Creations Ltd +Copyright 2016 Aviral Dasgupta -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/boundThreepids.ts b/src/boundThreepids.ts index e8fee803b..4417f3daa 100644 --- a/src/boundThreepids.ts +++ b/src/boundThreepids.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IThreepid, ThreepidMedium, MatrixClient, MatrixError } from "matrix-js-sdk/src/matrix"; diff --git a/src/call-types.ts b/src/call-types.ts index 40cd006dc..2384c85e5 100644 --- a/src/call-types.ts +++ b/src/call-types.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // Event type for room account data and room creation content used to mark rooms as virtual rooms diff --git a/src/components/structures/AutoHideScrollbar.tsx b/src/components/structures/AutoHideScrollbar.tsx index 4f42a7964..549fbf459 100644 --- a/src/components/structures/AutoHideScrollbar.tsx +++ b/src/components/structures/AutoHideScrollbar.tsx @@ -1,18 +1,10 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/structures/AutocompleteInput.tsx b/src/components/structures/AutocompleteInput.tsx index 65d48e45f..71d81c4ce 100644 --- a/src/components/structures/AutocompleteInput.tsx +++ b/src/components/structures/AutocompleteInput.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useState, ReactNode, ChangeEvent, KeyboardEvent, useRef, ReactElement } from "react"; diff --git a/src/components/structures/BackdropPanel.tsx b/src/components/structures/BackdropPanel.tsx index d03748059..80c21235c 100644 --- a/src/components/structures/BackdropPanel.tsx +++ b/src/components/structures/BackdropPanel.tsx @@ -1,17 +1,8 @@ /* -Copyright 2021 New Vector Ltd +Copyright 2021-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { CSSProperties } from "react"; diff --git a/src/components/structures/ContextMenu.tsx b/src/components/structures/ContextMenu.tsx index bb19707ce..908589829 100644 --- a/src/components/structures/ContextMenu.tsx +++ b/src/components/structures/ContextMenu.tsx @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { CSSProperties, RefObject, SyntheticEvent, useRef, useState } from "react"; diff --git a/src/components/structures/EmbeddedPage.tsx b/src/components/structures/EmbeddedPage.tsx index 2a37e5385..5de1261ec 100644 --- a/src/components/structures/EmbeddedPage.tsx +++ b/src/components/structures/EmbeddedPage.tsx @@ -1,19 +1,10 @@ /* -Copyright 2016 OpenMarket Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Copyright 2019 New Vector Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/structures/ErrorMessage.tsx b/src/components/structures/ErrorMessage.tsx index 0f1d56eb8..f9292c499 100644 --- a/src/components/structures/ErrorMessage.tsx +++ b/src/components/structures/ErrorMessage.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/structures/FileDropTarget.tsx b/src/components/structures/FileDropTarget.tsx index 53b738bfc..b815d9aa6 100644 --- a/src/components/structures/FileDropTarget.tsx +++ b/src/components/structures/FileDropTarget.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useEffect, useState } from "react"; diff --git a/src/components/structures/FilePanel.tsx b/src/components/structures/FilePanel.tsx index 86a3e1cf8..bf596b17b 100644 --- a/src/components/structures/FilePanel.tsx +++ b/src/components/structures/FilePanel.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. Copyright 2016 OpenMarket Ltd -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/components/structures/GenericDropdownMenu.tsx b/src/components/structures/GenericDropdownMenu.tsx index 06854768d..3e3d41537 100644 --- a/src/components/structures/GenericDropdownMenu.tsx +++ b/src/components/structures/GenericDropdownMenu.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/structures/GenericErrorPage.tsx b/src/components/structures/GenericErrorPage.tsx index 4f348daf0..3ecd5d4db 100644 --- a/src/components/structures/GenericErrorPage.tsx +++ b/src/components/structures/GenericErrorPage.tsx @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/structures/HomePage.tsx b/src/components/structures/HomePage.tsx index 9d1f203d7..893a7d4d5 100644 --- a/src/components/structures/HomePage.tsx +++ b/src/components/structures/HomePage.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; diff --git a/src/components/structures/IndicatorScrollbar.tsx b/src/components/structures/IndicatorScrollbar.tsx index ce60ffc75..2c1db504b 100644 --- a/src/components/structures/IndicatorScrollbar.tsx +++ b/src/components/structures/IndicatorScrollbar.tsx @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/components/structures/InteractiveAuth.tsx b/src/components/structures/InteractiveAuth.tsx index 1ca2b6e5c..91e52a190 100644 --- a/src/components/structures/InteractiveAuth.tsx +++ b/src/components/structures/InteractiveAuth.tsx @@ -1,17 +1,9 @@ /* -Copyright 2017 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2017-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; @@ -28,6 +20,7 @@ import { logger } from "matrix-js-sdk/src/logger"; import getEntryComponentForLoginType, { ContinueKind, + CustomAuthType, IStageComponent, } from "../views/auth/InteractiveAuthEntryComponents"; import Spinner from "../views/elements/Spinner"; @@ -83,11 +76,11 @@ export interface InteractiveAuthProps { // Called when the stage changes, or the stage's phase changes. First // argument is the stage, second is the phase. Some stages do not have // phases and will be counted as 0 (numeric). - onStagePhaseChange?(stage: AuthType | null, phase: number): void; + onStagePhaseChange?(stage: AuthType | CustomAuthType | null, phase: number): void; } interface IState { - authStage?: AuthType; + authStage?: CustomAuthType | AuthType; stageState?: IStageStatus; busy: boolean; errorText?: string; diff --git a/src/components/structures/LargeLoader.tsx b/src/components/structures/LargeLoader.tsx index 9b1573c52..4a83d58ca 100644 --- a/src/components/structures/LargeLoader.tsx +++ b/src/components/structures/LargeLoader.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/structures/LeftPanel.tsx b/src/components/structures/LeftPanel.tsx index 7ef3bc4ba..f8cd0184d 100644 --- a/src/components/structures/LeftPanel.tsx +++ b/src/components/structures/LeftPanel.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; diff --git a/src/components/structures/LegacyCallEventGrouper.ts b/src/components/structures/LegacyCallEventGrouper.ts index e4f29be4b..d5c5a5a0f 100644 --- a/src/components/structures/LegacyCallEventGrouper.ts +++ b/src/components/structures/LegacyCallEventGrouper.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EventType, MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/structures/LoggedInView.tsx b/src/components/structures/LoggedInView.tsx index 755d2c115..84c43fc19 100644 --- a/src/components/structures/LoggedInView.tsx +++ b/src/components/structures/LoggedInView.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ClipboardEvent } from "react"; @@ -139,6 +131,7 @@ class LoggedInView extends React.Component { protected layoutWatcherRef?: string; protected compactLayoutWatcherRef?: string; protected backgroundImageWatcherRef?: string; + protected timezoneProfileUpdateRef?: string[]; protected resizer?: Resizer; public constructor(props: IProps) { @@ -190,6 +183,11 @@ class LoggedInView extends React.Component { this.refreshBackgroundImage, ); + this.timezoneProfileUpdateRef = [ + SettingsStore.watchSetting("userTimezonePublish", null, this.onTimezoneUpdate), + SettingsStore.watchSetting("userTimezone", null, this.onTimezoneUpdate), + ]; + this.resizer = this.createResizer(); this.resizer.attach(); @@ -198,6 +196,31 @@ class LoggedInView extends React.Component { this.refreshBackgroundImage(); } + private onTimezoneUpdate = async (): Promise => { + if (!SettingsStore.getValue("userTimezonePublish")) { + // Ensure it's deleted + try { + await this._matrixClient.deleteExtendedProfileProperty("us.cloke.msc4175.tz"); + } catch (ex) { + console.warn("Failed to delete timezone from user profile", ex); + } + return; + } + const currentTimezone = + SettingsStore.getValue("userTimezone") || + // If the timezone is empty, then use the browser timezone. + // eslint-disable-next-line new-cap + Intl.DateTimeFormat().resolvedOptions().timeZone; + if (!currentTimezone || typeof currentTimezone !== "string") { + return; + } + try { + await this._matrixClient.setExtendedProfileProperty("us.cloke.msc4175.tz", currentTimezone); + } catch (ex) { + console.warn("Failed to update user profile with current timezone", ex); + } + }; + public componentWillUnmount(): void { document.removeEventListener("keydown", this.onNativeKeyDown, false); LegacyCallHandler.instance.removeListener(LegacyCallHandlerEvent.CallState, this.onCallState); @@ -208,6 +231,7 @@ class LoggedInView extends React.Component { if (this.layoutWatcherRef) SettingsStore.unwatchSetting(this.layoutWatcherRef); if (this.compactLayoutWatcherRef) SettingsStore.unwatchSetting(this.compactLayoutWatcherRef); if (this.backgroundImageWatcherRef) SettingsStore.unwatchSetting(this.backgroundImageWatcherRef); + this.timezoneProfileUpdateRef?.forEach((s) => SettingsStore.unwatchSetting(s)); this.resizer?.detach(); } diff --git a/src/components/structures/MainSplit.tsx b/src/components/structures/MainSplit.tsx index 64b2e5c04..282ec69e1 100644 --- a/src/components/structures/MainSplit.tsx +++ b/src/components/structures/MainSplit.tsx @@ -1,18 +1,10 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index c1d1396ce..5d52069fc 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015-2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; @@ -143,13 +135,15 @@ import { checkSessionLockFree, getSessionLock } from "../../utils/SessionLock"; import { SessionLockStolenView } from "./auth/SessionLockStolenView"; import { ConfirmSessionLockTheftView } from "./auth/ConfirmSessionLockTheftView"; import { LoginSplashView } from "./auth/LoginSplashView"; -import TchapUrls from "../../../../../src/tchap/util/TchapUrls"; // :TCHAP: activate-cross-signing-and-secure-storage-react import { cleanUpDraftsIfRequired } from "../../DraftCleaner"; +import TchapUrls from "../../../../../src/tchap/util/TchapUrls"; // :TCHAP: activate-cross-signing-and-secure-storage-react +import EmailVerificationPage from "../../../../../src/tchap/components/views/sso/EmailVerificationPage"; // :TCHAP: sso-agentconnect-flow + // legacy export export { default as Views } from "../../Views"; -const AUTH_SCREENS = ["register", "login", "forgot_password", "start_sso", "start_cas", "welcome"]; +const AUTH_SCREENS = ["register", "mobile_register", "login", "forgot_password", "start_sso", "start_cas", "welcome"]; // Actions that are redirected through the onboarding process prior to being // re-dispatched. NOTE: some actions are non-trivial and would require @@ -198,6 +192,7 @@ interface IState { register_session_id?: string; // eslint-disable-next-line camelcase register_id_sid?: string; + isMobileRegistration?: boolean; // When showing Modal dialogs we need to set aria-hidden on the root app element // and disable it when there are no dialogs hideToSRUsers: boolean; @@ -252,6 +247,7 @@ export default class MatrixChat extends React.PureComponent { currentUserId: null, hideToSRUsers: false, + isMobileRegistration: false, syncError: null, // If the current syncing status is ERROR, the error object, otherwise null. resizeNotifier: new ResizeNotifier(), @@ -376,7 +372,7 @@ export default class MatrixChat extends React.PureComponent { // Create and start the client // accesses the new credentials just set in storage during attemptDelegatedAuthLogin // and sets logged in state - await Lifecycle.restoreFromLocalStorage({ ignoreGuest: true }); + await Lifecycle.restoreSessionFromStorage({ ignoreGuest: true }); await this.postLoginSetup(); return; } @@ -659,6 +655,9 @@ export default class MatrixChat extends React.PureComponent { case "require_registration": startAnyRegistrationFlow(payload as any); break; + case "start_mobile_registration": + this.startRegistration(payload.params || {}, true); + break; case "start_registration": if (Lifecycle.isSoftLogout()) { this.onSoftLogout(); @@ -946,6 +945,15 @@ export default class MatrixChat extends React.PureComponent { true, ); break; + // :TCHAP: sso-agentconnect-flow + case Action.EmailPrecheckSSO: + if (Lifecycle.isSoftLogout()) { + this.onSoftLogout(); + break; + } + this.viewEmailPrecheckSSO(); + break; + // end :TCHAP: } }; @@ -955,8 +963,12 @@ export default class MatrixChat extends React.PureComponent { }); } - private async startRegistration(params: { [key: string]: string }): Promise { - if (!SettingsStore.getValue(UIFeature.Registration)) { + private async startRegistration(params: { [key: string]: string }, isMobileRegistration?: boolean): Promise { + // If registration is disabled or mobile registration is requested but not enabled in settings redirect to the welcome screen + if ( + !SettingsStore.getValue(UIFeature.Registration) || + (isMobileRegistration && !SettingsStore.getValue("Registration.mobileRegistrationHelper")) + ) { this.showScreen("welcome"); return; } @@ -965,9 +977,16 @@ export default class MatrixChat extends React.PureComponent { view: Views.REGISTER, }; - // Only honour params if they are all present, otherwise we reset - // HS and IS URLs when switching to registration. - if (params.client_secret && params.session_id && params.hs_url && params.is_url && params.sid) { + if (isMobileRegistration && params.hs_url) { + try { + const config = await AutoDiscoveryUtils.validateServerConfigWithStaticUrls(params.hs_url); + newState.serverConfig = config; + } catch (err) { + logger.warn("Failed to load hs_url param:", params.hs_url); + } + } else if (params.client_secret && params.session_id && params.hs_url && params.is_url && params.sid) { + // Only honour params if they are all present, otherwise we reset + // HS and IS URLs when switching to registration. newState.serverConfig = await AutoDiscoveryUtils.validateServerConfigWithStaticUrls( params.hs_url, params.is_url, @@ -987,10 +1006,12 @@ export default class MatrixChat extends React.PureComponent { newState.register_id_sid = params.sid; } + newState.isMobileRegistration = isMobileRegistration; + this.setStateForNewView(newState); ThemeController.isLogin = true; this.themeWatcher.recheck(); - this.notifyNewScreen("register"); + this.notifyNewScreen(isMobileRegistration ? "mobile_register" : "register"); } // switch view to the given room @@ -1104,6 +1125,17 @@ export default class MatrixChat extends React.PureComponent { this.themeWatcher.recheck(); } + // :TCHAP: sso-agentconnect-flow + private viewEmailPrecheckSSO() { + this.setStateForNewView({ + view: Views.EMAIL_PRECHECK_SSO + }); + this.notifyNewScreen("email-precheck-sso"); + ThemeController.isLogin = true; + this.themeWatcher.recheck(); + } + // end :TCHAP: + private viewHome(justRegistered = false): void { // The home page requires the "logged in" view, so we'll set that. this.setStateForNewView({ @@ -1739,6 +1771,11 @@ export default class MatrixChat extends React.PureComponent { params: params, }); PerformanceMonitor.instance.start(PerformanceEntryNames.REGISTER); + } else if (screen === "mobile_register") { + dis.dispatch({ + action: "start_mobile_registration", + params: params, + }); } else if (screen === "login") { dis.dispatch({ action: "start_login", @@ -1875,6 +1912,13 @@ export default class MatrixChat extends React.PureComponent { userId: userId, subAction: params?.action, }); + // :TCHAP: sso-agentconnect-flow + } else if (screen = "email-precheck-sso") { + dis.dispatch({ + action: "email_precheck_sso", + params + }); + // end :TCHAP: } else { logger.info(`Ignoring showScreen for '${screen}'`); } @@ -2017,7 +2061,9 @@ export default class MatrixChat extends React.PureComponent { if ( initialScreenAfterLogin && // XXX: workaround for https://github.com/vector-im/element-web/issues/11643 causing a login-loop - !["welcome", "login", "register", "start_sso", "start_cas"].includes(initialScreenAfterLogin.screen) + // :TCHAP: sso-agentconnect-flow !["welcome", "login", "register", "start_sso", "start_cas"].includes(initialScreenAfterLogin.screen) + !["welcome", "login", "register", "start_sso", "start_cas", "email-precheck-sso"].includes(initialScreenAfterLogin.screen) + // end :TCHAP: ) { fragmentAfterLogin = `/${initialScreenAfterLogin.screen}`; } @@ -2098,6 +2144,7 @@ export default class MatrixChat extends React.PureComponent { onServerConfigChange={this.onServerConfigChange} defaultDeviceDisplayName={this.props.defaultDeviceDisplayName} fragmentAfterLogin={fragmentAfterLogin} + mobileRegister={this.state.isMobileRegistration} {...this.getServerProperties()} /> ); @@ -2137,6 +2184,10 @@ export default class MatrixChat extends React.PureComponent { view = => this.onShowPostLoginScreen(useCase)} />; } else if (this.state.view === Views.LOCK_STOLEN) { view = ; + // :TCHAP: sso-agentconnect-flow + } else if (this.state.view === Views.EMAIL_PRECHECK_SSO) { + view = ; + // end :TCHAP: } else { logger.error(`Unknown view ${this.state.view}`); return null; diff --git a/src/components/structures/MatrixClientContextProvider.tsx b/src/components/structures/MatrixClientContextProvider.tsx index 2b675f855..a42623f89 100644 --- a/src/components/structures/MatrixClientContextProvider.tsx +++ b/src/components/structures/MatrixClientContextProvider.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { PropsWithChildren, useEffect, useState } from "react"; diff --git a/src/components/structures/MessagePanel.tsx b/src/components/structures/MessagePanel.tsx index 07b600484..cc3d10f2b 100644 --- a/src/components/structures/MessagePanel.tsx +++ b/src/components/structures/MessagePanel.tsx @@ -1,17 +1,9 @@ /* -Copyright 2016 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, ReactNode, TransitionEvent } from "react"; @@ -47,7 +39,7 @@ import { RoomPermalinkCreator } from "../../utils/permalinks/Permalinks"; import EditorStateTransfer from "../../utils/EditorStateTransfer"; import { Action } from "../../dispatcher/actions"; import { getEventDisplayInfo } from "../../utils/EventRenderingUtils"; -import { IReadReceiptInfo } from "../views/rooms/ReadReceiptMarker"; +import { IReadReceiptPosition } from "../views/rooms/ReadReceiptMarker"; import { haveRendererForEvent } from "../../events/EventTileFactory"; import { editorRoomKey } from "../../Editing"; import { hasThreadSummary } from "../../utils/EventUtils"; @@ -213,7 +205,7 @@ export default class MessagePanel extends React.Component { // opaque readreceipt info for each userId; used by ReadReceiptMarker // to manage its animations - private readReceiptMap: { [userId: string]: IReadReceiptInfo } = {}; + private readReceiptMap: { [userId: string]: IReadReceiptPosition } = {}; // Track read receipts by event ID. For each _shown_ event ID, we store // the list of read receipts to display: diff --git a/src/components/structures/NonUrgentToastContainer.tsx b/src/components/structures/NonUrgentToastContainer.tsx index f5f5b29d6..2eca6db93 100644 --- a/src/components/structures/NonUrgentToastContainer.tsx +++ b/src/components/structures/NonUrgentToastContainer.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; diff --git a/src/components/structures/NotificationPanel.tsx b/src/components/structures/NotificationPanel.tsx index 7c8fd71b7..a569a0638 100644 --- a/src/components/structures/NotificationPanel.tsx +++ b/src/components/structures/NotificationPanel.tsx @@ -1,17 +1,9 @@ /* -Copyright 2016 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/structures/PictureInPictureDragger.tsx b/src/components/structures/PictureInPictureDragger.tsx index fc7e62028..fe8badd99 100644 --- a/src/components/structures/PictureInPictureDragger.tsx +++ b/src/components/structures/PictureInPictureDragger.tsx @@ -1,17 +1,8 @@ /* -Copyright 2021-2022 New Vector Ltd +Copyright 2021-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/components/structures/PipContainer.tsx b/src/components/structures/PipContainer.tsx index a7676f5bb..731e720b1 100644 --- a/src/components/structures/PipContainer.tsx +++ b/src/components/structures/PipContainer.tsx @@ -1,17 +1,9 @@ /* -Copyright 2017 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2017-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { MutableRefObject, ReactNode, useContext, useRef } from "react"; diff --git a/src/components/structures/ReleaseAnnouncement.tsx b/src/components/structures/ReleaseAnnouncement.tsx index cc74c3b05..b8fc42d91 100644 --- a/src/components/structures/ReleaseAnnouncement.tsx +++ b/src/components/structures/ReleaseAnnouncement.tsx @@ -1,19 +1,9 @@ /* - * + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps, JSX, PropsWithChildren } from "react"; diff --git a/src/components/structures/RightPanel.tsx b/src/components/structures/RightPanel.tsx index 8f1ba7aec..d4014f6aa 100644 --- a/src/components/structures/RightPanel.tsx +++ b/src/components/structures/RightPanel.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2015-2022 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2015 - 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent } from "react"; @@ -25,7 +17,6 @@ import RightPanelStore from "../../stores/right-panel/RightPanelStore"; import MatrixClientContext from "../../contexts/MatrixClientContext"; import RoomSummaryCard from "../views/right_panel/RoomSummaryCard"; import WidgetCard from "../views/right_panel/WidgetCard"; -import SettingsStore from "../../settings/SettingsStore"; import MemberList from "../views/rooms/MemberList"; import UserInfo from "../views/right_panel/UserInfo"; import ThirdPartyMemberInfo from "../views/rooms/ThirdPartyMemberInfo"; @@ -228,7 +219,7 @@ export default class RightPanel extends React.Component { break; case RightPanelPhases.PinnedMessages: - if (!!this.props.room && SettingsStore.getValue("feature_pinning")) { + if (!!this.props.room) { card = ( { ); return ( - + {icon} {!this.props.isMinimized && (
{_t("action|search")}
diff --git a/src/components/structures/RoomSearchView.tsx b/src/components/structures/RoomSearchView.tsx index 5b8270e3f..e51235e8a 100644 --- a/src/components/structures/RoomSearchView.tsx +++ b/src/components/structures/RoomSearchView.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { forwardRef, useCallback, useContext, useEffect, useRef, useState } from "react"; diff --git a/src/components/structures/RoomStatusBar.tsx b/src/components/structures/RoomStatusBar.tsx index 85419c3be..9a1b42290 100644 --- a/src/components/structures/RoomStatusBar.tsx +++ b/src/components/structures/RoomStatusBar.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/structures/RoomStatusBarUnsentMessages.tsx b/src/components/structures/RoomStatusBarUnsentMessages.tsx index 38dbae281..ab356405b 100644 --- a/src/components/structures/RoomStatusBarUnsentMessages.tsx +++ b/src/components/structures/RoomStatusBarUnsentMessages.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement, ReactNode } from "react"; diff --git a/src/components/structures/RoomView.tsx b/src/components/structures/RoomView.tsx index 70ee16b54..b56172be4 100644 --- a/src/components/structures/RoomView.tsx +++ b/src/components/structures/RoomView.tsx @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd +Copyright 2024 New Vector Ltd. +Copyright 2019-2023 The Matrix.org Foundation C.I.C. Copyright 2018, 2019 New Vector Ltd -Copyright 2019 - 2023 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2017 Vector Creations Ltd +Copyright 2015, 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, createRef, ReactElement, ReactNode, RefObject, useContext } from "react"; @@ -47,6 +39,7 @@ import { ViewRoomOpts } from "@matrix-org/react-sdk-module-api/lib/lifecycles/Ro import shouldHideEvent from "../../shouldHideEvent"; import { _t } from "../../languageHandler"; +import * as TimezoneHandler from "../../TimezoneHandler"; import { RoomPermalinkCreator } from "../../utils/permalinks/Permalinks"; import ResizeNotifier from "../../utils/ResizeNotifier"; import ContentMessages from "../../ContentMessages"; @@ -133,6 +126,7 @@ import { SubmitAskToJoinPayload } from "../../dispatcher/payloads/SubmitAskToJoi import RightPanelStore from "../../stores/right-panel/RightPanelStore"; import { onView3pidInvite } from "../../stores/right-panel/action-handlers"; import RoomSearchAuxPanel from "../views/rooms/RoomSearchAuxPanel"; +import { PinnedMessageBanner } from "../views/rooms/PinnedMessageBanner"; const DEBUG = false; const PREVENT_MULTIPLE_JITSI_WITHIN = 30_000; @@ -227,6 +221,7 @@ export interface IRoomState { lowBandwidth: boolean; alwaysShowTimestamps: boolean; showTwelveHourTimestamps: boolean; + userTimezone: string | undefined; readMarkerInViewThresholdMs: number; readMarkerOutOfViewThresholdMs: number; showHiddenEvents: boolean; @@ -454,6 +449,7 @@ export class RoomView extends React.Component { lowBandwidth: SettingsStore.getValue("lowBandwidth"), alwaysShowTimestamps: SettingsStore.getValue("alwaysShowTimestamps"), showTwelveHourTimestamps: SettingsStore.getValue("showTwelveHourTimestamps"), + userTimezone: TimezoneHandler.getUserTimezone(), readMarkerInViewThresholdMs: SettingsStore.getValue("readMarkerInViewThresholdMs"), readMarkerOutOfViewThresholdMs: SettingsStore.getValue("readMarkerOutOfViewThresholdMs"), showHiddenEvents: SettingsStore.getValue("showHiddenEventsInTimeline"), @@ -511,6 +507,9 @@ export class RoomView extends React.Component { SettingsStore.watchSetting("showTwelveHourTimestamps", null, (...[, , , value]) => this.setState({ showTwelveHourTimestamps: value as boolean }), ), + SettingsStore.watchSetting(TimezoneHandler.USER_TIMEZONE_KEY, null, (...[, , , value]) => + this.setState({ userTimezone: value as string }), + ), SettingsStore.watchSetting("readMarkerInViewThresholdMs", null, (...[, , , value]) => this.setState({ readMarkerInViewThresholdMs: value as number }), ), @@ -615,10 +614,7 @@ export class RoomView extends React.Component { }; private getMainSplitContentType = (room: Room): MainSplitContentType => { - if ( - (SettingsStore.getValue("feature_group_calls") && this.context.roomViewStore.isViewingCall()) || - isVideoRoom(room) - ) { + if (this.context.roomViewStore.isViewingCall() || isVideoRoom(room)) { return MainSplitContentType.Call; } if (this.context.widgetLayoutStore.hasMaximisedWidget(room)) { @@ -1365,7 +1361,7 @@ export class RoomView extends React.Component { if (containsEmoji(ev.getContent(), effect.emojis) || ev.getContent().msgtype === effect.msgType) { // For initial threads launch, chat effects are disabled see #19731 if (!ev.isRelation(THREAD_RELATION_TYPE.name)) { - dis.dispatch({ action: `effects.${effect.command}` }); + dis.dispatch({ action: `effects.${effect.command}`, event: ev }); } } }); @@ -2184,10 +2180,7 @@ export class RoomView extends React.Component { } const myMembership = this.state.room.getMyMembership(); - if ( - isVideoRoom(this.state.room) && - !(SettingsStore.getValue("feature_video_rooms") && myMembership === KnownMembership.Join) - ) { + if (isVideoRoom(this.state.room) && myMembership !== KnownMembership.Join) { return (
@@ -2409,6 +2402,10 @@ export class RoomView extends React.Component { ); + const pinnedMessageBanner = ( + + ); + let messageComposer; const showComposer = // joined and not showing search results @@ -2518,9 +2515,15 @@ export class RoomView extends React.Component { mx_RoomView_timeline_rr_enabled: this.state.showReadReceipts, }); + let { mainSplitContentType } = this.state; + if (this.state.search) { + // When in the middle of a search force the main split content type to timeline + mainSplitContentType = MainSplitContentType.Timeline; + } + const mainClasses = classNames("mx_RoomView", { mx_RoomView_inCall: Boolean(activeCall), - mx_RoomView_immersive: this.state.mainSplitContentType !== MainSplitContentType.Timeline, + mx_RoomView_immersive: mainSplitContentType !== MainSplitContentType.Timeline, }); const showChatEffects = SettingsStore.getValue("showChatEffects"); @@ -2528,7 +2531,7 @@ export class RoomView extends React.Component { let mainSplitBody: JSX.Element | undefined; let mainSplitContentClassName: string | undefined; // Decide what to show in the main split - switch (this.state.mainSplitContentType) { + switch (mainSplitContentType) { case MainSplitContentType.Timeline: mainSplitContentClassName = "mx_MainSplit_timeline"; mainSplitBody = ( @@ -2537,6 +2540,7 @@ export class RoomView extends React.Component { )} {auxPanel} + {pinnedMessageBanner}
{topUnreadMessagesBar} @@ -2591,7 +2595,7 @@ export class RoomView extends React.Component { let viewingCall = false; // Simplify the header for other main split types - switch (this.state.mainSplitContentType) { + switch (mainSplitContentType) { case MainSplitContentType.MaximisedWidget: excludedRightPanelPhaseButtons = []; onAppsClick = null; diff --git a/src/components/structures/ScrollPanel.tsx b/src/components/structures/ScrollPanel.tsx index 6d7672629..6c0da3018 100644 --- a/src/components/structures/ScrollPanel.tsx +++ b/src/components/structures/ScrollPanel.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, CSSProperties, ReactNode } from "react"; diff --git a/src/components/structures/SearchBox.tsx b/src/components/structures/SearchBox.tsx index 39d870044..323d3c855 100644 --- a/src/components/structures/SearchBox.tsx +++ b/src/components/structures/SearchBox.tsx @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, HTMLProps } from "react"; diff --git a/src/components/structures/SpaceHierarchy.tsx b/src/components/structures/SpaceHierarchy.tsx index fd82b410a..dc16d248a 100644 --- a/src/components/structures/SpaceHierarchy.tsx +++ b/src/components/structures/SpaceHierarchy.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { diff --git a/src/components/structures/SpaceRoomView.tsx b/src/components/structures/SpaceRoomView.tsx index cbd12ec5a..c7c1f4dd3 100644 --- a/src/components/structures/SpaceRoomView.tsx +++ b/src/components/structures/SpaceRoomView.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021-2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EventType, RoomType, JoinRule, Preset, Room, RoomEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/structures/SplashPage.tsx b/src/components/structures/SplashPage.tsx index 76d593997..6ca20fdb3 100644 --- a/src/components/structures/SplashPage.tsx +++ b/src/components/structures/SplashPage.tsx @@ -1,14 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/structures/TabbedView.tsx b/src/components/structures/TabbedView.tsx index c2ce7d728..7678dbf78 100644 --- a/src/components/structures/TabbedView.tsx +++ b/src/components/structures/TabbedView.tsx @@ -1,19 +1,11 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. +Copyright 2019, 2020 , 2024 The Matrix.org Foundation C.I.C. Copyright 2019 New Vector Ltd -Copyright 2019, 2020, 2024 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2017 Travis Ralston -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; diff --git a/src/components/structures/ThreadPanel.tsx b/src/components/structures/ThreadPanel.tsx index 792c97bc5..4206b4f7f 100644 --- a/src/components/structures/ThreadPanel.tsx +++ b/src/components/structures/ThreadPanel.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Optional } from "matrix-events-sdk"; diff --git a/src/components/structures/ThreadView.tsx b/src/components/structures/ThreadView.tsx index f2d775464..e5c1ccb26 100644 --- a/src/components/structures/ThreadView.tsx +++ b/src/components/structures/ThreadView.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, KeyboardEvent } from "react"; diff --git a/src/components/structures/TimelinePanel.tsx b/src/components/structures/TimelinePanel.tsx index 976c00e2f..f4c9b639a 100644 --- a/src/components/structures/TimelinePanel.tsx +++ b/src/components/structures/TimelinePanel.tsx @@ -1,17 +1,9 @@ /* -Copyright 2016 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, ReactNode } from "react"; diff --git a/src/components/structures/ToastContainer.tsx b/src/components/structures/ToastContainer.tsx index 43c8f13e2..8c572442a 100644 --- a/src/components/structures/ToastContainer.tsx +++ b/src/components/structures/ToastContainer.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; diff --git a/src/components/structures/UploadBar.tsx b/src/components/structures/UploadBar.tsx index 267cfc2f8..93ce6d6bf 100644 --- a/src/components/structures/UploadBar.tsx +++ b/src/components/structures/UploadBar.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015, 2016, 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015, 2016 , 2019, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/structures/UserMenu.tsx b/src/components/structures/UserMenu.tsx index 825779067..41e3235f3 100644 --- a/src/components/structures/UserMenu.tsx +++ b/src/components/structures/UserMenu.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, ReactNode } from "react"; diff --git a/src/components/structures/UserView.tsx b/src/components/structures/UserView.tsx index 7aa2d92d0..4647c24b2 100644 --- a/src/components/structures/UserView.tsx +++ b/src/components/structures/UserView.tsx @@ -1,18 +1,9 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/structures/ViewSource.tsx b/src/components/structures/ViewSource.tsx index edda7bd9d..3aba3be47 100644 --- a/src/components/structures/ViewSource.tsx +++ b/src/components/structures/ViewSource.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2015, 2016, 2019, 2023 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 , 2019, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/structures/WaitingForThirdPartyRoomView.tsx b/src/components/structures/WaitingForThirdPartyRoomView.tsx index 7bd176c61..fd21ebeb0 100644 --- a/src/components/structures/WaitingForThirdPartyRoomView.tsx +++ b/src/components/structures/WaitingForThirdPartyRoomView.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { RefObject } from "react"; diff --git a/src/components/structures/auth/CompleteSecurity.tsx b/src/components/structures/auth/CompleteSecurity.tsx index 3034184a5..548f690d0 100644 --- a/src/components/structures/auth/CompleteSecurity.tsx +++ b/src/components/structures/auth/CompleteSecurity.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -22,6 +14,7 @@ import SetupEncryptionBody from "./SetupEncryptionBody"; import AccessibleButton from "../../views/elements/AccessibleButton"; import CompleteSecurityBody from "../../views/auth/CompleteSecurityBody"; import AuthPage from "../../views/auth/AuthPage"; +import SdkConfig from "../../../SdkConfig"; interface IProps { onFinished: () => void; @@ -92,12 +85,14 @@ export default class CompleteSecurity extends React.Component { throw new Error(`Unknown phase ${phase}`); } + const forceVerification = SdkConfig.get("force_verification") ?? false; + let skipButton; - if (phase === Phase.Intro || phase === Phase.ConfirmReset) { + + if (!forceVerification && (phase === Phase.Intro || phase === Phase.ConfirmReset)) { // :Tchap: cross-signing-ui - Condition to skip Phase.ConfirmSkip and its "Are you sure" modal after login for csss const tchapOnSkipClick = phase === Phase.Intro ? this.props.onFinished : this.onSkipClick; // end :Tchap: - skipButton = ( // eslint-disable-next-line @typescript-eslint/naming-convention "m.login.cas": () => this.renderSsoStep("cas"), // eslint-disable-next-line @typescript-eslint/naming-convention - "m.login.sso": () => this.renderSsoStep("sso"), + // :TCHAP: sso-agentconnect-flow + // "m.login.sso": () => this.renderSsoStep("sso"), "oidcNativeFlow": () => this.renderOidcNativeStep(), }; } diff --git a/src/components/structures/auth/LoginSplashView.tsx b/src/components/structures/auth/LoginSplashView.tsx index 2ae13ce14..bec3cdbbc 100644 --- a/src/components/structures/auth/LoginSplashView.tsx +++ b/src/components/structures/auth/LoginSplashView.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015-2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/structures/auth/Registration.tsx b/src/components/structures/auth/Registration.tsx index 9d72c1d92..8639f81a2 100644 --- a/src/components/structures/auth/Registration.tsx +++ b/src/components/structures/auth/Registration.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { @@ -57,7 +49,8 @@ import { Features } from "../../../settings/Settings"; import { startOidcLogin } from "../../../utils/oidc/authorize"; import TchapUtils from '../../../../../../src/tchap/util/TchapUtils'; // :TCHAP: registration-for-mainlining -import TchapUrls from "../../../../../../src/tchap/util/TchapUrls"; +import TchapUIFeature from "../../../../../../src/tchap/util/TchapUIFeature"; // :TCHAP: sso-agentconnect-flow +import ProconnectButton from "../../../../../../src/tchap/components/views/sso/ProconnectButton"; // :TCHAP: sso-agentconnect-flow const debuglog = (...args: any[]): void => { if (SettingsStore.getValue("debug_registration")) { @@ -65,6 +58,13 @@ const debuglog = (...args: any[]): void => { } }; +export interface MobileRegistrationResponse { + user_id: string; + home_server: string; + access_token: string; + device_id: string; +} + interface IProps { serverConfig: ValidatedServerConfig; defaultDeviceDisplayName?: string; @@ -74,7 +74,7 @@ interface IProps { sessionId?: string; idSid?: string; fragmentAfterLogin?: string; - + mobileRegister?: boolean; // Called when the user has logged in. Params: // - object with userId, deviceId, homeserverUrl, identityServerUrl, accessToken // - The user's password, if available and applicable (may be cached in memory @@ -439,18 +439,33 @@ export default class Registration extends React.Component { debuglog("Registration: ui auth finished:", { hasEmail, hasAccessToken }); // don’t log in if we found a session for a different user if (hasAccessToken && !newState.differentLoggedInUserId) { - await this.props.onLoggedIn( - { - userId, - deviceId: (response as RegisterResponse).device_id!, - homeserverUrl: this.state.matrixClient.getHomeserverUrl(), - identityServerUrl: this.state.matrixClient.getIdentityServerUrl(), - accessToken, - }, - this.state.formVals.password!, - ); + if (this.props.mobileRegister) { + const mobileResponse: MobileRegistrationResponse = { + user_id: userId, + home_server: this.state.matrixClient.getHomeserverUrl(), + access_token: accessToken, + device_id: (response as RegisterResponse).device_id!, + }; + const event = new CustomEvent("mobileregistrationresponse", { + detail: mobileResponse, + }); + window.dispatchEvent(event); + newState.busy = false; + newState.completedNoSignin = true; + } else { + await this.props.onLoggedIn( + { + userId, + deviceId: (response as RegisterResponse).device_id!, + homeserverUrl: this.state.matrixClient.getHomeserverUrl(), + identityServerUrl: this.state.matrixClient.getIdentityServerUrl(), + accessToken, + }, + this.state.formVals.password!, + ); - this.setupPushers(); + this.setupPushers(); + } } else { newState.busy = false; newState.completedNoSignin = true; @@ -592,39 +607,47 @@ export default class Registration extends React.Component { ); } else if (this.state.matrixClient && this.state.flows.length) { let ssoSection: JSX.Element | undefined; - if (this.state.ssoFlow) { - let continueWithSection; - const providers = this.state.ssoFlow.identity_providers || []; - // when there is only a single (or 0) providers we show a wide button with `Continue with X` text - if (providers.length > 1) { - // i18n: ssoButtons is a placeholder to help translators understand context - continueWithSection = ( -

- {_t("auth|continue_with_sso", { ssoButtons: "" }).trim()} -

- ); - } - - // i18n: ssoButtons & usernamePassword are placeholders to help translators understand context - ssoSection = ( - - {continueWithSection} - -

- {_t("auth|sso_or_username_password", { - ssoButtons: "", - usernamePassword: "", - }).trim()} -

-
- ); + // :TCHAP: sso-agentconnect-flow + // if (!this.props.mobileRegister && this.state.ssoFlow) { + // let continueWithSection; + // const providers = this.state.ssoFlow.identity_providers || []; + // // when there is only a single (or 0) providers we show a wide button with `Continue with X` text + // if (providers.length > 1) { + // // i18n: ssoButtons is a placeholder to help translators understand context + // continueWithSection = ( + //

+ // {_t("auth|continue_with_sso", { ssoButtons: "" }).trim()} + //

+ // ); + // } + + // // i18n: ssoButtons & usernamePassword are placeholders to help translators understand context + // ssoSection = ( + // + // {continueWithSection} + // + //

+ // {_t("auth|sso_or_username_password", { + // ssoButtons: "", + // usernamePassword: "", + // }).trim()} + //

+ //
+ // ); + if (!this.props.mobileRegister && this.state.ssoFlow && TchapUIFeature.isSSOFlowActive()) { + ssoSection = <> + +

{_t("auth|sso|or")}

+ } + // } + // end :TCHAP: return ( @@ -640,6 +663,7 @@ export default class Registration extends React.Component { serverConfig={this.props.serverConfig} canSubmit={!this.state.serverErrorIsFatal} matrixClient={this.state.matrixClient} + mobileRegister={this.props.mobileRegister} /> ); @@ -694,7 +718,9 @@ export default class Registration extends React.Component { let body; if (this.state.completedNoSignin) { let regDoneText; - if (this.state.differentLoggedInUserId) { + if (this.props.mobileRegister) { + regDoneText = undefined; + } else if (this.state.differentLoggedInUserId) { regDoneText = (

@@ -751,6 +777,15 @@ export default class Registration extends React.Component { {regDoneText}

); + } else if (this.props.mobileRegister) { + body = ( + +

{_t("auth|mobile_create_account_title", { hsName: this.props.serverConfig.hsName })}

+ {errorText} + {serverDeadSection} + {this.renderRegisterComponent()} +
+ ); } else { body = ( @@ -786,7 +821,13 @@ export default class Registration extends React.Component { ); } - + if (this.props.mobileRegister) { + return ( +
+ {body} +
+ ); + } return ( diff --git a/src/components/structures/auth/SessionLockStolenView.tsx b/src/components/structures/auth/SessionLockStolenView.tsx index 7b82557ea..edb20188a 100644 --- a/src/components/structures/auth/SessionLockStolenView.tsx +++ b/src/components/structures/auth/SessionLockStolenView.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/structures/auth/SetupEncryptionBody.tsx b/src/components/structures/auth/SetupEncryptionBody.tsx index 2b3954e19..94ebfdb8c 100644 --- a/src/components/structures/auth/SetupEncryptionBody.tsx +++ b/src/components/structures/auth/SetupEncryptionBody.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020-2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/structures/auth/SoftLogout.tsx b/src/components/structures/auth/SoftLogout.tsx index ca34e3830..4c02f818a 100644 --- a/src/components/structures/auth/SoftLogout.tsx +++ b/src/components/structures/auth/SoftLogout.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, SyntheticEvent } from "react"; diff --git a/src/components/structures/auth/forgot-password/CheckEmail.tsx b/src/components/structures/auth/forgot-password/CheckEmail.tsx index fb63fa68f..8396d56ff 100644 --- a/src/components/structures/auth/forgot-password/CheckEmail.tsx +++ b/src/components/structures/auth/forgot-password/CheckEmail.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; @@ -54,7 +46,7 @@ export const CheckEmail: React.FC = ({

{_t("auth|uia|email_auth_header")}

-

{_t("auth|check_email_explainer", { email: email }, { b: (t) => {t} })}

+

{_t("auth|check_email_explainer", { email: email }, { b: (t) => {t} })}

{_t("auth|check_email_wrong_email_prompt")} diff --git a/src/components/structures/auth/forgot-password/EnterEmail.tsx b/src/components/structures/auth/forgot-password/EnterEmail.tsx index 5fc51db95..36cfbe92b 100644 --- a/src/components/structures/auth/forgot-password/EnterEmail.tsx +++ b/src/components/structures/auth/forgot-password/EnterEmail.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, useRef } from "react"; @@ -66,7 +58,7 @@ export const EnterEmail: React.FC = ({

{_t("auth|enter_email_heading")}

{ /* :TCHAP: forgot-password - we don't display homeservers to users

- {_t("auth|enter_email_explainer", { homeserver }, { b: (t) => {t} })} + {_t("auth|enter_email_explainer", { homeserver }, { b: (t) => {t} })}

end :TCHAP: */ }
diff --git a/src/components/structures/auth/forgot-password/VerifyEmailModal.tsx b/src/components/structures/auth/forgot-password/VerifyEmailModal.tsx index fd461ddc5..238ddf2c3 100644 --- a/src/components/structures/auth/forgot-password/VerifyEmailModal.tsx +++ b/src/components/structures/auth/forgot-password/VerifyEmailModal.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; @@ -58,7 +50,7 @@ export const VerifyEmailModal: React.FC = ({ email, }, { - b: (sub) => {sub}, + b: (sub) => {sub}, }, )}

diff --git a/src/components/structures/auth/header/AuthHeaderContext.tsx b/src/components/structures/auth/header/AuthHeaderContext.tsx index 67b74e5c8..97d587f40 100644 --- a/src/components/structures/auth/header/AuthHeaderContext.tsx +++ b/src/components/structures/auth/header/AuthHeaderContext.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { createContext, Dispatch, ReducerAction, ReducerState } from "react"; diff --git a/src/components/structures/auth/header/AuthHeaderDisplay.tsx b/src/components/structures/auth/header/AuthHeaderDisplay.tsx index 2a6a8546c..479e982c9 100644 --- a/src/components/structures/auth/header/AuthHeaderDisplay.tsx +++ b/src/components/structures/auth/header/AuthHeaderDisplay.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { Fragment, PropsWithChildren, ReactNode, useContext } from "react"; diff --git a/src/components/structures/auth/header/AuthHeaderModifier.tsx b/src/components/structures/auth/header/AuthHeaderModifier.tsx index cfc138258..05313cda3 100644 --- a/src/components/structures/auth/header/AuthHeaderModifier.tsx +++ b/src/components/structures/auth/header/AuthHeaderModifier.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ReactNode, useContext, useEffect } from "react"; diff --git a/src/components/structures/auth/header/AuthHeaderProvider.tsx b/src/components/structures/auth/header/AuthHeaderProvider.tsx index ec6e04dbf..0bf502827 100644 --- a/src/components/structures/auth/header/AuthHeaderProvider.tsx +++ b/src/components/structures/auth/header/AuthHeaderProvider.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { isEqual } from "lodash"; diff --git a/src/components/structures/grouper/BaseGrouper.ts b/src/components/structures/grouper/BaseGrouper.ts index 5821797ad..fd8e3a59e 100644 --- a/src/components/structures/grouper/BaseGrouper.ts +++ b/src/components/structures/grouper/BaseGrouper.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ReactNode } from "react"; diff --git a/src/components/structures/grouper/CreationGrouper.tsx b/src/components/structures/grouper/CreationGrouper.tsx index fa91a1bd9..db4542e83 100644 --- a/src/components/structures/grouper/CreationGrouper.tsx +++ b/src/components/structures/grouper/CreationGrouper.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/structures/grouper/LateEventGrouper.ts b/src/components/structures/grouper/LateEventGrouper.ts index 67282e608..a248d1314 100644 --- a/src/components/structures/grouper/LateEventGrouper.ts +++ b/src/components/structures/grouper/LateEventGrouper.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/structures/grouper/MainGrouper.tsx b/src/components/structures/grouper/MainGrouper.tsx index b1137c172..72fd3fcdf 100644 --- a/src/components/structures/grouper/MainGrouper.tsx +++ b/src/components/structures/grouper/MainGrouper.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; @@ -26,7 +18,6 @@ import DateSeparator from "../../views/messages/DateSeparator"; import HistoryTile from "../../views/rooms/HistoryTile"; import EventListSummary from "../../views/elements/EventListSummary"; import { SeparatorKind } from "../../views/messages/TimelineSeparator"; -import SettingsStore from "../../../settings/SettingsStore"; const groupedStateEvents = [ EventType.RoomMember, @@ -99,7 +90,7 @@ export class MainGrouper extends BaseGrouper { return; } - if (ev.getType() === EventType.RoomPinnedEvents && !SettingsStore.getValue("feature_pinning")) { + if (ev.getType() === EventType.RoomPinnedEvents) { // If pinned messages are disabled, don't show the summary return; } diff --git a/src/components/structures/static-page-vars.ts b/src/components/structures/static-page-vars.ts index e49cd5f2f..8cd2fd4a2 100644 --- a/src/components/structures/static-page-vars.ts +++ b/src/components/structures/static-page-vars.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // We're importing via require specifically so the svg becomes a URI rather than a DOM element. diff --git a/src/components/utils/Box.tsx b/src/components/utils/Box.tsx index 03fffb90e..b48b13aa0 100644 --- a/src/components/utils/Box.tsx +++ b/src/components/utils/Box.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/utils/Flex.tsx b/src/components/utils/Flex.tsx index a84912cab..852ebb7e4 100644 --- a/src/components/utils/Flex.tsx +++ b/src/components/utils/Flex.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/audio_messages/AudioPlayer.tsx b/src/components/views/audio_messages/AudioPlayer.tsx index 9827022a8..885b1ecb8 100644 --- a/src/components/views/audio_messages/AudioPlayer.tsx +++ b/src/components/views/audio_messages/AudioPlayer.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/audio_messages/AudioPlayerBase.tsx b/src/components/views/audio_messages/AudioPlayerBase.tsx index ed8ed4518..70e30dccc 100644 --- a/src/components/views/audio_messages/AudioPlayerBase.tsx +++ b/src/components/views/audio_messages/AudioPlayerBase.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, ReactNode, RefObject } from "react"; diff --git a/src/components/views/audio_messages/Clock.tsx b/src/components/views/audio_messages/Clock.tsx index da0f863a5..56661c7a0 100644 --- a/src/components/views/audio_messages/Clock.tsx +++ b/src/components/views/audio_messages/Clock.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { HTMLProps } from "react"; diff --git a/src/components/views/audio_messages/DevicesContextMenu.tsx b/src/components/views/audio_messages/DevicesContextMenu.tsx index cabfa14fa..a88a28024 100644 --- a/src/components/views/audio_messages/DevicesContextMenu.tsx +++ b/src/components/views/audio_messages/DevicesContextMenu.tsx @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { MutableRefObject } from "react"; diff --git a/src/components/views/audio_messages/DurationClock.tsx b/src/components/views/audio_messages/DurationClock.tsx index 364fcb6c7..e49509814 100644 --- a/src/components/views/audio_messages/DurationClock.tsx +++ b/src/components/views/audio_messages/DurationClock.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/audio_messages/LiveRecordingClock.tsx b/src/components/views/audio_messages/LiveRecordingClock.tsx index 0c8c6603d..9569e9c11 100644 --- a/src/components/views/audio_messages/LiveRecordingClock.tsx +++ b/src/components/views/audio_messages/LiveRecordingClock.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/audio_messages/LiveRecordingWaveform.tsx b/src/components/views/audio_messages/LiveRecordingWaveform.tsx index 47a4d5884..6fdb72301 100644 --- a/src/components/views/audio_messages/LiveRecordingWaveform.tsx +++ b/src/components/views/audio_messages/LiveRecordingWaveform.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/audio_messages/PlayPauseButton.tsx b/src/components/views/audio_messages/PlayPauseButton.tsx index 2ffe62130..1053a89ee 100644 --- a/src/components/views/audio_messages/PlayPauseButton.tsx +++ b/src/components/views/audio_messages/PlayPauseButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/audio_messages/PlaybackClock.tsx b/src/components/views/audio_messages/PlaybackClock.tsx index e9f7a5c76..8de3cb71e 100644 --- a/src/components/views/audio_messages/PlaybackClock.tsx +++ b/src/components/views/audio_messages/PlaybackClock.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/audio_messages/PlaybackWaveform.tsx b/src/components/views/audio_messages/PlaybackWaveform.tsx index c0752371f..5f5928987 100644 --- a/src/components/views/audio_messages/PlaybackWaveform.tsx +++ b/src/components/views/audio_messages/PlaybackWaveform.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/audio_messages/RecordingPlayback.tsx b/src/components/views/audio_messages/RecordingPlayback.tsx index 98b82af50..7b00c59a1 100644 --- a/src/components/views/audio_messages/RecordingPlayback.tsx +++ b/src/components/views/audio_messages/RecordingPlayback.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/audio_messages/SeekBar.tsx b/src/components/views/audio_messages/SeekBar.tsx index 939e29df5..cbfab888b 100644 --- a/src/components/views/audio_messages/SeekBar.tsx +++ b/src/components/views/audio_messages/SeekBar.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, CSSProperties, ReactNode } from "react"; diff --git a/src/components/views/audio_messages/Waveform.tsx b/src/components/views/audio_messages/Waveform.tsx index ea3572022..e0a440f50 100644 --- a/src/components/views/audio_messages/Waveform.tsx +++ b/src/components/views/audio_messages/Waveform.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { CSSProperties } from "react"; diff --git a/src/components/views/auth/AuthBody.tsx b/src/components/views/auth/AuthBody.tsx index f9065678c..ea4deb4f1 100644 --- a/src/components/views/auth/AuthBody.tsx +++ b/src/components/views/auth/AuthBody.tsx @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/auth/AuthFooter.tsx b/src/components/views/auth/AuthFooter.tsx index cc429ca5e..c81617b9d 100644 --- a/src/components/views/auth/AuthFooter.tsx +++ b/src/components/views/auth/AuthFooter.tsx @@ -1,19 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/auth/AuthHeader.tsx b/src/components/views/auth/AuthHeader.tsx index 392a1bb18..a3a34d8e5 100644 --- a/src/components/views/auth/AuthHeader.tsx +++ b/src/components/views/auth/AuthHeader.tsx @@ -1,18 +1,9 @@ /* +Copyright 2019-2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/auth/AuthHeaderLogo.tsx b/src/components/views/auth/AuthHeaderLogo.tsx index c4a27deae..3ff11ba3f 100644 --- a/src/components/views/auth/AuthHeaderLogo.tsx +++ b/src/components/views/auth/AuthHeaderLogo.tsx @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/auth/AuthPage.tsx b/src/components/views/auth/AuthPage.tsx index 0cea32328..e9beb6d2a 100644 --- a/src/components/views/auth/AuthPage.tsx +++ b/src/components/views/auth/AuthPage.tsx @@ -1,19 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/auth/CaptchaForm.tsx b/src/components/views/auth/CaptchaForm.tsx index df0495c17..f216f004f 100644 --- a/src/components/views/auth/CaptchaForm.tsx +++ b/src/components/views/auth/CaptchaForm.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; @@ -71,6 +63,19 @@ export default class CaptchaForm extends React.Component { id?: string; @@ -30,6 +23,7 @@ interface IProps extends Omit { label: TranslationKey; labelRequired: TranslationKey; labelInvalid: TranslationKey; + tooltipAlignment?: Alignment; // When present, completely overrides the default validation rules. validationRules?: (fieldState: IFieldState) => Promise; @@ -85,6 +79,7 @@ class EmailField extends PureComponent { autoFocus={this.props.autoFocus} onChange={this.props.onChange} onValidate={this.onValidate} + tooltipAlignment={this.props.tooltipAlignment} /> ); } diff --git a/src/components/views/auth/InteractiveAuthEntryComponents.tsx b/src/components/views/auth/InteractiveAuthEntryComponents.tsx index d54b52c1a..44ccd3a30 100644 --- a/src/components/views/auth/InteractiveAuthEntryComponents.tsx +++ b/src/components/views/auth/InteractiveAuthEntryComponents.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2016-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; @@ -19,6 +11,8 @@ import { MatrixClient } from "matrix-js-sdk/src/matrix"; import { AuthType, AuthDict, IInputs, IStageStatus } from "matrix-js-sdk/src/interactive-auth"; import { logger } from "matrix-js-sdk/src/logger"; import React, { ChangeEvent, createRef, FormEvent, Fragment } from "react"; +import { Button, Text } from "@vector-im/compound-web"; +import PopOutIcon from "@vector-im/compound-design-tokens/assets/web/icons/pop-out"; import EmailPromptIcon from "../../../../res/img/element-icons/email-prompt.svg"; import { _t } from "../../../languageHandler"; @@ -29,6 +23,7 @@ import AccessibleButton, { AccessibleButtonKind, ButtonEvent } from "../elements import Field from "../elements/Field"; import Spinner from "../elements/Spinner"; import CaptchaForm from "./CaptchaForm"; +import { Flex } from "../../utils/Flex"; /* This file contains a collection of components which are used by the * InteractiveAuth to prompt the user to enter the information needed @@ -473,7 +468,7 @@ export class EmailIdentityAuthEntry extends React.Component< />

{_t("auth|uia|email", { - emailAddress: {this.props.inputs.emailAddress}, + emailAddress: {this.props.inputs.emailAddress}, })}

{this.state.requesting ? ( @@ -913,11 +908,11 @@ export class SSOAuthEntry extends React.Component { - private popupWindow: Window | null; - private fallbackButton = createRef(); +export class FallbackAuthEntry extends React.Component { + protected popupWindow: Window | null; + protected fallbackButton = createRef(); - public constructor(props: IAuthEntryProps) { + public constructor(props: IAuthEntryProps & T) { super(props); // we have to make the user click a button, as browsers will block @@ -975,6 +970,50 @@ export class FallbackAuthEntry extends React.Component { } } +export enum CustomAuthType { + // Workaround for MAS requiring non-UIA authentication for resetting cross-signing. + MasCrossSigningReset = "org.matrix.cross_signing_reset", +} + +export class MasUnlockCrossSigningAuthEntry extends FallbackAuthEntry<{ + stageParams?: { + url?: string; + }; +}> { + public static LOGIN_TYPE = CustomAuthType.MasCrossSigningReset; + + private onGoToAccountClick = (): void => { + if (!this.props.stageParams?.url) return; + this.popupWindow = window.open(this.props.stageParams.url, "_blank"); + }; + + private onRetryClick = (): void => { + this.props.submitAuthDict({}); + }; + + public render(): React.ReactNode { + return ( +
+ {_t("auth|uia|mas_cross_signing_reset_description")} + + + + +
+ ); + } +} + export interface IStageComponentProps extends IAuthEntryProps { stageParams?: Record; inputs?: IInputs; @@ -991,8 +1030,10 @@ export interface IStageComponent extends React.ComponentClass
  • {_t("auth|qr_code_login|select_qr_code", { - scanQRCode: {_t("auth|qr_code_login|scan_qr_code")}, + scanQRCode: {_t("auth|qr_code_login|scan_qr_code")}, })}
  • {_t("auth|qr_code_login|point_the_camera")}
  • diff --git a/src/components/views/auth/PassphraseConfirmField.tsx b/src/components/views/auth/PassphraseConfirmField.tsx index 794df041c..ec26099de 100644 --- a/src/components/views/auth/PassphraseConfirmField.tsx +++ b/src/components/views/auth/PassphraseConfirmField.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { PureComponent, RefCallback, RefObject } from "react"; @@ -19,6 +11,7 @@ import React, { PureComponent, RefCallback, RefObject } from "react"; import Field, { IInputProps } from "../elements/Field"; import withValidation, { IFieldState, IValidationResult } from "../elements/Validation"; import { _t, _td, TranslationKey } from "../../../languageHandler"; +import { Alignment } from "../elements/Tooltip"; interface IProps extends Omit { id?: string; @@ -30,7 +23,7 @@ interface IProps extends Omit { label: TranslationKey; labelRequired: TranslationKey; labelInvalid: TranslationKey; - + tooltipAlignment?: Alignment; onChange(ev: React.FormEvent): void; onValidate?(result: IValidationResult): void; } @@ -78,6 +71,7 @@ class PassphraseConfirmField extends PureComponent { onChange={this.props.onChange} onValidate={this.onValidate} autoFocus={this.props.autoFocus} + tooltipAlignment={this.props.tooltipAlignment} /> ); } diff --git a/src/components/views/auth/PassphraseField.tsx b/src/components/views/auth/PassphraseField.tsx index 80d689d9a..9ae6bb3f5 100644 --- a/src/components/views/auth/PassphraseField.tsx +++ b/src/components/views/auth/PassphraseField.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { PureComponent, RefCallback, RefObject } from "react"; @@ -24,6 +16,7 @@ import { _t, _td, TranslationKey } from "../../../languageHandler"; import Field, { IInputProps } from "../elements/Field"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; import TchapStrongPassword from "../../../../../../src/tchap/util/TchapStrongPassword"; +import { Alignment } from "../elements/Tooltip"; interface IProps extends Omit { autoFocus?: boolean; @@ -39,6 +32,7 @@ interface IProps extends Omit { labelEnterPassword: TranslationKey; labelStrongPassword: TranslationKey; labelAllowedButUnsafe: TranslationKey; + tooltipAlignment?: Alignment; onChange(ev: React.FormEvent): void; onValidate?(result: IValidationResult): void; @@ -123,6 +117,7 @@ class PassphraseField extends PureComponent { value={this.props.value} onChange={this.props.onChange} onValidate={this.onValidate} + tooltipAlignment={this.props.tooltipAlignment} /> ); } diff --git a/src/components/views/auth/PasswordLogin.tsx b/src/components/views/auth/PasswordLogin.tsx index 34899dee8..3c7ba951b 100644 --- a/src/components/views/auth/PasswordLogin.tsx +++ b/src/components/views/auth/PasswordLogin.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015, 2016, 2017, 2019 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015, 2016 , 2017, 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { SyntheticEvent } from "react"; diff --git a/src/components/views/auth/RegistrationForm.tsx b/src/components/views/auth/RegistrationForm.tsx index 564cf921b..593a9f3d4 100644 --- a/src/components/views/auth/RegistrationForm.tsx +++ b/src/components/views/auth/RegistrationForm.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2015, 2016, 2017, 2018, 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 , 2017, 2018, 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { BaseSyntheticEvent, ReactNode } from "react"; @@ -34,6 +26,7 @@ import RegistrationEmailPromptDialog from "../dialogs/RegistrationEmailPromptDia import CountryDropdown from "./CountryDropdown"; import PassphraseConfirmField from "./PassphraseConfirmField"; import { PosthogAnalytics } from "../../../PosthogAnalytics"; +import { Alignment } from "../elements/Tooltip"; enum RegistrationField { Email = "field_email", @@ -66,6 +59,7 @@ interface IProps { serverConfig: ValidatedServerConfig; canSubmit?: boolean; matrixClient: MatrixClient; + mobileRegister?: boolean; onRegisterClick(params: { username: string; @@ -450,6 +444,13 @@ export default class RegistrationForm extends React.PureComponent ); } @@ -479,6 +481,7 @@ export default class RegistrationForm extends React.PureComponent ); } @@ -493,6 +496,7 @@ export default class RegistrationForm extends React.PureComponent ); } @@ -537,6 +541,9 @@ export default class RegistrationForm extends React.PureComponent ); } @@ -568,6 +575,23 @@ export default class RegistrationForm extends React.PureComponent +
    {this.renderPassword()}
    +
    {this.renderPasswordConfirm()}
    + + ); + } else { + passwordFields = ( +
    + {this.renderPassword()} + {this.renderPasswordConfirm()} +
    + ); + } + return (
    @@ -582,10 +606,7 @@ export default class RegistrationForm extends React.PureComponent -
    - { this.renderPassword() } - { this.renderPasswordConfirm() } -
    + {passwordFields} { /* end :TCHAP: */} { /** :TCHAP: registration-for-mainlining - remove helper text, adds confusion since email=username in tchap. // emailHelperText */ } {registerButton} diff --git a/src/components/views/auth/Welcome.tsx b/src/components/views/auth/Welcome.tsx index 29e671156..2e1e3d83e 100644 --- a/src/components/views/auth/Welcome.tsx +++ b/src/components/views/auth/Welcome.tsx @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -24,6 +15,7 @@ import { UIFeature } from "../../../settings/UIFeature"; import LanguageSelector from "./LanguageSelector"; import EmbeddedPage from "../../structures/EmbeddedPage"; import { MATRIX_LOGO_HTML } from "../../structures/static-page-vars"; +import TchapUIFeature from "../../../../../../src/tchap/util/TchapUIFeature"; interface IProps {} @@ -47,7 +39,9 @@ export default class Welcome extends React.PureComponent { const brandingConfig = SdkConfig.getObject("branding"); const logoUrl = brandingConfig?.get("auth_header_logo_url") ?? "themes/element/img/logos/element-logo.svg"; replaceMap["$logoUrl"] = logoUrl; - pageUrl = "welcome.html"; + // :TCHAP: sso-agentconnect-flow - pageUrl = "welcome.html"; + pageUrl = TchapUIFeature.isSSOFlowActive() ? "welcome_sso.html" : "welcome.html"; + // end :TCHAP: } return ( diff --git a/src/components/views/avatars/BaseAvatar.tsx b/src/components/views/avatars/BaseAvatar.tsx index b35109f5d..db74d7b95 100644 --- a/src/components/views/avatars/BaseAvatar.tsx +++ b/src/components/views/avatars/BaseAvatar.tsx @@ -1,23 +1,15 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd -Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ -import React, { forwardRef, useCallback, useContext, useEffect, useState } from "react"; +import React, { AriaRole, forwardRef, useCallback, useContext, useEffect, useState } from "react"; import classNames from "classnames"; import { ClientEvent, SyncState } from "matrix-js-sdk/src/matrix"; import { Avatar } from "@vector-im/compound-web"; @@ -41,6 +33,7 @@ interface IProps { className?: string; tabIndex?: number; altText?: string; + role?: AriaRole; } const calculateUrls = (url?: string | null, urls?: string[], lowBandwidth = false): string[] => { diff --git a/src/components/views/avatars/DecoratedRoomAvatar.tsx b/src/components/views/avatars/DecoratedRoomAvatar.tsx index 7e8558890..72a7a0038 100644 --- a/src/components/views/avatars/DecoratedRoomAvatar.tsx +++ b/src/components/views/avatars/DecoratedRoomAvatar.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/avatars/MemberAvatar.tsx b/src/components/views/avatars/MemberAvatar.tsx index 15ff2f015..19df06a24 100644 --- a/src/components/views/avatars/MemberAvatar.tsx +++ b/src/components/views/avatars/MemberAvatar.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { forwardRef, ReactNode, Ref, useContext } from "react"; diff --git a/src/components/views/avatars/RoomAvatar.tsx b/src/components/views/avatars/RoomAvatar.tsx index 8380fb477..c839761fe 100644 --- a/src/components/views/avatars/RoomAvatar.tsx +++ b/src/components/views/avatars/RoomAvatar.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps } from "react"; diff --git a/src/components/views/avatars/SearchResultAvatar.tsx b/src/components/views/avatars/SearchResultAvatar.tsx index fe208492a..ad2b3dd66 100644 --- a/src/components/views/avatars/SearchResultAvatar.tsx +++ b/src/components/views/avatars/SearchResultAvatar.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/avatars/WidgetAvatar.tsx b/src/components/views/avatars/WidgetAvatar.tsx index 1fd2b7f6a..171b1b78b 100644 --- a/src/components/views/avatars/WidgetAvatar.tsx +++ b/src/components/views/avatars/WidgetAvatar.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps } from "react"; diff --git a/src/components/views/avatars/WithPresenceIndicator.tsx b/src/components/views/avatars/WithPresenceIndicator.tsx index 1d32a99e0..519575d0d 100644 --- a/src/components/views/avatars/WithPresenceIndicator.tsx +++ b/src/components/views/avatars/WithPresenceIndicator.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, useEffect, useState } from "react"; diff --git a/src/components/views/beacon/BeaconListItem.tsx b/src/components/views/beacon/BeaconListItem.tsx index 0ed6eb9f2..972a91c39 100644 --- a/src/components/views/beacon/BeaconListItem.tsx +++ b/src/components/views/beacon/BeaconListItem.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { HTMLProps, useContext } from "react"; diff --git a/src/components/views/beacon/BeaconMarker.tsx b/src/components/views/beacon/BeaconMarker.tsx index 6ac29c8a2..5f8f76ecf 100644 --- a/src/components/views/beacon/BeaconMarker.tsx +++ b/src/components/views/beacon/BeaconMarker.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, useContext } from "react"; diff --git a/src/components/views/beacon/BeaconStatus.tsx b/src/components/views/beacon/BeaconStatus.tsx index 6335bed1d..08c3797d3 100644 --- a/src/components/views/beacon/BeaconStatus.tsx +++ b/src/components/views/beacon/BeaconStatus.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { HTMLProps } from "react"; diff --git a/src/components/views/beacon/BeaconStatusTooltip.tsx b/src/components/views/beacon/BeaconStatusTooltip.tsx index 239fa419f..e69e1c6b8 100644 --- a/src/components/views/beacon/BeaconStatusTooltip.tsx +++ b/src/components/views/beacon/BeaconStatusTooltip.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext } from "react"; diff --git a/src/components/views/beacon/BeaconViewDialog.tsx b/src/components/views/beacon/BeaconViewDialog.tsx index 227ba221b..ec737baff 100644 --- a/src/components/views/beacon/BeaconViewDialog.tsx +++ b/src/components/views/beacon/BeaconViewDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useState, useEffect } from "react"; diff --git a/src/components/views/beacon/DialogOwnBeaconStatus.tsx b/src/components/views/beacon/DialogOwnBeaconStatus.tsx index 791edc665..56ffb5a1a 100644 --- a/src/components/views/beacon/DialogOwnBeaconStatus.tsx +++ b/src/components/views/beacon/DialogOwnBeaconStatus.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext } from "react"; diff --git a/src/components/views/beacon/DialogSidebar.tsx b/src/components/views/beacon/DialogSidebar.tsx index 0de94266d..638330b96 100644 --- a/src/components/views/beacon/DialogSidebar.tsx +++ b/src/components/views/beacon/DialogSidebar.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/beacon/LeftPanelLiveShareWarning.tsx b/src/components/views/beacon/LeftPanelLiveShareWarning.tsx index c0b4b324d..ac80067fa 100644 --- a/src/components/views/beacon/LeftPanelLiveShareWarning.tsx +++ b/src/components/views/beacon/LeftPanelLiveShareWarning.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/beacon/LiveTimeRemaining.tsx b/src/components/views/beacon/LiveTimeRemaining.tsx index 41698013c..89052b5df 100644 --- a/src/components/views/beacon/LiveTimeRemaining.tsx +++ b/src/components/views/beacon/LiveTimeRemaining.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback, useEffect, useState } from "react"; diff --git a/src/components/views/beacon/OwnBeaconStatus.tsx b/src/components/views/beacon/OwnBeaconStatus.tsx index 3adf20ce2..e84fa6d0b 100644 --- a/src/components/views/beacon/OwnBeaconStatus.tsx +++ b/src/components/views/beacon/OwnBeaconStatus.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Beacon } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/beacon/RoomCallBanner.tsx b/src/components/views/beacon/RoomCallBanner.tsx index 2a7ad1814..1615f6b01 100644 --- a/src/components/views/beacon/RoomCallBanner.tsx +++ b/src/components/views/beacon/RoomCallBanner.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback } from "react"; diff --git a/src/components/views/beacon/RoomLiveShareWarning.tsx b/src/components/views/beacon/RoomLiveShareWarning.tsx index 0d9a5bed0..c737b8be3 100644 --- a/src/components/views/beacon/RoomLiveShareWarning.tsx +++ b/src/components/views/beacon/RoomLiveShareWarning.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/beacon/ShareLatestLocation.tsx b/src/components/views/beacon/ShareLatestLocation.tsx index 31f2a1387..74e253a0b 100644 --- a/src/components/views/beacon/ShareLatestLocation.tsx +++ b/src/components/views/beacon/ShareLatestLocation.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useEffect, useState } from "react"; diff --git a/src/components/views/beacon/StyledLiveBeaconIcon.tsx b/src/components/views/beacon/StyledLiveBeaconIcon.tsx index d643cdefd..b60d9c607 100644 --- a/src/components/views/beacon/StyledLiveBeaconIcon.tsx +++ b/src/components/views/beacon/StyledLiveBeaconIcon.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/beacon/displayStatus.ts b/src/components/views/beacon/displayStatus.ts index a2cd4b662..ad92e0f0f 100644 --- a/src/components/views/beacon/displayStatus.ts +++ b/src/components/views/beacon/displayStatus.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ContentHelpers } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/beacon/index.tsx b/src/components/views/beacon/index.tsx index 77119edbd..782a69f98 100644 --- a/src/components/views/beacon/index.tsx +++ b/src/components/views/beacon/index.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // Exports beacon components which touch maplibre-gs wrapped in React Suspense to enable code splitting diff --git a/src/components/views/beta/BetaCard.tsx b/src/components/views/beta/BetaCard.tsx index 7d17c3af9..8cd9122e9 100644 --- a/src/components/views/beta/BetaCard.tsx +++ b/src/components/views/beta/BetaCard.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, useState } from "react"; diff --git a/src/components/views/context_menus/DeveloperToolsOption.tsx b/src/components/views/context_menus/DeveloperToolsOption.tsx index 5fa600873..ce673f528 100644 --- a/src/components/views/context_menus/DeveloperToolsOption.tsx +++ b/src/components/views/context_menus/DeveloperToolsOption.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/context_menus/DeviceContextMenu.tsx b/src/components/views/context_menus/DeviceContextMenu.tsx index 5b228d222..efe1b33e4 100644 --- a/src/components/views/context_menus/DeviceContextMenu.tsx +++ b/src/components/views/context_menus/DeviceContextMenu.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useEffect, useState } from "react"; diff --git a/src/components/views/context_menus/DialpadContextMenu.tsx b/src/components/views/context_menus/DialpadContextMenu.tsx index 06cb566eb..72e7e0481 100644 --- a/src/components/views/context_menus/DialpadContextMenu.tsx +++ b/src/components/views/context_menus/DialpadContextMenu.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; diff --git a/src/components/views/context_menus/GenericElementContextMenu.tsx b/src/components/views/context_menus/GenericElementContextMenu.tsx index 5e3d55fbd..42ed8ce5b 100644 --- a/src/components/views/context_menus/GenericElementContextMenu.tsx +++ b/src/components/views/context_menus/GenericElementContextMenu.tsx @@ -1,17 +1,8 @@ /* -Copyright 2017 New Vector Ltd +Copyright 2017-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/context_menus/GenericTextContextMenu.tsx b/src/components/views/context_menus/GenericTextContextMenu.tsx index c40b69216..ac9a947c7 100644 --- a/src/components/views/context_menus/GenericTextContextMenu.tsx +++ b/src/components/views/context_menus/GenericTextContextMenu.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/context_menus/IconizedContextMenu.tsx b/src/components/views/context_menus/IconizedContextMenu.tsx index b907fef2f..f621d8af8 100644 --- a/src/components/views/context_menus/IconizedContextMenu.tsx +++ b/src/components/views/context_menus/IconizedContextMenu.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/context_menus/KebabContextMenu.tsx b/src/components/views/context_menus/KebabContextMenu.tsx index f963933bd..633cc0bb0 100644 --- a/src/components/views/context_menus/KebabContextMenu.tsx +++ b/src/components/views/context_menus/KebabContextMenu.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/context_menus/LegacyCallContextMenu.tsx b/src/components/views/context_menus/LegacyCallContextMenu.tsx index de945b891..817b4632e 100644 --- a/src/components/views/context_menus/LegacyCallContextMenu.tsx +++ b/src/components/views/context_menus/LegacyCallContextMenu.tsx @@ -1,17 +1,8 @@ /* -Copyright 2020 New Vector Ltd +Copyright 2020-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/context_menus/MessageContextMenu.tsx b/src/components/views/context_menus/MessageContextMenu.tsx index bdae76bd6..f871a3e9d 100644 --- a/src/components/views/context_menus/MessageContextMenu.tsx +++ b/src/components/views/context_menus/MessageContextMenu.tsx @@ -1,19 +1,11 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2015-2023 The Matrix.org Foundation C.I.C. +Copyright 2021, 2022 Šimon Brandner Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2015 - 2023 The Matrix.org Foundation C.I.C. -Copyright 2021 - 2022 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, useContext } from "react"; @@ -36,9 +28,8 @@ import Modal from "../../../Modal"; import Resend from "../../../Resend"; import SettingsStore from "../../../settings/SettingsStore"; import { isUrlPermitted } from "../../../HtmlUtils"; -import { canEditContent, canPinEvent, editEvent, isContentActionable } from "../../../utils/EventUtils"; +import { canEditContent, editEvent, isContentActionable } from "../../../utils/EventUtils"; import IconizedContextMenu, { IconizedContextMenuOption, IconizedContextMenuOptionList } from "./IconizedContextMenu"; -import { ReadPinsEventId } from "../right_panel/types"; import { Action } from "../../../dispatcher/actions"; import { RoomPermalinkCreator } from "../../../utils/permalinks/Permalinks"; import { ButtonEvent } from "../elements/AccessibleButton"; @@ -62,6 +53,8 @@ import { ShowThreadPayload } from "../../../dispatcher/payloads/ShowThreadPayloa import { CardContext } from "../right_panel/context"; //:tchap: remove-thread-buttons - add feature flags import TchapUIFeature from "../../../../../../src/tchap/util/TchapUIFeature"; +import PinningUtils from "../../../utils/PinningUtils"; +import PosthogTrackers from "../../../PosthogTrackers.ts"; interface IReplyInThreadButton { mxEvent: MatrixEvent; @@ -179,24 +172,11 @@ export default class MessageContextMenu extends React.Component this.props.mxEvent.getType() !== EventType.RoomServerAcl && this.props.mxEvent.getType() !== EventType.RoomEncryption; - let canPin = - !!room?.currentState.mayClientSendStateEvent(EventType.RoomPinnedEvents, cli) && - canPinEvent(this.props.mxEvent); - - // HACK: Intentionally say we can't pin if the user doesn't want to use the functionality - if (!SettingsStore.getValue("feature_pinning")) canPin = false; + const canPin = PinningUtils.canPin(cli, this.props.mxEvent) || PinningUtils.canUnpin(cli, this.props.mxEvent); this.setState({ canRedact, canPin }); }; - private isPinned(): boolean { - const room = MatrixClientPeg.safeGet().getRoom(this.props.mxEvent.getRoomId()); - const pinnedEvent = room?.currentState.getStateEvents(EventType.RoomPinnedEvents, ""); - if (!pinnedEvent) return false; - const content = pinnedEvent.getContent(); - return content.pinned && Array.isArray(content.pinned) && content.pinned.includes(this.props.mxEvent.getId()); - } - private canEndPoll(mxEvent: MatrixEvent): boolean { return ( M_POLL_START.matches(mxEvent.getType()) && @@ -258,23 +238,11 @@ export default class MessageContextMenu extends React.Component this.closeMenu(); }; - private onPinClick = (): void => { - const cli = MatrixClientPeg.safeGet(); - const room = cli.getRoom(this.props.mxEvent.getRoomId()); - if (!room) return; - const eventId = this.props.mxEvent.getId(); - - const pinnedIds = room.currentState?.getStateEvents(EventType.RoomPinnedEvents, "")?.getContent().pinned || []; + private onPinClick = (isPinned: boolean): void => { + // Pin or unpin in background + PinningUtils.pinOrUnpinEvent(MatrixClientPeg.safeGet(), this.props.mxEvent); + PosthogTrackers.trackPinUnpinMessage(isPinned ? "Pin" : "Unpin", "Timeline"); - if (pinnedIds.includes(eventId)) { - pinnedIds.splice(pinnedIds.indexOf(eventId), 1); - } else { - pinnedIds.push(eventId); - cli.setRoomAccountData(room.roomId, ReadPinsEventId, { - event_ids: [...(room.getAccountData(ReadPinsEventId)?.getContent()?.event_ids || []), eventId], - }); - } - cli.sendStateEvent(room.roomId, EventType.RoomPinnedEvents, { pinned: pinnedIds }, ""); this.closeMenu(); }; @@ -454,17 +422,6 @@ export default class MessageContextMenu extends React.Component ); } - let pinButton: JSX.Element | undefined; - if (contentActionable && this.state.canPin) { - pinButton = ( - - ); - } - // This is specifically not behind the developerMode flag to give people insight into the Matrix const viewSourceButton = ( ); } + let pinButton: JSX.Element | undefined; + if (rightClick && this.state.canPin) { + const isPinned = PinningUtils.isPinned(MatrixClientPeg.safeGet(), this.props.mxEvent); + pinButton = ( + this.onPinClick(isPinned)} + /> + ); + } + let viewInRoomButton: JSX.Element | undefined; if (isThreadRootEvent) { viewInRoomButton = ( @@ -673,7 +642,7 @@ export default class MessageContextMenu extends React.Component } let quickItemsList: JSX.Element | undefined; - if (editButton || replyButton || reactButton) { + if (editButton || replyButton || reactButton || pinButton) { quickItemsList = ( {reactButton} @@ -683,6 +652,7 @@ export default class MessageContextMenu extends React.Component {TchapUIFeature.isFeatureActiveForHomeserver("feature_thread") ? replyInThreadButton : null} {/*:TCHAP: end */} {editButton} + {pinButton} ); } @@ -693,7 +663,6 @@ export default class MessageContextMenu extends React.Component {openInMapSiteButton} {endPollButton} {forwardButton} - {pinButton} {permalinkButton} {reportEventButton} {externalURLButton} diff --git a/src/components/views/context_menus/RoomContextMenu.tsx b/src/components/views/context_menus/RoomContextMenu.tsx index 0dbd4b539..f431218b0 100644 --- a/src/components/views/context_menus/RoomContextMenu.tsx +++ b/src/components/views/context_menus/RoomContextMenu.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext } from "react"; @@ -34,8 +26,6 @@ import { EchoChamber } from "../../../stores/local-echo/EchoChamber"; import { RoomNotifState } from "../../../RoomNotifs"; import Modal from "../../../Modal"; import ExportDialog from "../dialogs/ExportDialog"; -import { useFeatureEnabled } from "../../../hooks/useSettings"; -import { usePinnedEvents } from "../right_panel/PinnedMessagesCard"; import { RightPanelPhases } from "../../../stores/right-panel/RightPanelStorePhases"; import { RoomSettingsTab } from "../dialogs/RoomSettingsDialog"; import { useEventEmitterState } from "../../../hooks/useEventEmitter"; @@ -52,7 +42,8 @@ import { shouldShowComponent } from "../../../customisations/helpers/UIComponent import { UIComponent } from "../../../settings/UIFeature"; import { DeveloperToolsOption } from "./DeveloperToolsOption"; import { tagRoom } from "../../../utils/room/tagRoom"; -import { useIsVideoRoom } from "../../../utils/video-rooms"; +import { isVideoRoom as calcIsVideoRoom } from "../../../utils/video-rooms"; +import { usePinnedEvents } from "../../../hooks/usePinnedEvents"; interface IProps extends IContextMenuProps { room: Room; @@ -114,7 +105,7 @@ const RoomContextMenu: React.FC = ({ room, onFinished, ...props }) => { } const isDm = DMRoomMap.shared().getUserIdForRoomId(room.roomId); - const isVideoRoom = useIsVideoRoom(room); + const isVideoRoom = calcIsVideoRoom(room); const canInvite = useEventEmitterState(cli, RoomMemberEvent.PowerLevel, () => room.canInvite(cli.getUserId()!)); let inviteOption: JSX.Element | undefined; if (canInvite && !isDm && shouldShowComponent(UIComponent.InviteUsers)) { @@ -269,11 +260,10 @@ const RoomContextMenu: React.FC = ({ room, onFinished, ...props }) => { ); } - const pinningEnabled = useFeatureEnabled("feature_pinning"); - const pinCount = usePinnedEvents(pinningEnabled ? room : undefined)?.length; + const pinCount = usePinnedEvents(room).length; let pinsOption: JSX.Element | undefined; - if (pinningEnabled && !isVideoRoom) { + if (!isVideoRoom) { pinsOption = ( { diff --git a/src/components/views/context_menus/RoomGeneralContextMenu.tsx b/src/components/views/context_menus/RoomGeneralContextMenu.tsx index 4465c2190..714f97ed9 100644 --- a/src/components/views/context_menus/RoomGeneralContextMenu.tsx +++ b/src/components/views/context_menus/RoomGeneralContextMenu.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/components/views/context_menus/RoomNotificationContextMenu.tsx b/src/components/views/context_menus/RoomNotificationContextMenu.tsx index dfa8cf813..b43f4e411 100644 --- a/src/components/views/context_menus/RoomNotificationContextMenu.tsx +++ b/src/components/views/context_menus/RoomNotificationContextMenu.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/context_menus/SpaceContextMenu.tsx b/src/components/views/context_menus/SpaceContextMenu.tsx index a899417a0..317ce3efc 100644 --- a/src/components/views/context_menus/SpaceContextMenu.tsx +++ b/src/components/views/context_menus/SpaceContextMenu.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext } from "react"; diff --git a/src/components/views/context_menus/ThreadListContextMenu.tsx b/src/components/views/context_menus/ThreadListContextMenu.tsx index 76abc2374..0d30e7174 100644 --- a/src/components/views/context_menus/ThreadListContextMenu.tsx +++ b/src/components/views/context_menus/ThreadListContextMenu.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback, useEffect } from "react"; diff --git a/src/components/views/context_menus/WidgetContextMenu.tsx b/src/components/views/context_menus/WidgetContextMenu.tsx index 8e0f43c43..21239d0fe 100644 --- a/src/components/views/context_menus/WidgetContextMenu.tsx +++ b/src/components/views/context_menus/WidgetContextMenu.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps, useContext } from "react"; diff --git a/src/components/views/dialogs/AddExistingSubspaceDialog.tsx b/src/components/views/dialogs/AddExistingSubspaceDialog.tsx index 8592e866f..e76c42c2b 100644 --- a/src/components/views/dialogs/AddExistingSubspaceDialog.tsx +++ b/src/components/views/dialogs/AddExistingSubspaceDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useState } from "react"; diff --git a/src/components/views/dialogs/AddExistingToSpaceDialog.tsx b/src/components/views/dialogs/AddExistingToSpaceDialog.tsx index 3567dbecc..8bd7bfccc 100644 --- a/src/components/views/dialogs/AddExistingToSpaceDialog.tsx +++ b/src/components/views/dialogs/AddExistingToSpaceDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement, ReactNode, useContext, useMemo, useRef, useState } from "react"; diff --git a/src/components/views/dialogs/AnalyticsLearnMoreDialog.tsx b/src/components/views/dialogs/AnalyticsLearnMoreDialog.tsx index 3b09adbb5..98e2921a6 100644 --- a/src/components/views/dialogs/AnalyticsLearnMoreDialog.tsx +++ b/src/components/views/dialogs/AnalyticsLearnMoreDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -80,8 +72,8 @@ export const AnalyticsLearnMoreDialog: React.FC = ({ {_t("analytics|pseudonymous_usage_data", { analyticsOwner })}
      -
    • {_t("analytics|bullet_1", {}, { Bold: (sub) => {sub} })}
    • -
    • {_t("analytics|bullet_2", {}, { Bold: (sub) => {sub} })}
    • +
    • {_t("analytics|bullet_1", {}, { Bold: (sub) => {sub} })}
    • +
    • {_t("analytics|bullet_2", {}, { Bold: (sub) => {sub} })}
    • {_t("analytics|disable_prompt")}
    {privacyPolicyLink} diff --git a/src/components/views/dialogs/AppDownloadDialog.tsx b/src/components/views/dialogs/AppDownloadDialog.tsx index 63e8cd44f..4faeb0838 100644 --- a/src/components/views/dialogs/AppDownloadDialog.tsx +++ b/src/components/views/dialogs/AppDownloadDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FC } from "react"; diff --git a/src/components/views/dialogs/AskInviteAnywayDialog.tsx b/src/components/views/dialogs/AskInviteAnywayDialog.tsx index 6a113798d..de8fc5eb3 100644 --- a/src/components/views/dialogs/AskInviteAnywayDialog.tsx +++ b/src/components/views/dialogs/AskInviteAnywayDialog.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback } from "react"; diff --git a/src/components/views/dialogs/BaseDialog.tsx b/src/components/views/dialogs/BaseDialog.tsx index 653c6327f..73c46635b 100644 --- a/src/components/views/dialogs/BaseDialog.tsx +++ b/src/components/views/dialogs/BaseDialog.tsx @@ -1,19 +1,11 @@ /* -Copyright 2017 Vector Creations Ltd -Copyright 2018, 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018, 2019 New Vector Ltd +Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/BetaFeedbackDialog.tsx b/src/components/views/dialogs/BetaFeedbackDialog.tsx index ffa97ef62..9f4852cf2 100644 --- a/src/components/views/dialogs/BetaFeedbackDialog.tsx +++ b/src/components/views/dialogs/BetaFeedbackDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/BugReportDialog.tsx b/src/components/views/dialogs/BugReportDialog.tsx index 6be19cea5..6b5f2ec10 100644 --- a/src/components/views/dialogs/BugReportDialog.tsx +++ b/src/components/views/dialogs/BugReportDialog.tsx @@ -1,20 +1,12 @@ /* -Copyright 2017 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2017 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -239,7 +231,7 @@ export default class BugReportDialog extends React.Component { ) { warning = (

    - {_t("bug_reporting|unsupported_browser")} + {_t("bug_reporting|unsupported_browser")}

    ); } @@ -304,7 +296,7 @@ export default class BugReportDialog extends React.Component { {warning}

    {_t("bug_reporting|description")}

    - + {_t( "bug_reporting|before_submitting", {}, @@ -320,7 +312,7 @@ export default class BugReportDialog extends React.Component { ), }, )} - +

    diff --git a/src/components/views/dialogs/BulkRedactDialog.tsx b/src/components/views/dialogs/BulkRedactDialog.tsx index e387545b1..33fa82509 100644 --- a/src/components/views/dialogs/BulkRedactDialog.tsx +++ b/src/components/views/dialogs/BulkRedactDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useState } from "react"; diff --git a/src/components/views/dialogs/CantStartVoiceMessageBroadcastDialog.tsx b/src/components/views/dialogs/CantStartVoiceMessageBroadcastDialog.tsx index 36737a378..eb565c007 100644 --- a/src/components/views/dialogs/CantStartVoiceMessageBroadcastDialog.tsx +++ b/src/components/views/dialogs/CantStartVoiceMessageBroadcastDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/ChangelogDialog.tsx b/src/components/views/dialogs/ChangelogDialog.tsx index ca110aa16..623f5c667 100644 --- a/src/components/views/dialogs/ChangelogDialog.tsx +++ b/src/components/views/dialogs/ChangelogDialog.tsx @@ -1,18 +1,10 @@ /* - Copyright 2016 Aviral Dasgupta +Copyright 2024 New Vector Ltd. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2016 Aviral Dasgupta - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -38,7 +30,7 @@ interface Commit { }; } -const REPOS = ["vector-im/element-web", "matrix-org/matrix-react-sdk", "matrix-org/matrix-js-sdk"] as const; +const REPOS = ["element-hq/element-web", "element-hq/matrix-react-sdk", "matrix-org/matrix-js-sdk"] as const; export default class ChangelogDialog extends React.Component { public constructor(props: IProps) { diff --git a/src/components/views/dialogs/ConfirmAndWaitRedactDialog.tsx b/src/components/views/dialogs/ConfirmAndWaitRedactDialog.tsx index 066c197b0..577118195 100644 --- a/src/components/views/dialogs/ConfirmAndWaitRedactDialog.tsx +++ b/src/components/views/dialogs/ConfirmAndWaitRedactDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/ConfirmRedactDialog.tsx b/src/components/views/dialogs/ConfirmRedactDialog.tsx index fe50d750a..27823ec47 100644 --- a/src/components/views/dialogs/ConfirmRedactDialog.tsx +++ b/src/components/views/dialogs/ConfirmRedactDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Feature, ServerSupport } from "matrix-js-sdk/src/feature"; diff --git a/src/components/views/dialogs/ConfirmSpaceUserActionDialog.tsx b/src/components/views/dialogs/ConfirmSpaceUserActionDialog.tsx index dba36668f..cb79f27a2 100644 --- a/src/components/views/dialogs/ConfirmSpaceUserActionDialog.tsx +++ b/src/components/views/dialogs/ConfirmSpaceUserActionDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps, useMemo, useState } from "react"; diff --git a/src/components/views/dialogs/ConfirmUserActionDialog.tsx b/src/components/views/dialogs/ConfirmUserActionDialog.tsx index c46c9f368..ffe8c778f 100644 --- a/src/components/views/dialogs/ConfirmUserActionDialog.tsx +++ b/src/components/views/dialogs/ConfirmUserActionDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, FormEvent, ReactNode } from "react"; diff --git a/src/components/views/dialogs/ConfirmWipeDeviceDialog.tsx b/src/components/views/dialogs/ConfirmWipeDeviceDialog.tsx index d095fd192..1fa8f4f0c 100644 --- a/src/components/views/dialogs/ConfirmWipeDeviceDialog.tsx +++ b/src/components/views/dialogs/ConfirmWipeDeviceDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/CreateRoomDialog.tsx b/src/components/views/dialogs/CreateRoomDialog.tsx index fa0eef508..c5a8080e3 100644 --- a/src/components/views/dialogs/CreateRoomDialog.tsx +++ b/src/components/views/dialogs/CreateRoomDialog.tsx @@ -1,18 +1,10 @@ /* -Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2020, 2021 The Matrix.org Foundation C.I.C. +Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, createRef, KeyboardEvent, SyntheticEvent } from "react"; @@ -288,7 +280,9 @@ export default class CreateRoomDialog extends React.Component { "create_room|join_rule_restricted_label", {}, { - SpaceName: () => {this.props.parentSpace?.name ?? _t("common|unnamed_space")}, + SpaceName: () => ( + {this.props.parentSpace?.name ?? _t("common|unnamed_space")} + ), }, )}   @@ -302,7 +296,9 @@ export default class CreateRoomDialog extends React.Component { "create_room|join_rule_public_parent_space_label", {}, { - SpaceName: () => {this.props.parentSpace?.name ?? _t("common|unnamed_space")}, + SpaceName: () => ( + {this.props.parentSpace?.name ?? _t("common|unnamed_space")} + ), }, )}   diff --git a/src/components/views/dialogs/CreateSubspaceDialog.tsx b/src/components/views/dialogs/CreateSubspaceDialog.tsx index 3804e71f7..6add81279 100644 --- a/src/components/views/dialogs/CreateSubspaceDialog.tsx +++ b/src/components/views/dialogs/CreateSubspaceDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useRef, useState } from "react"; @@ -103,7 +95,7 @@ const CreateSubspaceDialog: React.FC = ({ space, onAddExistingSpaceClick "create_space|subspace_join_rule_restricted_description", {}, { - SpaceName: () => {parentSpace.name}, + SpaceName: () => {parentSpace.name}, }, )}

    @@ -115,7 +107,7 @@ const CreateSubspaceDialog: React.FC = ({ space, onAddExistingSpaceClick "create_space|subspace_join_rule_public_description", {}, { - SpaceName: () => {parentSpace.name}, + SpaceName: () => {parentSpace.name}, }, )}

    diff --git a/src/components/views/dialogs/CryptoStoreTooNewDialog.tsx b/src/components/views/dialogs/CryptoStoreTooNewDialog.tsx index 9539bcb49..2631351f9 100644 --- a/src/components/views/dialogs/CryptoStoreTooNewDialog.tsx +++ b/src/components/views/dialogs/CryptoStoreTooNewDialog.tsx @@ -1,18 +1,10 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/DeactivateAccountDialog.tsx b/src/components/views/dialogs/DeactivateAccountDialog.tsx index 4e05c26b8..fbcd26d38 100644 --- a/src/components/views/dialogs/DeactivateAccountDialog.tsx +++ b/src/components/views/dialogs/DeactivateAccountDialog.tsx @@ -1,18 +1,10 @@ /* -Copyright 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/DevtoolsDialog.tsx b/src/components/views/dialogs/DevtoolsDialog.tsx index f0f97e9ff..f06c5af19 100644 --- a/src/components/views/dialogs/DevtoolsDialog.tsx +++ b/src/components/views/dialogs/DevtoolsDialog.tsx @@ -1,18 +1,10 @@ /* -Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2018-2023 The Matrix.org Foundation C.I.C. +Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useState } from "react"; diff --git a/src/components/views/dialogs/EndPollDialog.tsx b/src/components/views/dialogs/EndPollDialog.tsx index 6d1abc4a3..92c98190f 100644 --- a/src/components/views/dialogs/EndPollDialog.tsx +++ b/src/components/views/dialogs/EndPollDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/ErrorDialog.tsx b/src/components/views/dialogs/ErrorDialog.tsx index ed343f9cb..2e7cd753f 100644 --- a/src/components/views/dialogs/ErrorDialog.tsx +++ b/src/components/views/dialogs/ErrorDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* diff --git a/src/components/views/dialogs/ExportDialog.tsx b/src/components/views/dialogs/ExportDialog.tsx index 6645ce0b0..54c58fe2e 100644 --- a/src/components/views/dialogs/ExportDialog.tsx +++ b/src/components/views/dialogs/ExportDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useRef, useState, Dispatch, SetStateAction } from "react"; diff --git a/src/components/views/dialogs/FeedbackDialog.tsx b/src/components/views/dialogs/FeedbackDialog.tsx index 475b14855..1e391d800 100644 --- a/src/components/views/dialogs/FeedbackDialog.tsx +++ b/src/components/views/dialogs/FeedbackDialog.tsx @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useEffect, useRef, useState } from "react"; diff --git a/src/components/views/dialogs/ForwardDialog.tsx b/src/components/views/dialogs/ForwardDialog.tsx index 28de13381..1e973fe77 100644 --- a/src/components/views/dialogs/ForwardDialog.tsx +++ b/src/components/views/dialogs/ForwardDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Robin Townsend -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useEffect, useMemo, useState } from "react"; diff --git a/src/components/views/dialogs/GenericFeatureFeedbackDialog.tsx b/src/components/views/dialogs/GenericFeatureFeedbackDialog.tsx index 095dca5da..489e4c7bc 100644 --- a/src/components/views/dialogs/GenericFeatureFeedbackDialog.tsx +++ b/src/components/views/dialogs/GenericFeatureFeedbackDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, useState } from "react"; diff --git a/src/components/views/dialogs/IncomingSasDialog.tsx b/src/components/views/dialogs/IncomingSasDialog.tsx index 14db23e27..3fdb89a26 100644 --- a/src/components/views/dialogs/IncomingSasDialog.tsx +++ b/src/components/views/dialogs/IncomingSasDialog.tsx @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/dialogs/InfoDialog.tsx b/src/components/views/dialogs/InfoDialog.tsx index 0f8830819..1f5449a32 100644 --- a/src/components/views/dialogs/InfoDialog.tsx +++ b/src/components/views/dialogs/InfoDialog.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2015-2021 The Matrix.org Foundation C.I.C. Copyright 2019 Bastian Masanek, Noxware IT -Copyright 2015 - 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/dialogs/IntegrationsDisabledDialog.tsx b/src/components/views/dialogs/IntegrationsDisabledDialog.tsx index 46ce4c6cb..44fea65d5 100644 --- a/src/components/views/dialogs/IntegrationsDisabledDialog.tsx +++ b/src/components/views/dialogs/IntegrationsDisabledDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/IntegrationsImpossibleDialog.tsx b/src/components/views/dialogs/IntegrationsImpossibleDialog.tsx index 9f49e6bdd..a17b25bf2 100644 --- a/src/components/views/dialogs/IntegrationsImpossibleDialog.tsx +++ b/src/components/views/dialogs/IntegrationsImpossibleDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/InteractiveAuthDialog.tsx b/src/components/views/dialogs/InteractiveAuthDialog.tsx index c6e3dd203..305534e6d 100644 --- a/src/components/views/dialogs/InteractiveAuthDialog.tsx +++ b/src/components/views/dialogs/InteractiveAuthDialog.tsx @@ -1,19 +1,11 @@ /* -Copyright 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2017 Vector Creations Ltd +Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/InviteDialog.tsx b/src/components/views/dialogs/InviteDialog.tsx index 42b3148ef..38e7af4b3 100644 --- a/src/components/views/dialogs/InviteDialog.tsx +++ b/src/components/views/dialogs/InviteDialog.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, ReactNode, SyntheticEvent } from "react"; diff --git a/src/components/views/dialogs/InviteDialogTypes.ts b/src/components/views/dialogs/InviteDialogTypes.ts index a061b884d..97a71408f 100644 --- a/src/components/views/dialogs/InviteDialogTypes.ts +++ b/src/components/views/dialogs/InviteDialogTypes.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export enum InviteKind { diff --git a/src/components/views/dialogs/KeySignatureUploadFailedDialog.tsx b/src/components/views/dialogs/KeySignatureUploadFailedDialog.tsx index 157f93af0..9684f2513 100644 --- a/src/components/views/dialogs/KeySignatureUploadFailedDialog.tsx +++ b/src/components/views/dialogs/KeySignatureUploadFailedDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useState, useCallback, useRef } from "react"; diff --git a/src/components/views/dialogs/LeaveSpaceDialog.tsx b/src/components/views/dialogs/LeaveSpaceDialog.tsx index de27d6b71..50821694d 100644 --- a/src/components/views/dialogs/LeaveSpaceDialog.tsx +++ b/src/components/views/dialogs/LeaveSpaceDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useMemo, useState } from "react"; @@ -85,7 +77,7 @@ const LeaveSpaceDialog: React.FC = ({ space, onFinished }) => { "space|leave_dialog_description", {}, { - spaceName: () => {space.name}, + spaceName: () => {space.name}, }, )}   diff --git a/src/components/views/dialogs/LogoutDialog.tsx b/src/components/views/dialogs/LogoutDialog.tsx index 3714a71e8..bc9ccb3f7 100644 --- a/src/components/views/dialogs/LogoutDialog.tsx +++ b/src/components/views/dialogs/LogoutDialog.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2020-2022 The Matrix.org Foundation C.I.C. Copyright 2018, 2019 New Vector Ltd -Copyright 2020 - 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx b/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx index 9bc28ab4a..d124d9745 100644 --- a/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx +++ b/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useMemo, useState } from "react"; @@ -152,7 +144,7 @@ const ManageRestrictedJoinRuleDialog: React.FC = ({ room, selected = [], "room_settings|security|join_rule_restricted_dialog_description", {}, { - RoomName: () => {room.name}, + RoomName: () => {room.name}, }, )}

    diff --git a/src/components/views/dialogs/ManualDeviceKeyVerificationDialog.tsx b/src/components/views/dialogs/ManualDeviceKeyVerificationDialog.tsx index 17ddf3eac..76e7580e0 100644 --- a/src/components/views/dialogs/ManualDeviceKeyVerificationDialog.tsx +++ b/src/components/views/dialogs/ManualDeviceKeyVerificationDialog.tsx @@ -1,21 +1,13 @@ /* -Copyright 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd +Copyright 2024 New Vector Ltd. +Copyright 2020 The Matrix.org Foundation C.I.C. Copyright 2019 New Vector Ltd Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2020 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2017 Vector Creations Ltd +Copyright 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback } from "react"; @@ -77,7 +69,7 @@ export function ManualDeviceKeyVerificationDialog({ {" "} - {key} + {key} diff --git a/src/components/views/dialogs/MessageEditHistoryDialog.tsx b/src/components/views/dialogs/MessageEditHistoryDialog.tsx index 900765e52..48564e241 100644 --- a/src/components/views/dialogs/MessageEditHistoryDialog.tsx +++ b/src/components/views/dialogs/MessageEditHistoryDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/ModalWidgetDialog.tsx b/src/components/views/dialogs/ModalWidgetDialog.tsx index bfe17eb4f..28f06927b 100644 --- a/src/components/views/dialogs/ModalWidgetDialog.tsx +++ b/src/components/views/dialogs/ModalWidgetDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; diff --git a/src/components/views/dialogs/ModuleUiDialog.tsx b/src/components/views/dialogs/ModuleUiDialog.tsx index 9308d8811..7cdb0190d 100644 --- a/src/components/views/dialogs/ModuleUiDialog.tsx +++ b/src/components/views/dialogs/ModuleUiDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/components/views/dialogs/PollHistoryDialog.tsx b/src/components/views/dialogs/PollHistoryDialog.tsx index 7637d4e51..50774425c 100644 --- a/src/components/views/dialogs/PollHistoryDialog.tsx +++ b/src/components/views/dialogs/PollHistoryDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/QuestionDialog.tsx b/src/components/views/dialogs/QuestionDialog.tsx index e6965a757..109599ee0 100644 --- a/src/components/views/dialogs/QuestionDialog.tsx +++ b/src/components/views/dialogs/QuestionDialog.tsx @@ -1,18 +1,9 @@ /* +Copyright 2017-2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/RegistrationEmailPromptDialog.tsx b/src/components/views/dialogs/RegistrationEmailPromptDialog.tsx index 0a51a18a6..a02098d3e 100644 --- a/src/components/views/dialogs/RegistrationEmailPromptDialog.tsx +++ b/src/components/views/dialogs/RegistrationEmailPromptDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; @@ -62,7 +54,7 @@ const RegistrationEmailPromptDialog: React.FC = ({ onFinished }) => { "auth|registration|continue_without_email_description", {}, { - b: (sub) => {sub}, + b: (sub) => {sub}, }, )}

    diff --git a/src/components/views/dialogs/ReportEventDialog.tsx b/src/components/views/dialogs/ReportEventDialog.tsx index 0e0b231b3..75b9977dc 100644 --- a/src/components/views/dialogs/ReportEventDialog.tsx +++ b/src/components/views/dialogs/ReportEventDialog.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent } from "react"; diff --git a/src/components/views/dialogs/RoomSettingsDialog.tsx b/src/components/views/dialogs/RoomSettingsDialog.tsx index 213ee94ac..2c4656745 100644 --- a/src/components/views/dialogs/RoomSettingsDialog.tsx +++ b/src/components/views/dialogs/RoomSettingsDialog.tsx @@ -1,20 +1,11 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2023 The Matrix.org Foundation C.I.C. Copyright 2019 New Vector Ltd Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2023 The Matrix.org Foundation C.I.C. - - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/RoomUpgradeDialog.tsx b/src/components/views/dialogs/RoomUpgradeDialog.tsx index 6310d873e..0935fca19 100644 --- a/src/components/views/dialogs/RoomUpgradeDialog.tsx +++ b/src/components/views/dialogs/RoomUpgradeDialog.tsx @@ -1,17 +1,9 @@ /* -Copyright 2018 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2018-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/RoomUpgradeWarningDialog.tsx b/src/components/views/dialogs/RoomUpgradeWarningDialog.tsx index e5b5fde69..48d0bef28 100644 --- a/src/components/views/dialogs/RoomUpgradeWarningDialog.tsx +++ b/src/components/views/dialogs/RoomUpgradeWarningDialog.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, SyntheticEvent } from "react"; @@ -189,7 +181,7 @@ export default class RoomUpgradeWarningDialog extends React.Component {sub}, + b: (sub) => {sub}, }, )}

    diff --git a/src/components/views/dialogs/ScrollableBaseModal.tsx b/src/components/views/dialogs/ScrollableBaseModal.tsx index a12632a05..564c77397 100644 --- a/src/components/views/dialogs/ScrollableBaseModal.tsx +++ b/src/components/views/dialogs/ScrollableBaseModal.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FormEvent } from "react"; diff --git a/src/components/views/dialogs/ServerOfflineDialog.tsx b/src/components/views/dialogs/ServerOfflineDialog.tsx index 837070bbb..d48097b06 100644 --- a/src/components/views/dialogs/ServerOfflineDialog.tsx +++ b/src/components/views/dialogs/ServerOfflineDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/dialogs/ServerPickerDialog.tsx b/src/components/views/dialogs/ServerPickerDialog.tsx index d0597f528..3fc74ec80 100644 --- a/src/components/views/dialogs/ServerPickerDialog.tsx +++ b/src/components/views/dialogs/ServerPickerDialog.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020-2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, createRef, SyntheticEvent } from "react"; diff --git a/src/components/views/dialogs/SeshatResetDialog.tsx b/src/components/views/dialogs/SeshatResetDialog.tsx index 1dec25246..3e257fd94 100644 --- a/src/components/views/dialogs/SeshatResetDialog.tsx +++ b/src/components/views/dialogs/SeshatResetDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/SessionRestoreErrorDialog.tsx b/src/components/views/dialogs/SessionRestoreErrorDialog.tsx index a76b32135..84832cb1f 100644 --- a/src/components/views/dialogs/SessionRestoreErrorDialog.tsx +++ b/src/components/views/dialogs/SessionRestoreErrorDialog.tsx @@ -1,19 +1,11 @@ /* -Copyright 2017 Vector Creations Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/SetEmailDialog.tsx b/src/components/views/dialogs/SetEmailDialog.tsx index eb491e1eb..2b1798e38 100644 --- a/src/components/views/dialogs/SetEmailDialog.tsx +++ b/src/components/views/dialogs/SetEmailDialog.tsx @@ -1,18 +1,9 @@ /* +Copyright 2018-2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Copyright 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/ShareDialog.tsx b/src/components/views/dialogs/ShareDialog.tsx index 9e6ee7fc8..3369850b8 100644 --- a/src/components/views/dialogs/ShareDialog.tsx +++ b/src/components/views/dialogs/ShareDialog.tsx @@ -1,18 +1,10 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; diff --git a/src/components/views/dialogs/SlashCommandHelpDialog.tsx b/src/components/views/dialogs/SlashCommandHelpDialog.tsx index 3f8e4d9fa..b5e01bf41 100644 --- a/src/components/views/dialogs/SlashCommandHelpDialog.tsx +++ b/src/components/views/dialogs/SlashCommandHelpDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -53,7 +45,7 @@ const SlashCommandHelpDialog: React.FC = ({ onFinished }) => { {cmd.getCommand()} {cmd.args} - {cmd.description} + {_t(cmd.description)} , ); }); diff --git a/src/components/views/dialogs/SpacePreferencesDialog.tsx b/src/components/views/dialogs/SpacePreferencesDialog.tsx index 881a65507..a3dbd1ca3 100644 --- a/src/components/views/dialogs/SpacePreferencesDialog.tsx +++ b/src/components/views/dialogs/SpacePreferencesDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent } from "react"; diff --git a/src/components/views/dialogs/SpaceSettingsDialog.tsx b/src/components/views/dialogs/SpaceSettingsDialog.tsx index 016307d89..fd415c789 100644 --- a/src/components/views/dialogs/SpaceSettingsDialog.tsx +++ b/src/components/views/dialogs/SpaceSettingsDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useMemo } from "react"; diff --git a/src/components/views/dialogs/StorageEvictedDialog.tsx b/src/components/views/dialogs/StorageEvictedDialog.tsx index d3bd34160..3e62d85a9 100644 --- a/src/components/views/dialogs/StorageEvictedDialog.tsx +++ b/src/components/views/dialogs/StorageEvictedDialog.tsx @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/TermsDialog.tsx b/src/components/views/dialogs/TermsDialog.tsx index 9374fba2f..4d66e41b5 100644 --- a/src/components/views/dialogs/TermsDialog.tsx +++ b/src/components/views/dialogs/TermsDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/TextInputDialog.tsx b/src/components/views/dialogs/TextInputDialog.tsx index 9b99bb382..811b79100 100644 --- a/src/components/views/dialogs/TextInputDialog.tsx +++ b/src/components/views/dialogs/TextInputDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, createRef } from "react"; diff --git a/src/components/views/dialogs/UnpinAllDialog.tsx b/src/components/views/dialogs/UnpinAllDialog.tsx index ef7439d85..4d66a339c 100644 --- a/src/components/views/dialogs/UnpinAllDialog.tsx +++ b/src/components/views/dialogs/UnpinAllDialog.tsx @@ -1,26 +1,20 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import React, { JSX } from "react"; import { Button, Text } from "@vector-im/compound-web"; -import { EventType, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { MatrixClient } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import BaseDialog from "../dialogs/BaseDialog"; import { _t } from "../../../languageHandler"; +import PinningUtils from "../../../utils/PinningUtils.ts"; +import PosthogTrackers from "../../../PosthogTrackers.ts"; /** * Properties for {@link UnpinAllDialog}. @@ -59,7 +53,8 @@ export function UnpinAllDialog({ matrixClient, roomId, onFinished }: UnpinAllDia destructive={true} onClick={async () => { try { - await matrixClient.sendStateEvent(roomId, EventType.RoomPinnedEvents, { pinned: [] }, ""); + await PinningUtils.unpinAllEvents(matrixClient, roomId); + PosthogTrackers.trackPinUnpinMessage("Unpin", "UnpinAll"); } catch (e) { logger.error("Failed to unpin all events:", e); } diff --git a/src/components/views/dialogs/UntrustedDeviceDialog.tsx b/src/components/views/dialogs/UntrustedDeviceDialog.tsx index dadb199a1..c2bc92e75 100644 --- a/src/components/views/dialogs/UntrustedDeviceDialog.tsx +++ b/src/components/views/dialogs/UntrustedDeviceDialog.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019, 2020, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019, 2020 , 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/UploadConfirmDialog.tsx b/src/components/views/dialogs/UploadConfirmDialog.tsx index b82e87c4a..eefc8625b 100644 --- a/src/components/views/dialogs/UploadConfirmDialog.tsx +++ b/src/components/views/dialogs/UploadConfirmDialog.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/UploadFailureDialog.tsx b/src/components/views/dialogs/UploadFailureDialog.tsx index 3b6d2b797..ca7b1c14f 100644 --- a/src/components/views/dialogs/UploadFailureDialog.tsx +++ b/src/components/views/dialogs/UploadFailureDialog.tsx @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -55,7 +46,7 @@ export default class UploadFailureDialog extends React.Component { sizeOfThisFile: fileSize(this.props.badFiles[0].size), }, { - b: (sub) => {sub}, + b: (sub) => {sub}, }, ); buttons = ( @@ -73,7 +64,7 @@ export default class UploadFailureDialog extends React.Component { limit: fileSize(this.props.contentMessages.getUploadLimit()!), }, { - b: (sub) => {sub}, + b: (sub) => {sub}, }, ); buttons = ( @@ -91,7 +82,7 @@ export default class UploadFailureDialog extends React.Component { limit: fileSize(this.props.contentMessages.getUploadLimit()!), }, { - b: (sub) => {sub}, + b: (sub) => {sub}, }, ); const howManyOthers = this.props.totalFiles - this.props.badFiles.length; diff --git a/src/components/views/dialogs/UserSettingsDialog.tsx b/src/components/views/dialogs/UserSettingsDialog.tsx index aa2a35dc8..8ae7a302a 100644 --- a/src/components/views/dialogs/UserSettingsDialog.tsx +++ b/src/components/views/dialogs/UserSettingsDialog.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2019-2024 The Matrix.org Foundation C.I.C. Copyright 2019 New Vector Ltd -Copyright 2019, 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Toast } from "@vector-im/compound-web"; diff --git a/src/components/views/dialogs/UserTab.ts b/src/components/views/dialogs/UserTab.ts index fa0e23242..467a67cd9 100644 --- a/src/components/views/dialogs/UserTab.ts +++ b/src/components/views/dialogs/UserTab.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export enum UserTab { diff --git a/src/components/views/dialogs/VerificationRequestDialog.tsx b/src/components/views/dialogs/VerificationRequestDialog.tsx index fbb7d3854..aa3a3ebe1 100644 --- a/src/components/views/dialogs/VerificationRequestDialog.tsx +++ b/src/components/views/dialogs/VerificationRequestDialog.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020-2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx b/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx index e037d394a..1a94f0a9f 100644 --- a/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx +++ b/src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/WidgetOpenIDPermissionsDialog.tsx b/src/components/views/dialogs/WidgetOpenIDPermissionsDialog.tsx index 490ca5260..263f5127b 100644 --- a/src/components/views/dialogs/WidgetOpenIDPermissionsDialog.tsx +++ b/src/components/views/dialogs/WidgetOpenIDPermissionsDialog.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019 Travis Ralston +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. +Copyright 2019 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/devtools/AccountData.tsx b/src/components/views/dialogs/devtools/AccountData.tsx index 635becac3..f1fc081b0 100644 --- a/src/components/views/dialogs/devtools/AccountData.tsx +++ b/src/components/views/dialogs/devtools/AccountData.tsx @@ -1,18 +1,10 @@ /* -Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext, useMemo, useState } from "react"; diff --git a/src/components/views/dialogs/devtools/BaseTool.tsx b/src/components/views/dialogs/devtools/BaseTool.tsx index e5f93ead3..88dd2ea17 100644 --- a/src/components/views/dialogs/devtools/BaseTool.tsx +++ b/src/components/views/dialogs/devtools/BaseTool.tsx @@ -1,18 +1,10 @@ /* -Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createContext, ReactNode, useState } from "react"; diff --git a/src/components/views/dialogs/devtools/Event.tsx b/src/components/views/dialogs/devtools/Event.tsx index e1e0e469a..f9fc68da2 100644 --- a/src/components/views/dialogs/devtools/Event.tsx +++ b/src/components/views/dialogs/devtools/Event.tsx @@ -1,18 +1,10 @@ /* -Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, ReactNode, useContext, useMemo, useRef, useState } from "react"; diff --git a/src/components/views/dialogs/devtools/FilteredList.tsx b/src/components/views/dialogs/devtools/FilteredList.tsx index c3f930049..400c64695 100644 --- a/src/components/views/dialogs/devtools/FilteredList.tsx +++ b/src/components/views/dialogs/devtools/FilteredList.tsx @@ -1,18 +1,10 @@ /* -Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, useEffect, useState } from "react"; diff --git a/src/components/views/dialogs/devtools/RoomNotifications.tsx b/src/components/views/dialogs/devtools/RoomNotifications.tsx index 397db1fa4..c54e69500 100644 --- a/src/components/views/dialogs/devtools/RoomNotifications.tsx +++ b/src/components/views/dialogs/devtools/RoomNotifications.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { NotificationCountType, Room, Thread, ReceiptType } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/dialogs/devtools/RoomState.tsx b/src/components/views/dialogs/devtools/RoomState.tsx index 51fdd1e83..a331a1914 100644 --- a/src/components/views/dialogs/devtools/RoomState.tsx +++ b/src/components/views/dialogs/devtools/RoomState.tsx @@ -1,18 +1,10 @@ /* -Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext, useEffect, useMemo, useState } from "react"; diff --git a/src/components/views/dialogs/devtools/ServerInfo.tsx b/src/components/views/dialogs/devtools/ServerInfo.tsx index f88ab8327..337ed4217 100644 --- a/src/components/views/dialogs/devtools/ServerInfo.tsx +++ b/src/components/views/dialogs/devtools/ServerInfo.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext } from "react"; diff --git a/src/components/views/dialogs/devtools/ServersInRoom.tsx b/src/components/views/dialogs/devtools/ServersInRoom.tsx index bf980163e..fdb4a2f07 100644 --- a/src/components/views/dialogs/devtools/ServersInRoom.tsx +++ b/src/components/views/dialogs/devtools/ServersInRoom.tsx @@ -1,18 +1,10 @@ /* -Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext, useMemo } from "react"; diff --git a/src/components/views/dialogs/devtools/SettingExplorer.tsx b/src/components/views/dialogs/devtools/SettingExplorer.tsx index 5e0a3929a..ed4b64d87 100644 --- a/src/components/views/dialogs/devtools/SettingExplorer.tsx +++ b/src/components/views/dialogs/devtools/SettingExplorer.tsx @@ -1,18 +1,10 @@ /* -Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2018-2023 The Matrix.org Foundation C.I.C. +Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, useContext, useMemo, useState } from "react"; @@ -136,7 +128,7 @@ const EditSetting: React.FC = ({ setting, onBack }) => {
    - {_t("devtools|caution_colon")} {_t("devtools|use_at_own_risk")} + {_t("devtools|caution_colon")} {_t("devtools|use_at_own_risk")}
    diff --git a/src/components/views/dialogs/devtools/VerificationExplorer.tsx b/src/components/views/dialogs/devtools/VerificationExplorer.tsx index aad806d27..9b292c9da 100644 --- a/src/components/views/dialogs/devtools/VerificationExplorer.tsx +++ b/src/components/views/dialogs/devtools/VerificationExplorer.tsx @@ -1,18 +1,10 @@ /* -Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext, useEffect, useState } from "react"; diff --git a/src/components/views/dialogs/devtools/WidgetExplorer.tsx b/src/components/views/dialogs/devtools/WidgetExplorer.tsx index b0c62eec0..6fad89803 100644 --- a/src/components/views/dialogs/devtools/WidgetExplorer.tsx +++ b/src/components/views/dialogs/devtools/WidgetExplorer.tsx @@ -1,18 +1,10 @@ /* -Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2022 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext, useState } from "react"; diff --git a/src/components/views/dialogs/oidc/OidcLogoutDialog.tsx b/src/components/views/dialogs/oidc/OidcLogoutDialog.tsx index 47376c5c6..83bcd8736 100644 --- a/src/components/views/dialogs/oidc/OidcLogoutDialog.tsx +++ b/src/components/views/dialogs/oidc/OidcLogoutDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useState } from "react"; diff --git a/src/components/views/dialogs/security/AccessSecretStorageDialog.tsx b/src/components/views/dialogs/security/AccessSecretStorageDialog.tsx index 35ea46f04..fb3c2272c 100644 --- a/src/components/views/dialogs/security/AccessSecretStorageDialog.tsx +++ b/src/components/views/dialogs/security/AccessSecretStorageDialog.tsx @@ -1,23 +1,16 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2018-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { debounce } from "lodash"; import classNames from "classnames"; import React, { ChangeEvent, FormEvent } from "react"; import { logger } from "matrix-js-sdk/src/logger"; +import { decodeRecoveryKey } from "matrix-js-sdk/src/crypto-api"; import { SecretStorage } from "matrix-js-sdk/src/matrix"; import { MatrixClientPeg } from "../../../../MatrixClientPeg"; @@ -120,7 +113,7 @@ export default class AccessSecretStorageDialog extends React.PureComponent => {}, /* forceReset = */ true); }; + /** + * Check if the recovery key is valid + * @param recoveryKey + * @private + */ + private isValidRecoveryKey(recoveryKey: string): boolean { + try { + decodeRecoveryKey(recoveryKey); + return true; + } catch (e) { + return false; + } + } + private onRecoveryKeyChange = (e: ChangeEvent): void => { this.setState({ recoveryKey: e.target.value, - recoveryKeyValid: MatrixClientPeg.safeGet().isValidRecoveryKey(e.target.value), + recoveryKeyValid: this.isValidRecoveryKey(e.target.value), }); }; @@ -192,7 +198,7 @@ export default class RestoreKeyBackupDialog extends React.PureComponent -

    {_t("restore_key_backup_dialog|key_backup_warning", {}, { b: (sub) => {sub} })}

    +

    + {_t("restore_key_backup_dialog|key_backup_warning", {}, { b: (sub) => {sub} })} +

    {_t("restore_key_backup_dialog|enter_phrase_description")}

    @@ -461,7 +469,9 @@ export default class RestoreKeyBackupDialog extends React.PureComponent -

    {_t("restore_key_backup_dialog|key_backup_warning", {}, { b: (sub) => {sub} })}

    +

    + {_t("restore_key_backup_dialog|key_backup_warning", {}, { b: (sub) => {sub} })} +

    {_t("restore_key_backup_dialog|enter_key_description")}

    diff --git a/src/components/views/dialogs/security/SetupEncryptionDialog.tsx b/src/components/views/dialogs/security/SetupEncryptionDialog.tsx index 7564ef098..5a3780d66 100644 --- a/src/components/views/dialogs/security/SetupEncryptionDialog.tsx +++ b/src/components/views/dialogs/security/SetupEncryptionDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/spotlight/Filter.ts b/src/components/views/dialogs/spotlight/Filter.ts index 11cdb6dc6..fa4359db4 100644 --- a/src/components/views/dialogs/spotlight/Filter.ts +++ b/src/components/views/dialogs/spotlight/Filter.ts @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export enum Filter { diff --git a/src/components/views/dialogs/spotlight/Option.tsx b/src/components/views/dialogs/spotlight/Option.tsx index d15b781fc..4c7e7ac4f 100644 --- a/src/components/views/dialogs/spotlight/Option.tsx +++ b/src/components/views/dialogs/spotlight/Option.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/dialogs/spotlight/PublicRoomResultDetails.tsx b/src/components/views/dialogs/spotlight/PublicRoomResultDetails.tsx index 66ec82d4a..d2003473b 100644 --- a/src/components/views/dialogs/spotlight/PublicRoomResultDetails.tsx +++ b/src/components/views/dialogs/spotlight/PublicRoomResultDetails.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/dialogs/spotlight/RoomResultContextMenus.tsx b/src/components/views/dialogs/spotlight/RoomResultContextMenus.tsx index 996b7aab1..667cc7980 100644 --- a/src/components/views/dialogs/spotlight/RoomResultContextMenus.tsx +++ b/src/components/views/dialogs/spotlight/RoomResultContextMenus.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021-2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/dialogs/spotlight/SpotlightDialog.tsx b/src/components/views/dialogs/spotlight/SpotlightDialog.tsx index 2630c8587..5b4e395c9 100644 --- a/src/components/views/dialogs/spotlight/SpotlightDialog.tsx +++ b/src/components/views/dialogs/spotlight/SpotlightDialog.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { WebSearch as WebSearchEvent } from "@matrix-org/analytics-events/types/typescript/WebSearch"; diff --git a/src/components/views/dialogs/spotlight/TooltipOption.tsx b/src/components/views/dialogs/spotlight/TooltipOption.tsx index 24c97d601..1d60fed5b 100644 --- a/src/components/views/dialogs/spotlight/TooltipOption.tsx +++ b/src/components/views/dialogs/spotlight/TooltipOption.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/directory/NetworkDropdown.tsx b/src/components/views/directory/NetworkDropdown.tsx index 2fe11e564..d33d92a4b 100644 --- a/src/components/views/directory/NetworkDropdown.tsx +++ b/src/components/views/directory/NetworkDropdown.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { without } from "lodash"; diff --git a/src/components/views/elements/AccessibleButton.tsx b/src/components/views/elements/AccessibleButton.tsx index c80f8a018..e58b06717 100644 --- a/src/components/views/elements/AccessibleButton.tsx +++ b/src/components/views/elements/AccessibleButton.tsx @@ -1,17 +1,9 @@ /* - Copyright 2016 Jani Mustonen +Copyright 2024 New Vector Ltd. +Copyright 2016 Jani Mustonen - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps, forwardRef, FunctionComponent, HTMLAttributes, InputHTMLAttributes, Ref } from "react"; diff --git a/src/components/views/elements/AppPermission.tsx b/src/components/views/elements/AppPermission.tsx index fd788290c..b5b4feee4 100644 --- a/src/components/views/elements/AppPermission.tsx +++ b/src/components/views/elements/AppPermission.tsx @@ -1,19 +1,11 @@ /* -Copyright 2017 Vector Creations Ltd -Copyright 2018, 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2018, 2019 New Vector Ltd +Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/AppTile.tsx b/src/components/views/elements/AppTile.tsx index 6d326b090..011f9a446 100644 --- a/src/components/views/elements/AppTile.tsx +++ b/src/components/views/elements/AppTile.tsx @@ -1,20 +1,12 @@ /* -Copyright 2017 Vector Creations Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. +Copyright 2020-2022 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2020 - 2022 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2018 New Vector Ltd +Copyright 2017 Vector Creations Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ContextType, createRef, CSSProperties, MutableRefObject, ReactNode } from "react"; @@ -58,6 +50,8 @@ import { WidgetMessagingStore } from "../../../stores/widgets/WidgetMessagingSto import { SdkContextClass } from "../../../contexts/SDKContext"; import { ModuleRunner } from "../../../modules/ModuleRunner"; import { parseUrl } from "../../../utils/UrlUtils"; +import RightPanelStore from "../../../stores/right-panel/RightPanelStore.ts"; +import { RightPanelPhases } from "../../../stores/right-panel/RightPanelStorePhases.ts"; interface IProps { app: IWidget | IApp; @@ -584,6 +578,14 @@ export default class AppTile extends React.Component { ? Container.Top : Container.Center; WidgetLayoutStore.instance.moveToContainer(this.props.room, this.props.app, targetContainer); + + // If the right panel has a timeline, but we're about to show the timeline in the main view, pop the right panel + if ( + targetContainer === Container.Top && + RightPanelStore.instance.currentCardForRoom(this.props.room.roomId).phase === RightPanelPhases.Timeline + ) { + RightPanelStore.instance.popCard(this.props.room.roomId); + } }; private onMinimiseClicked = (): void => { diff --git a/src/components/views/elements/AppWarning.tsx b/src/components/views/elements/AppWarning.tsx index 98b7f1954..5bca362fb 100644 --- a/src/components/views/elements/AppWarning.tsx +++ b/src/components/views/elements/AppWarning.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/CopyableText.tsx b/src/components/views/elements/CopyableText.tsx index 994d81607..18c82d599 100644 --- a/src/components/views/elements/CopyableText.tsx +++ b/src/components/views/elements/CopyableText.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019-2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. Copyright 2022 Šimon Brandner +Copyright 2019-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useState } from "react"; diff --git a/src/components/views/elements/DesktopCapturerSourcePicker.tsx b/src/components/views/elements/DesktopCapturerSourcePicker.tsx index 18cb9e6f4..26b759bcb 100644 --- a/src/components/views/elements/DesktopCapturerSourcePicker.tsx +++ b/src/components/views/elements/DesktopCapturerSourcePicker.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/DialPadBackspaceButton.tsx b/src/components/views/elements/DialPadBackspaceButton.tsx index 12c77e3f7..4165b9077 100644 --- a/src/components/views/elements/DialPadBackspaceButton.tsx +++ b/src/components/views/elements/DialPadBackspaceButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; diff --git a/src/components/views/elements/DialogButtons.tsx b/src/components/views/elements/DialogButtons.tsx index 6b376c309..7b49c9af5 100644 --- a/src/components/views/elements/DialogButtons.tsx +++ b/src/components/views/elements/DialogButtons.tsx @@ -1,19 +1,11 @@ /* -Copyright 2017 Aidan Gauland -Copyright 2018 New Vector Ltd. +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd. +Copyright 2017 Aidan Gauland -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/elements/Draggable.tsx b/src/components/views/elements/Draggable.tsx index 769980b59..69209f383 100644 --- a/src/components/views/elements/Draggable.tsx +++ b/src/components/views/elements/Draggable.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/Dropdown.tsx b/src/components/views/elements/Dropdown.tsx index d017ea864..c8802cd88 100644 --- a/src/components/views/elements/Dropdown.tsx +++ b/src/components/views/elements/Dropdown.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2017-2021 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2017 - 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, createRef, CSSProperties, ReactElement, ReactNode, Ref } from "react"; diff --git a/src/components/views/elements/EditableItemList.tsx b/src/components/views/elements/EditableItemList.tsx index 910acb8c5..dc6e6c09a 100644 --- a/src/components/views/elements/EditableItemList.tsx +++ b/src/components/views/elements/EditableItemList.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent } from "react"; diff --git a/src/components/views/elements/EditableText.tsx b/src/components/views/elements/EditableText.tsx index 4e2f228a8..f31660854 100644 --- a/src/components/views/elements/EditableText.tsx +++ b/src/components/views/elements/EditableText.tsx @@ -1,18 +1,9 @@ /* +Copyright 2018-2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/components/views/elements/EditableTextContainer.tsx b/src/components/views/elements/EditableTextContainer.tsx index c6df20549..84c5e5fc7 100644 --- a/src/components/views/elements/EditableTextContainer.tsx +++ b/src/components/views/elements/EditableTextContainer.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/EffectsOverlay.tsx b/src/components/views/elements/EffectsOverlay.tsx index d372d9ed7..3e5a5ead6 100644 --- a/src/components/views/elements/EffectsOverlay.tsx +++ b/src/components/views/elements/EffectsOverlay.tsx @@ -1,21 +1,14 @@ /* - Copyright 2020 Nurjin Jafar - Copyright 2020 Nordeck IT + Consulting GmbH. +Copyright 2024 New Vector Ltd. +Copyright 2020 Nurjin Jafar +Copyright 2020 Nordeck IT + Consulting GmbH. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FunctionComponent, useEffect, useRef } from "react"; import { logger } from "matrix-js-sdk/src/logger"; +import { MatrixEvent } from "matrix-js-sdk/src/matrix"; import dis from "../../../dispatcher/dispatcher"; import ICanvasEffect from "../../../effects/ICanvasEffect"; @@ -52,9 +45,10 @@ const EffectsOverlay: FunctionComponent = ({ roomWidth }) => { canvasRef.current.height = UIStore.instance.windowHeight; } }; - const onAction = (payload: { action: string }): void => { + const onAction = (payload: { action: string; event?: MatrixEvent }): void => { const actionPrefix = "effects."; - if (canvasRef.current && payload.action.startsWith(actionPrefix)) { + const isOutdated = isEventOutdated(payload.event); + if (canvasRef.current && payload.action.startsWith(actionPrefix) && !isOutdated) { const effect = payload.action.slice(actionPrefix.length); lazyLoadEffectModule(effect).then((module) => module?.start(canvasRef.current!)); } @@ -96,3 +90,19 @@ const EffectsOverlay: FunctionComponent = ({ roomWidth }) => { }; export default EffectsOverlay; + +// 48 hours +// 48h * 60m * 60s * 1000ms +const OUTDATED_EVENT_THRESHOLD = 48 * 60 * 60 * 1000; + +/** + * Return true if the event is older than 48h. + * @param event + */ +function isEventOutdated(event?: MatrixEvent): boolean { + if (!event) return false; + + const nowTs = Date.now(); + const eventTs = event.getTs(); + return nowTs - eventTs > OUTDATED_EVENT_THRESHOLD; +} diff --git a/src/components/views/elements/ErrorBoundary.tsx b/src/components/views/elements/ErrorBoundary.tsx index b5bc13f61..98e38350f 100644 --- a/src/components/views/elements/ErrorBoundary.tsx +++ b/src/components/views/elements/ErrorBoundary.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ErrorInfo, ReactNode } from "react"; diff --git a/src/components/views/elements/EventListSummary.tsx b/src/components/views/elements/EventListSummary.tsx index 4f5817e4c..7562f992c 100644 --- a/src/components/views/elements/EventListSummary.tsx +++ b/src/components/views/elements/EventListSummary.tsx @@ -1,19 +1,11 @@ /* -Copyright 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps, ReactNode } from "react"; diff --git a/src/components/views/elements/EventTilePreview.tsx b/src/components/views/elements/EventTilePreview.tsx index 4b8ccb0ed..bc9a16283 100644 --- a/src/components/views/elements/EventTilePreview.tsx +++ b/src/components/views/elements/EventTilePreview.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/ExternalLink.tsx b/src/components/views/elements/ExternalLink.tsx index 62a9ffc3c..4b56841eb 100644 --- a/src/components/views/elements/ExternalLink.tsx +++ b/src/components/views/elements/ExternalLink.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { DetailedHTMLProps, AnchorHTMLAttributes } from "react"; diff --git a/src/components/views/elements/FacePile.tsx b/src/components/views/elements/FacePile.tsx index d459040f0..74a857953 100644 --- a/src/components/views/elements/FacePile.tsx +++ b/src/components/views/elements/FacePile.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FC, HTMLAttributes, ReactNode } from "react"; diff --git a/src/components/views/elements/Field.tsx b/src/components/views/elements/Field.tsx index d60af8025..6cc5dffc4 100644 --- a/src/components/views/elements/Field.tsx +++ b/src/components/views/elements/Field.tsx @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { @@ -26,7 +17,7 @@ import classNames from "classnames"; import { debounce } from "lodash"; import { IFieldState, IValidationResult } from "./Validation"; -import Tooltip from "./Tooltip"; +import Tooltip, { Alignment } from "./Tooltip"; import { Key } from "../../../Keyboard"; // Invoke validation from user input (when typing, etc.) at most once every N ms. @@ -69,6 +60,8 @@ interface IProps { tooltipContent?: React.ReactNode; // If specified the tooltip will be shown regardless of feedback forceTooltipVisible?: boolean; + // If specified, the tooltip with be aligned accorindly with the field, defaults to Right. + tooltipAlignment?: Alignment; // If specified alongside tooltipContent, the class name to apply to the // tooltip itself. tooltipClassName?: string; @@ -270,6 +263,7 @@ export default class Field extends React.PureComponent { validateOnFocus, usePlaceholderAsHint, forceTooltipVisible, + tooltipAlignment, ...inputProps } = this.props; @@ -295,7 +289,7 @@ export default class Field extends React.PureComponent { tooltipClassName={classNames("mx_Field_tooltip", "mx_Tooltip_noMargin", tooltipClassName)} visible={visible} label={tooltipContent || this.state.feedback} - alignment={Tooltip.Alignment.Right} + alignment={tooltipAlignment || Alignment.Right} role={role} /> ); diff --git a/src/components/views/elements/FilterDropdown.tsx b/src/components/views/elements/FilterDropdown.tsx index 8dd5b0173..dbb5ceaa0 100644 --- a/src/components/views/elements/FilterDropdown.tsx +++ b/src/components/views/elements/FilterDropdown.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement } from "react"; diff --git a/src/components/views/elements/FilterTabGroup.tsx b/src/components/views/elements/FilterTabGroup.tsx index 91991fbd0..6129cd121 100644 --- a/src/components/views/elements/FilterTabGroup.tsx +++ b/src/components/views/elements/FilterTabGroup.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FieldsetHTMLAttributes, ReactNode } from "react"; diff --git a/src/components/views/elements/GenericEventListSummary.tsx b/src/components/views/elements/GenericEventListSummary.tsx index 79dda5841..ae20d186b 100644 --- a/src/components/views/elements/GenericEventListSummary.tsx +++ b/src/components/views/elements/GenericEventListSummary.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, useEffect } from "react"; diff --git a/src/components/views/elements/IRCTimelineProfileResizer.tsx b/src/components/views/elements/IRCTimelineProfileResizer.tsx index bae76d3f8..d653361e3 100644 --- a/src/components/views/elements/IRCTimelineProfileResizer.tsx +++ b/src/components/views/elements/IRCTimelineProfileResizer.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/ImageView.tsx b/src/components/views/elements/ImageView.tsx index ddc2769c4..8032f07b6 100644 --- a/src/components/views/elements/ImageView.tsx +++ b/src/components/views/elements/ImageView.tsx @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2020, 2021 Šimon Brandner +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, CSSProperties } from "react"; diff --git a/src/components/views/elements/InfoTooltip.tsx b/src/components/views/elements/InfoTooltip.tsx index 318552cde..0611d7767 100644 --- a/src/components/views/elements/InfoTooltip.tsx +++ b/src/components/views/elements/InfoTooltip.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/elements/InlineSpinner.tsx b/src/components/views/elements/InlineSpinner.tsx index 866fc4b1d..868bdb5d6 100644 --- a/src/components/views/elements/InlineSpinner.tsx +++ b/src/components/views/elements/InlineSpinner.tsx @@ -1,17 +1,8 @@ /* -Copyright 2017 New Vector Ltd. +Copyright 2017-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/InteractiveTooltip.tsx b/src/components/views/elements/InteractiveTooltip.tsx index 3428f3ef2..e282aa309 100644 --- a/src/components/views/elements/InteractiveTooltip.tsx +++ b/src/components/views/elements/InteractiveTooltip.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { CSSProperties, MouseEventHandler, ReactNode, RefCallback } from "react"; diff --git a/src/components/views/elements/InviteReason.tsx b/src/components/views/elements/InviteReason.tsx index 4adcbce3c..ea79f33e5 100644 --- a/src/components/views/elements/InviteReason.tsx +++ b/src/components/views/elements/InviteReason.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/elements/JoinRuleDropdown.tsx b/src/components/views/elements/JoinRuleDropdown.tsx index 55f5c0e0c..19afdc828 100644 --- a/src/components/views/elements/JoinRuleDropdown.tsx +++ b/src/components/views/elements/JoinRuleDropdown.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement } from "react"; diff --git a/src/components/views/elements/LabelledCheckbox.tsx b/src/components/views/elements/LabelledCheckbox.tsx index e6f7499ec..f46de7f16 100644 --- a/src/components/views/elements/LabelledCheckbox.tsx +++ b/src/components/views/elements/LabelledCheckbox.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/LabelledToggleSwitch.tsx b/src/components/views/elements/LabelledToggleSwitch.tsx index 2a1540920..34c08c252 100644 --- a/src/components/views/elements/LabelledToggleSwitch.tsx +++ b/src/components/views/elements/LabelledToggleSwitch.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/LanguageDropdown.tsx b/src/components/views/elements/LanguageDropdown.tsx index bbb37d60c..27b4b2b31 100644 --- a/src/components/views/elements/LanguageDropdown.tsx +++ b/src/components/views/elements/LanguageDropdown.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Marcel Radzio (MTRNord) Copyright 2017 Vector Creations Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement } from "react"; diff --git a/src/components/views/elements/LazyRenderList.tsx b/src/components/views/elements/LazyRenderList.tsx index 8e816bbfc..996a3981c 100644 --- a/src/components/views/elements/LazyRenderList.tsx +++ b/src/components/views/elements/LazyRenderList.tsx @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/LearnMore.tsx b/src/components/views/elements/LearnMore.tsx index c7c7a1925..02e685de3 100644 --- a/src/components/views/elements/LearnMore.tsx +++ b/src/components/views/elements/LearnMore.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/LinkWithTooltip.tsx b/src/components/views/elements/LinkWithTooltip.tsx index 854f01e0e..a9ca2606a 100644 --- a/src/components/views/elements/LinkWithTooltip.tsx +++ b/src/components/views/elements/LinkWithTooltip.tsx @@ -1,17 +1,9 @@ /* - Copyright 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022 The Matrix.org Foundation C.I.C. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/Measured.tsx b/src/components/views/elements/Measured.tsx index 355429c45..e2f9d14dd 100644 --- a/src/components/views/elements/Measured.tsx +++ b/src/components/views/elements/Measured.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/MiniAvatarUploader.tsx b/src/components/views/elements/MiniAvatarUploader.tsx index 35414c878..24a3a29ce 100644 --- a/src/components/views/elements/MiniAvatarUploader.tsx +++ b/src/components/views/elements/MiniAvatarUploader.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/elements/PersistedElement.tsx b/src/components/views/elements/PersistedElement.tsx index 99730ec34..a380723fb 100644 --- a/src/components/views/elements/PersistedElement.tsx +++ b/src/components/views/elements/PersistedElement.tsx @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd. +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { MutableRefObject, ReactNode } from "react"; diff --git a/src/components/views/elements/PersistentApp.tsx b/src/components/views/elements/PersistentApp.tsx index 0e876d9a3..6fbf0d31b 100644 --- a/src/components/views/elements/PersistentApp.tsx +++ b/src/components/views/elements/PersistentApp.tsx @@ -1,18 +1,10 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019-2022 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ContextType, CSSProperties, MutableRefObject, ReactNode } from "react"; diff --git a/src/components/views/elements/Pill.tsx b/src/components/views/elements/Pill.tsx index 52ad1e2b8..ace96388a 100644 --- a/src/components/views/elements/Pill.tsx +++ b/src/components/views/elements/Pill.tsx @@ -1,17 +1,9 @@ /* -Copyright 2017 - 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2017-2019 , 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement } from "react"; diff --git a/src/components/views/elements/PollCreateDialog.tsx b/src/components/views/elements/PollCreateDialog.tsx index 0fd1b7c21..eb6a762bf 100644 --- a/src/components/views/elements/PollCreateDialog.tsx +++ b/src/components/views/elements/PollCreateDialog.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, createRef } from "react"; diff --git a/src/components/views/elements/PowerSelector.tsx b/src/components/views/elements/PowerSelector.tsx index 7dcf3d78e..b600b2ba9 100644 --- a/src/components/views/elements/PowerSelector.tsx +++ b/src/components/views/elements/PowerSelector.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/ProgressBar.tsx b/src/components/views/elements/ProgressBar.tsx index 2759846ff..b0f4ccd9c 100644 --- a/src/components/views/elements/ProgressBar.tsx +++ b/src/components/views/elements/ProgressBar.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020,2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/QRCode.tsx b/src/components/views/elements/QRCode.tsx index 3f463291e..4eea8dc55 100644 --- a/src/components/views/elements/QRCode.tsx +++ b/src/components/views/elements/QRCode.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; diff --git a/src/components/views/elements/ReplyChain.tsx b/src/components/views/elements/ReplyChain.tsx index 621a360bc..26d75b7e6 100644 --- a/src/components/views/elements/ReplyChain.tsx +++ b/src/components/views/elements/ReplyChain.tsx @@ -1,18 +1,10 @@ /* -Copyright 2017 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2017-2023 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/ResizeHandle.tsx b/src/components/views/elements/ResizeHandle.tsx index 0927dd30d..489092166 100644 --- a/src/components/views/elements/ResizeHandle.tsx +++ b/src/components/views/elements/ResizeHandle.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; // eslint-disable-line no-unused-vars diff --git a/src/components/views/elements/RoomAliasField.tsx b/src/components/views/elements/RoomAliasField.tsx index 1ec057fff..f092f9d25 100644 --- a/src/components/views/elements/RoomAliasField.tsx +++ b/src/components/views/elements/RoomAliasField.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, KeyboardEventHandler } from "react"; diff --git a/src/components/views/elements/RoomFacePile.tsx b/src/components/views/elements/RoomFacePile.tsx index 0d1491edb..642af48c0 100644 --- a/src/components/views/elements/RoomFacePile.tsx +++ b/src/components/views/elements/RoomFacePile.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021-2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FC, HTMLAttributes, useContext } from "react"; diff --git a/src/components/views/elements/RoomName.tsx b/src/components/views/elements/RoomName.tsx index fc04b2182..169671f05 100644 --- a/src/components/views/elements/RoomName.tsx +++ b/src/components/views/elements/RoomName.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useEffect, useState } from "react"; diff --git a/src/components/views/elements/RoomTopic.tsx b/src/components/views/elements/RoomTopic.tsx index 964718830..a40ce2de3 100644 --- a/src/components/views/elements/RoomTopic.tsx +++ b/src/components/views/elements/RoomTopic.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback, useContext, useState } from "react"; diff --git a/src/components/views/elements/SSOButtons.tsx b/src/components/views/elements/SSOButtons.tsx index be795ee50..30da0f582 100644 --- a/src/components/views/elements/SSOButtons.tsx +++ b/src/components/views/elements/SSOButtons.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/SearchWarning.tsx b/src/components/views/elements/SearchWarning.tsx index 5891b245f..e7c651c80 100644 --- a/src/components/views/elements/SearchWarning.tsx +++ b/src/components/views/elements/SearchWarning.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/elements/ServerPicker.tsx b/src/components/views/elements/ServerPicker.tsx index fd489bd67..e6d899dff 100644 --- a/src/components/views/elements/ServerPicker.tsx +++ b/src/components/views/elements/ServerPicker.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020-2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/SettingsFlag.tsx b/src/components/views/elements/SettingsFlag.tsx index 86b82c64e..07fa3fd7f 100644 --- a/src/components/views/elements/SettingsFlag.tsx +++ b/src/components/views/elements/SettingsFlag.tsx @@ -1,18 +1,10 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/SpellCheckLanguagesDropdown.tsx b/src/components/views/elements/SpellCheckLanguagesDropdown.tsx index e5c927ad4..ce521c959 100644 --- a/src/components/views/elements/SpellCheckLanguagesDropdown.tsx +++ b/src/components/views/elements/SpellCheckLanguagesDropdown.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement } from "react"; diff --git a/src/components/views/elements/Spinner.tsx b/src/components/views/elements/Spinner.tsx index c6e194976..0a080693e 100644 --- a/src/components/views/elements/Spinner.tsx +++ b/src/components/views/elements/Spinner.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/Spoiler.tsx b/src/components/views/elements/Spoiler.tsx index e013237a8..031700948 100644 --- a/src/components/views/elements/Spoiler.tsx +++ b/src/components/views/elements/Spoiler.tsx @@ -1,17 +1,9 @@ /* - Copyright 2019 Sorunome +Copyright 2024 New Vector Ltd. +Copyright 2019 Sorunome - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/StyledCheckbox.tsx b/src/components/views/elements/StyledCheckbox.tsx index d2fb974db..388c3f0a3 100644 --- a/src/components/views/elements/StyledCheckbox.tsx +++ b/src/components/views/elements/StyledCheckbox.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/StyledRadioButton.tsx b/src/components/views/elements/StyledRadioButton.tsx index 6634cea75..72cf3645b 100644 --- a/src/components/views/elements/StyledRadioButton.tsx +++ b/src/components/views/elements/StyledRadioButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/StyledRadioGroup.tsx b/src/components/views/elements/StyledRadioGroup.tsx index 3a09b3fef..7e527aade 100644 --- a/src/components/views/elements/StyledRadioGroup.tsx +++ b/src/components/views/elements/StyledRadioGroup.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, ReactNode } from "react"; diff --git a/src/components/views/elements/SyntaxHighlight.tsx b/src/components/views/elements/SyntaxHighlight.tsx index caa7ceb51..7570ea22e 100644 --- a/src/components/views/elements/SyntaxHighlight.tsx +++ b/src/components/views/elements/SyntaxHighlight.tsx @@ -1,18 +1,10 @@ /* -Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/Tag.tsx b/src/components/views/elements/Tag.tsx index 6ce2ba69f..3f4b4d115 100644 --- a/src/components/views/elements/Tag.tsx +++ b/src/components/views/elements/Tag.tsx @@ -1,17 +1,9 @@ /* -Copyright 2022-2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { DetailedHTMLProps, HTMLAttributes } from "react"; diff --git a/src/components/views/elements/TagComposer.tsx b/src/components/views/elements/TagComposer.tsx index 34664d492..39dd85f81 100644 --- a/src/components/views/elements/TagComposer.tsx +++ b/src/components/views/elements/TagComposer.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/elements/TextWithTooltip.tsx b/src/components/views/elements/TextWithTooltip.tsx index b6a3bd0cd..34346cbe2 100644 --- a/src/components/views/elements/TextWithTooltip.tsx +++ b/src/components/views/elements/TextWithTooltip.tsx @@ -1,17 +1,8 @@ /* - Copyright 2019 New Vector Ltd. +Copyright 2019-2024 New Vector Ltd. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { HTMLAttributes } from "react"; diff --git a/src/components/views/elements/ToggleSwitch.tsx b/src/components/views/elements/ToggleSwitch.tsx index 8e595ff23..a6ed4fb4f 100644 --- a/src/components/views/elements/ToggleSwitch.tsx +++ b/src/components/views/elements/ToggleSwitch.tsx @@ -1,18 +1,9 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/elements/Tooltip.tsx b/src/components/views/elements/Tooltip.tsx index fdba5f6f5..5b7f01588 100644 --- a/src/components/views/elements/Tooltip.tsx +++ b/src/components/views/elements/Tooltip.tsx @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. +Copyright 2019, 2020 The Matrix.org Foundation C.I.C. Copyright 2019 New Vector Ltd Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2019, 2020 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2015, 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { CSSProperties } from "react"; diff --git a/src/components/views/elements/TruncatedList.tsx b/src/components/views/elements/TruncatedList.tsx index 4c6979832..073d5a91e 100644 --- a/src/components/views/elements/TruncatedList.tsx +++ b/src/components/views/elements/TruncatedList.tsx @@ -1,18 +1,9 @@ /* +Copyright 2017-2024 New Vector Ltd. Copyright 2016 OpenMarket Ltd -Copyright 2017 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/elements/UseCaseSelection.tsx b/src/components/views/elements/UseCaseSelection.tsx index d81d8928c..2c64c2903 100644 --- a/src/components/views/elements/UseCaseSelection.tsx +++ b/src/components/views/elements/UseCaseSelection.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/elements/UseCaseSelectionButton.tsx b/src/components/views/elements/UseCaseSelectionButton.tsx index 2335ee5f1..2899a1ee5 100644 --- a/src/components/views/elements/UseCaseSelectionButton.tsx +++ b/src/components/views/elements/UseCaseSelectionButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/elements/Validation.tsx b/src/components/views/elements/Validation.tsx index c0f21826f..db944f8e9 100644 --- a/src/components/views/elements/Validation.tsx +++ b/src/components/views/elements/Validation.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactChild, ReactNode } from "react"; diff --git a/src/components/views/elements/crypto/VerificationQRCode.tsx b/src/components/views/elements/crypto/VerificationQRCode.tsx index 1f2547234..82f4ca20d 100644 --- a/src/components/views/elements/crypto/VerificationQRCode.tsx +++ b/src/components/views/elements/crypto/VerificationQRCode.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/emojipicker/Category.tsx b/src/components/views/emojipicker/Category.tsx index ce5e5c81c..4c9fbc2d8 100644 --- a/src/components/views/emojipicker/Category.tsx +++ b/src/components/views/emojipicker/Category.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019 Tulir Asokan +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Tulir Asokan -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { RefObject } from "react"; diff --git a/src/components/views/emojipicker/Emoji.tsx b/src/components/views/emojipicker/Emoji.tsx index b210b6285..c3dfb24bd 100644 --- a/src/components/views/emojipicker/Emoji.tsx +++ b/src/components/views/emojipicker/Emoji.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019 Tulir Asokan +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Tulir Asokan -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/emojipicker/EmojiPicker.tsx b/src/components/views/emojipicker/EmojiPicker.tsx index 16258bb3d..4806ad421 100644 --- a/src/components/views/emojipicker/EmojiPicker.tsx +++ b/src/components/views/emojipicker/EmojiPicker.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019 Tulir Asokan +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Tulir Asokan -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { Dispatch } from "react"; diff --git a/src/components/views/emojipicker/Header.tsx b/src/components/views/emojipicker/Header.tsx index 27638bae1..b66f0dbaa 100644 --- a/src/components/views/emojipicker/Header.tsx +++ b/src/components/views/emojipicker/Header.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019 Tulir Asokan +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Tulir Asokan -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/emojipicker/Preview.tsx b/src/components/views/emojipicker/Preview.tsx index 080359292..8856a9f56 100644 --- a/src/components/views/emojipicker/Preview.tsx +++ b/src/components/views/emojipicker/Preview.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019 Tulir Asokan +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Tulir Asokan -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/emojipicker/QuickReactions.tsx b/src/components/views/emojipicker/QuickReactions.tsx index a8677995d..d26117186 100644 --- a/src/components/views/emojipicker/QuickReactions.tsx +++ b/src/components/views/emojipicker/QuickReactions.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019 Tulir Asokan +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Tulir Asokan -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/emojipicker/ReactionPicker.tsx b/src/components/views/emojipicker/ReactionPicker.tsx index 8265331a3..2c2eb442a 100644 --- a/src/components/views/emojipicker/ReactionPicker.tsx +++ b/src/components/views/emojipicker/ReactionPicker.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019 Tulir Asokan +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Tulir Asokan -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/emojipicker/Search.tsx b/src/components/views/emojipicker/Search.tsx index d7077f059..7be3f151b 100644 --- a/src/components/views/emojipicker/Search.tsx +++ b/src/components/views/emojipicker/Search.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019 Tulir Asokan +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Tulir Asokan -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/location/EnableLiveShare.tsx b/src/components/views/location/EnableLiveShare.tsx index 87582277b..1daeef044 100644 --- a/src/components/views/location/EnableLiveShare.tsx +++ b/src/components/views/location/EnableLiveShare.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the 'License'); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an 'AS IS' BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useState } from "react"; diff --git a/src/components/views/location/LiveDurationDropdown.tsx b/src/components/views/location/LiveDurationDropdown.tsx index 3db5a380f..f0a85b842 100644 --- a/src/components/views/location/LiveDurationDropdown.tsx +++ b/src/components/views/location/LiveDurationDropdown.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement } from "react"; diff --git a/src/components/views/location/LocationButton.tsx b/src/components/views/location/LocationButton.tsx index aab595e1f..5ec67c421 100644 --- a/src/components/views/location/LocationButton.tsx +++ b/src/components/views/location/LocationButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, SyntheticEvent, useContext } from "react"; diff --git a/src/components/views/location/LocationPicker.tsx b/src/components/views/location/LocationPicker.tsx index d4739935c..c45521830 100644 --- a/src/components/views/location/LocationPicker.tsx +++ b/src/components/views/location/LocationPicker.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { SyntheticEvent } from "react"; diff --git a/src/components/views/location/LocationShareMenu.tsx b/src/components/views/location/LocationShareMenu.tsx index 036e2e1fe..4f64a116c 100644 --- a/src/components/views/location/LocationShareMenu.tsx +++ b/src/components/views/location/LocationShareMenu.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { SyntheticEvent, useContext, useState } from "react"; diff --git a/src/components/views/location/LocationViewDialog.tsx b/src/components/views/location/LocationViewDialog.tsx index d275253cf..93016bb9a 100644 --- a/src/components/views/location/LocationViewDialog.tsx +++ b/src/components/views/location/LocationViewDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/location/Map.tsx b/src/components/views/location/Map.tsx index 7d726da49..1ac22b9e8 100644 --- a/src/components/views/location/Map.tsx +++ b/src/components/views/location/Map.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, useContext, useEffect, useState } from "react"; diff --git a/src/components/views/location/MapError.tsx b/src/components/views/location/MapError.tsx index 3a00bb38e..5b19d1052 100644 --- a/src/components/views/location/MapError.tsx +++ b/src/components/views/location/MapError.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/location/MapFallback.tsx b/src/components/views/location/MapFallback.tsx index 756bf23e9..cb1a57976 100644 --- a/src/components/views/location/MapFallback.tsx +++ b/src/components/views/location/MapFallback.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/location/Marker.tsx b/src/components/views/location/Marker.tsx index 5045d87a0..93a5c2883 100644 --- a/src/components/views/location/Marker.tsx +++ b/src/components/views/location/Marker.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, useState } from "react"; diff --git a/src/components/views/location/ShareDialogButtons.tsx b/src/components/views/location/ShareDialogButtons.tsx index dc976b4c6..e544facb0 100644 --- a/src/components/views/location/ShareDialogButtons.tsx +++ b/src/components/views/location/ShareDialogButtons.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the 'License'); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an 'AS IS' BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/location/ShareType.tsx b/src/components/views/location/ShareType.tsx index 6249774d4..f580d4638 100644 --- a/src/components/views/location/ShareType.tsx +++ b/src/components/views/location/ShareType.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { HTMLAttributes, useContext } from "react"; diff --git a/src/components/views/location/SmartMarker.tsx b/src/components/views/location/SmartMarker.tsx index 27f6eb5d0..50e927b96 100644 --- a/src/components/views/location/SmartMarker.tsx +++ b/src/components/views/location/SmartMarker.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, useCallback, useEffect, useState } from "react"; diff --git a/src/components/views/location/ZoomButtons.tsx b/src/components/views/location/ZoomButtons.tsx index 970835cff..2ba3d6a59 100644 --- a/src/components/views/location/ZoomButtons.tsx +++ b/src/components/views/location/ZoomButtons.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/location/index.tsx b/src/components/views/location/index.tsx index 3df2289d6..452b7ac54 100644 --- a/src/components/views/location/index.tsx +++ b/src/components/views/location/index.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // Exports location components which touch maplibre-gs wrapped in React Suspense to enable code splitting diff --git a/src/components/views/location/shareLocation.ts b/src/components/views/location/shareLocation.ts index 42a8e25c5..8d4349735 100644 --- a/src/components/views/location/shareLocation.ts +++ b/src/components/views/location/shareLocation.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/components/views/messages/CallEvent.tsx b/src/components/views/messages/CallEvent.tsx index c05b56563..fa8d14f5f 100644 --- a/src/components/views/messages/CallEvent.tsx +++ b/src/components/views/messages/CallEvent.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { forwardRef, useCallback, useContext, useMemo } from "react"; diff --git a/src/components/views/messages/DateSeparator.tsx b/src/components/views/messages/DateSeparator.tsx index 09e78708d..10ec7ddad 100644 --- a/src/components/views/messages/DateSeparator.tsx +++ b/src/components/views/messages/DateSeparator.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2015-2021 The Matrix.org Foundation C.I.C. Copyright 2018 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2015 - 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/DecryptionFailureBody.tsx b/src/components/views/messages/DecryptionFailureBody.tsx index f0bce43b8..78e86d1db 100644 --- a/src/components/views/messages/DecryptionFailureBody.tsx +++ b/src/components/views/messages/DecryptionFailureBody.tsx @@ -1,19 +1,12 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022-2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ +import classNames from "classnames"; import React, { forwardRef, ForwardRefExoticComponent, useContext } from "react"; import { MatrixEvent } from "matrix-js-sdk/src/matrix"; import { DecryptionFailureCode } from "matrix-js-sdk/src/crypto-api"; @@ -23,8 +16,9 @@ import { IBodyProps } from "./IBodyProps"; import TchapUrls from "../../../../../../src/tchap/util/TchapUrls"; // :TCHAP: better-text-for-locked-messages import ExternalLink from "../elements/ExternalLink"; // :TCHAP: better-text-for-locked-messages import { LocalDeviceVerificationStateContext } from "../../../contexts/LocalDeviceVerificationStateContext"; +import { Icon as WarningBadgeIcon } from "../../../../res/img/compound/error-16px.svg"; -function getErrorMessage(mxEvent: MatrixEvent, isVerified: boolean | undefined): string { +function getErrorMessage(mxEvent: MatrixEvent, isVerified: boolean | undefined): string | React.JSX.Element { switch (mxEvent.decryptionFailureReason) { case DecryptionFailureCode.MEGOLM_KEY_WITHHELD_FOR_UNVERIFIED_DEVICE: return _t("timeline|decryption_failure|blocked"); @@ -42,7 +36,22 @@ function getErrorMessage(mxEvent: MatrixEvent, isVerified: boolean | undefined): break; case DecryptionFailureCode.HISTORICAL_MESSAGE_USER_NOT_JOINED: + // TODO: event should be hidden instead of showing this error. + // To be revisited as part of https://github.com/element-hq/element-meta/issues/2449 return _t("timeline|decryption_failure|historical_event_user_not_joined"); + + case DecryptionFailureCode.SENDER_IDENTITY_PREVIOUSLY_VERIFIED: + return ( + + + {_t("timeline|decryption_failure|sender_identity_previously_verified")} + + ); + + case DecryptionFailureCode.UNSIGNED_SENDER_DEVICE: + // TODO: event should be hidden instead of showing this error. + // To be revisited as part of https://github.com/element-hq/element-meta/issues/2449 + return _t("timeline|decryption_failure|sender_unsigned_device"); } // :TCHAP: better-text-for-locked-messages : return _t("timeline|decryption_failure|unable_to_decrypt"); return _t( @@ -59,11 +68,24 @@ function getErrorMessage(mxEvent: MatrixEvent, isVerified: boolean | undefined): // end :TCHAP: } +/** Get an extra CSS class, specific to the decryption failure reason */ +function errorClassName(mxEvent: MatrixEvent): string | null { + switch (mxEvent.decryptionFailureReason) { + case DecryptionFailureCode.SENDER_IDENTITY_PREVIOUSLY_VERIFIED: + return "mx_DecryptionFailureVerifiedIdentityChanged"; + + default: + return null; + } +} + // A placeholder element for messages that could not be decrypted export const DecryptionFailureBody = forwardRef(({ mxEvent }, ref): React.JSX.Element => { const verificationState = useContext(LocalDeviceVerificationStateContext); + const classes = classNames("mx_DecryptionFailureBody", "mx_EventTile_content", errorClassName(mxEvent)); + return ( -
    +
    {getErrorMessage(mxEvent, verificationState)}
    ); diff --git a/src/components/views/messages/DisambiguatedProfile.tsx b/src/components/views/messages/DisambiguatedProfile.tsx index da4614338..0e7d2e046 100644 --- a/src/components/views/messages/DisambiguatedProfile.tsx +++ b/src/components/views/messages/DisambiguatedProfile.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. Copyright 2021 Šimon Brandner -Copyright 2022-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/DownloadActionButton.tsx b/src/components/views/messages/DownloadActionButton.tsx index 5bb6b1788..a6eafbb5e 100644 --- a/src/components/views/messages/DownloadActionButton.tsx +++ b/src/components/views/messages/DownloadActionButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/messages/EditHistoryMessage.tsx b/src/components/views/messages/EditHistoryMessage.tsx index de2ba8a1b..dcb8b8277 100644 --- a/src/components/views/messages/EditHistoryMessage.tsx +++ b/src/components/views/messages/EditHistoryMessage.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/components/views/messages/EncryptionEvent.tsx b/src/components/views/messages/EncryptionEvent.tsx index 67ec020aa..e721662cb 100644 --- a/src/components/views/messages/EncryptionEvent.tsx +++ b/src/components/views/messages/EncryptionEvent.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { forwardRef, useContext } from "react"; diff --git a/src/components/views/messages/EventTileBubble.tsx b/src/components/views/messages/EventTileBubble.tsx index db60d706f..05c8a66f9 100644 --- a/src/components/views/messages/EventTileBubble.tsx +++ b/src/components/views/messages/EventTileBubble.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { forwardRef, ReactNode, ReactChild } from "react"; diff --git a/src/components/views/messages/HiddenBody.tsx b/src/components/views/messages/HiddenBody.tsx index 7fff4161a..9bde6adef 100644 --- a/src/components/views/messages/HiddenBody.tsx +++ b/src/components/views/messages/HiddenBody.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/IBodyProps.ts b/src/components/views/messages/IBodyProps.ts index fcc204dae..e48ba96b5 100644 --- a/src/components/views/messages/IBodyProps.ts +++ b/src/components/views/messages/IBodyProps.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { LegacyRef } from "react"; diff --git a/src/components/views/messages/IMediaBody.ts b/src/components/views/messages/IMediaBody.ts index b578edbbe..c8f7f5b95 100644 --- a/src/components/views/messages/IMediaBody.ts +++ b/src/components/views/messages/IMediaBody.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MediaEventHelper } from "../../../utils/MediaEventHelper"; diff --git a/src/components/views/messages/JumpToDatePicker.tsx b/src/components/views/messages/JumpToDatePicker.tsx index 939146ec5..aecc239df 100644 --- a/src/components/views/messages/JumpToDatePicker.tsx +++ b/src/components/views/messages/JumpToDatePicker.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useState, FormEvent } from "react"; diff --git a/src/components/views/messages/LegacyCallEvent.tsx b/src/components/views/messages/LegacyCallEvent.tsx index dd8ccb533..9276b2929 100644 --- a/src/components/views/messages/LegacyCallEvent.tsx +++ b/src/components/views/messages/LegacyCallEvent.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/components/views/messages/MAudioBody.tsx b/src/components/views/messages/MAudioBody.tsx index 5824f9358..8794d3eed 100644 --- a/src/components/views/messages/MAudioBody.tsx +++ b/src/components/views/messages/MAudioBody.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/MBeaconBody.tsx b/src/components/views/messages/MBeaconBody.tsx index 16f85559d..8b250fa0d 100644 --- a/src/components/views/messages/MBeaconBody.tsx +++ b/src/components/views/messages/MBeaconBody.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ForwardRefExoticComponent, useCallback, useContext, useEffect, useState } from "react"; diff --git a/src/components/views/messages/MFileBody.tsx b/src/components/views/messages/MFileBody.tsx index d7542b974..f984575e3 100644 --- a/src/components/views/messages/MFileBody.tsx +++ b/src/components/views/messages/MFileBody.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { AllHTMLAttributes, createRef } from "react"; diff --git a/src/components/views/messages/MImageBody.tsx b/src/components/views/messages/MImageBody.tsx index 8c3c3431a..04d6fb0c8 100644 --- a/src/components/views/messages/MImageBody.tsx +++ b/src/components/views/messages/MImageBody.tsx @@ -1,18 +1,10 @@ /* -Copyright 2015 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2021 The Matrix.org Foundation C.I.C. Copyright 2018, 2019 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps, createRef, ReactNode } from "react"; diff --git a/src/components/views/messages/MImageReplyBody.tsx b/src/components/views/messages/MImageReplyBody.tsx index eb9cff661..eb56eb2ab 100644 --- a/src/components/views/messages/MImageReplyBody.tsx +++ b/src/components/views/messages/MImageReplyBody.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020-2021 Tulir Asokan +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 Tulir Asokan -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/MJitsiWidgetEvent.tsx b/src/components/views/messages/MJitsiWidgetEvent.tsx index d86dbbbe7..a547a78f9 100644 --- a/src/components/views/messages/MJitsiWidgetEvent.tsx +++ b/src/components/views/messages/MJitsiWidgetEvent.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/MKeyVerificationRequest.tsx b/src/components/views/messages/MKeyVerificationRequest.tsx index d35e7917d..56e7b1c39 100644 --- a/src/components/views/messages/MKeyVerificationRequest.tsx +++ b/src/components/views/messages/MKeyVerificationRequest.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019, 2020, 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019, 2020 , 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/MLocationBody.tsx b/src/components/views/messages/MLocationBody.tsx index f3f1a3d9d..742587e0a 100644 --- a/src/components/views/messages/MLocationBody.tsx +++ b/src/components/views/messages/MLocationBody.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/MPollBody.tsx b/src/components/views/messages/MPollBody.tsx index 5fad5acd5..de9be6cf9 100644 --- a/src/components/views/messages/MPollBody.tsx +++ b/src/components/views/messages/MPollBody.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/messages/MPollEndBody.tsx b/src/components/views/messages/MPollEndBody.tsx index 4e104d7ce..94671fea1 100644 --- a/src/components/views/messages/MPollEndBody.tsx +++ b/src/components/views/messages/MPollEndBody.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useEffect, useState, useContext, ForwardRefExoticComponent } from "react"; diff --git a/src/components/views/messages/MStickerBody.tsx b/src/components/views/messages/MStickerBody.tsx index cdf388c14..404fa924f 100644 --- a/src/components/views/messages/MStickerBody.tsx +++ b/src/components/views/messages/MStickerBody.tsx @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps, ReactNode } from "react"; diff --git a/src/components/views/messages/MVideoBody.tsx b/src/components/views/messages/MVideoBody.tsx index faa5dbd4f..1b742df43 100644 --- a/src/components/views/messages/MVideoBody.tsx +++ b/src/components/views/messages/MVideoBody.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/messages/MVoiceMessageBody.tsx b/src/components/views/messages/MVoiceMessageBody.tsx index c76e0b68b..ef237ca89 100644 --- a/src/components/views/messages/MVoiceMessageBody.tsx +++ b/src/components/views/messages/MVoiceMessageBody.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/MVoiceOrAudioBody.tsx b/src/components/views/messages/MVoiceOrAudioBody.tsx index 95093ef2b..cfbeaa820 100644 --- a/src/components/views/messages/MVoiceOrAudioBody.tsx +++ b/src/components/views/messages/MVoiceOrAudioBody.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/MessageActionBar.tsx b/src/components/views/messages/MessageActionBar.tsx index 2a4c01f5e..9114a4733 100644 --- a/src/components/views/messages/MessageActionBar.tsx +++ b/src/components/views/messages/MessageActionBar.tsx @@ -1,19 +1,11 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2019-2023 The Matrix.org Foundation C.I.C. Copyright 2019 New Vector Ltd Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2019 - 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement, useCallback, useContext, useEffect } from "react"; @@ -24,8 +16,13 @@ import { MsgType, RelationType, M_BEACON_INFO, + EventTimeline, + RoomStateEvent, + EventType, } from "matrix-js-sdk/src/matrix"; import classNames from "classnames"; +import { Icon as PinIcon } from "@vector-im/compound-design-tokens/icons/pin.svg"; +import { Icon as UnpinIcon } from "@vector-im/compound-design-tokens/icons/unpin.svg"; import { Icon as ContextMenuIcon } from "../../../../res/img/element-icons/context-menu.svg"; import { Icon as EditIcon } from "../../../../res/img/element-icons/room/message-bar/edit.svg"; @@ -62,6 +59,8 @@ import { GetRelationsForEvent, IEventTileType } from "../rooms/EventTile"; import { VoiceBroadcastInfoEventType } from "../../../voice-broadcast/types"; import { ButtonEvent } from "../elements/AccessibleButton"; import TchapUIFeature from "../../../../../../src/tchap/util/TchapUIFeature"; // :TCHAP: remove-thread-buttons +import PinningUtils from "../../../utils/PinningUtils"; +import PosthogTrackers from "../../../PosthogTrackers.ts"; interface IOptionsButtonProps { mxEvent: MatrixEvent; @@ -276,12 +275,20 @@ export default class MessageActionBar extends React.PureComponent { @@ -295,6 +302,12 @@ export default class MessageActionBar extends React.PureComponent { + // If the event is pinned or unpinned, rerender the component. + if (!event || event.getType() !== EventType.RoomPinnedEvents) return; + this.forceUpdate(); + }; + private onSent = (): void => { // When an event is sent and echoed the possible actions change. this.forceUpdate(); @@ -388,6 +401,18 @@ export default class MessageActionBar extends React.PureComponent => { + // Don't open the regular browser or our context menu on right-click + event.preventDefault(); + event.stopPropagation(); + + await PinningUtils.pinOrUnpinEvent(MatrixClientPeg.safeGet(), this.props.mxEvent); + PosthogTrackers.trackPinUnpinMessage(isPinned ? "Pin" : "Unpin", "Timeline"); + }; + public render(): React.ReactNode { const toolbarOpts: JSX.Element[] = []; if (canEditContent(MatrixClientPeg.safeGet(), this.props.mxEvent)) { @@ -405,6 +430,25 @@ export default class MessageActionBar extends React.PureComponent this.onPinClick(e, isPinned)} + onContextMenu={(e: ButtonEvent) => this.onPinClick(e, isPinned)} + key="pin" + placement="left" + > + {isPinned ? : } + , + ); + } + const cancelSendingButton = ( +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/messages/MjolnirBody.tsx b/src/components/views/messages/MjolnirBody.tsx index 301c64116..678671d42 100644 --- a/src/components/views/messages/MjolnirBody.tsx +++ b/src/components/views/messages/MjolnirBody.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/ReactionsRow.tsx b/src/components/views/messages/ReactionsRow.tsx index c5d004b12..eba949960 100644 --- a/src/components/views/messages/ReactionsRow.tsx +++ b/src/components/views/messages/ReactionsRow.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { SyntheticEvent } from "react"; diff --git a/src/components/views/messages/ReactionsRowButton.tsx b/src/components/views/messages/ReactionsRowButton.tsx index 7c4dcc8b3..4a1d8d67f 100644 --- a/src/components/views/messages/ReactionsRowButton.tsx +++ b/src/components/views/messages/ReactionsRowButton.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/ReactionsRowButtonTooltip.tsx b/src/components/views/messages/ReactionsRowButtonTooltip.tsx index f9a5c2d66..fe59f537a 100644 --- a/src/components/views/messages/ReactionsRowButtonTooltip.tsx +++ b/src/components/views/messages/ReactionsRowButtonTooltip.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { PropsWithChildren } from "react"; diff --git a/src/components/views/messages/RedactedBody.tsx b/src/components/views/messages/RedactedBody.tsx index e3c7684ab..7da9eef03 100644 --- a/src/components/views/messages/RedactedBody.tsx +++ b/src/components/views/messages/RedactedBody.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ForwardRefExoticComponent, useContext } from "react"; diff --git a/src/components/views/messages/RoomAvatarEvent.tsx b/src/components/views/messages/RoomAvatarEvent.tsx index d4ee4cdd6..295d2b068 100644 --- a/src/components/views/messages/RoomAvatarEvent.tsx +++ b/src/components/views/messages/RoomAvatarEvent.tsx @@ -1,19 +1,11 @@ /* -Copyright 2017 Vector Creations Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/RoomPredecessorTile.tsx b/src/components/views/messages/RoomPredecessorTile.tsx index 36679d906..2e8633feb 100644 --- a/src/components/views/messages/RoomPredecessorTile.tsx +++ b/src/components/views/messages/RoomPredecessorTile.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2019-2023 The Matrix.org Foundation C.I.C. Copyright 2018 New Vector Ltd -Copyright 2019, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback, useContext } from "react"; diff --git a/src/components/views/messages/SenderProfile.tsx b/src/components/views/messages/SenderProfile.tsx index 20323b2e7..7c239d050 100644 --- a/src/components/views/messages/SenderProfile.tsx +++ b/src/components/views/messages/SenderProfile.tsx @@ -1,18 +1,10 @@ /* - Copyright 2023 The Matrix.org Foundation C.I.C. - Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. +Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/TextualBody.tsx b/src/components/views/messages/TextualBody.tsx index 5dba3e42b..8b7bfb9a5 100644 --- a/src/components/views/messages/TextualBody.tsx +++ b/src/components/views/messages/TextualBody.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, SyntheticEvent, MouseEvent } from "react"; diff --git a/src/components/views/messages/TextualEvent.tsx b/src/components/views/messages/TextualEvent.tsx index 35351ce53..1c1ba26d0 100644 --- a/src/components/views/messages/TextualEvent.tsx +++ b/src/components/views/messages/TextualEvent.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/TileErrorBoundary.tsx b/src/components/views/messages/TileErrorBoundary.tsx index 2e139593a..b1cc53f26 100644 --- a/src/components/views/messages/TileErrorBoundary.tsx +++ b/src/components/views/messages/TileErrorBoundary.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/messages/TimelineSeparator.tsx b/src/components/views/messages/TimelineSeparator.tsx index b3a2b9ccf..5657ca7e6 100644 --- a/src/components/views/messages/TimelineSeparator.tsx +++ b/src/components/views/messages/TimelineSeparator.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/messages/UnknownBody.tsx b/src/components/views/messages/UnknownBody.tsx index dd8b2e494..ce9355b4b 100644 --- a/src/components/views/messages/UnknownBody.tsx +++ b/src/components/views/messages/UnknownBody.tsx @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { forwardRef, ForwardRefExoticComponent } from "react"; diff --git a/src/components/views/messages/ViewSourceEvent.tsx b/src/components/views/messages/ViewSourceEvent.tsx index 0a3b44a2b..6f8dd7f27 100644 --- a/src/components/views/messages/ViewSourceEvent.tsx +++ b/src/components/views/messages/ViewSourceEvent.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/messages/shared/MediaProcessingError.tsx b/src/components/views/messages/shared/MediaProcessingError.tsx index f95843dc5..39c0017f5 100644 --- a/src/components/views/messages/shared/MediaProcessingError.tsx +++ b/src/components/views/messages/shared/MediaProcessingError.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/pips/WidgetPip.tsx b/src/components/views/pips/WidgetPip.tsx index a1710d16c..38f4c1622 100644 --- a/src/components/views/pips/WidgetPip.tsx +++ b/src/components/views/pips/WidgetPip.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FC, MutableRefObject, useCallback, useMemo } from "react"; diff --git a/src/components/views/polls/PollOption.tsx b/src/components/views/polls/PollOption.tsx index bbd2eeedf..c84653c2a 100644 --- a/src/components/views/polls/PollOption.tsx +++ b/src/components/views/polls/PollOption.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/polls/pollHistory/PollDetail.tsx b/src/components/views/polls/pollHistory/PollDetail.tsx index 739290bbf..fbc09ffce 100644 --- a/src/components/views/polls/pollHistory/PollDetail.tsx +++ b/src/components/views/polls/pollHistory/PollDetail.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/polls/pollHistory/PollDetailHeader.tsx b/src/components/views/polls/pollHistory/PollDetailHeader.tsx index 582f0188c..4b4ca89b3 100644 --- a/src/components/views/polls/pollHistory/PollDetailHeader.tsx +++ b/src/components/views/polls/pollHistory/PollDetailHeader.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/polls/pollHistory/PollHistory.tsx b/src/components/views/polls/pollHistory/PollHistory.tsx index 6843b81c2..4d145f305 100644 --- a/src/components/views/polls/pollHistory/PollHistory.tsx +++ b/src/components/views/polls/pollHistory/PollHistory.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useState } from "react"; diff --git a/src/components/views/polls/pollHistory/PollHistoryList.tsx b/src/components/views/polls/pollHistory/PollHistoryList.tsx index 7940a6a6a..466ad2d58 100644 --- a/src/components/views/polls/pollHistory/PollHistoryList.tsx +++ b/src/components/views/polls/pollHistory/PollHistoryList.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/polls/pollHistory/PollListItem.tsx b/src/components/views/polls/pollHistory/PollListItem.tsx index 7115f3b6a..544af0a68 100644 --- a/src/components/views/polls/pollHistory/PollListItem.tsx +++ b/src/components/views/polls/pollHistory/PollListItem.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/polls/pollHistory/PollListItemEnded.tsx b/src/components/views/polls/pollHistory/PollListItemEnded.tsx index 5da777232..e2f80e8eb 100644 --- a/src/components/views/polls/pollHistory/PollListItemEnded.tsx +++ b/src/components/views/polls/pollHistory/PollListItemEnded.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useEffect, useState } from "react"; diff --git a/src/components/views/polls/pollHistory/fetchPastPolls.ts b/src/components/views/polls/pollHistory/fetchPastPolls.ts index 958dc68a1..d4d58948c 100644 --- a/src/components/views/polls/pollHistory/fetchPastPolls.ts +++ b/src/components/views/polls/pollHistory/fetchPastPolls.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useCallback, useEffect, useState } from "react"; diff --git a/src/components/views/polls/pollHistory/types.ts b/src/components/views/polls/pollHistory/types.ts index 166420347..75b02f0fc 100644 --- a/src/components/views/polls/pollHistory/types.ts +++ b/src/components/views/polls/pollHistory/types.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/components/views/polls/pollHistory/usePollHistory.ts b/src/components/views/polls/pollHistory/usePollHistory.ts index 111f22b46..6594cfbb4 100644 --- a/src/components/views/polls/pollHistory/usePollHistory.ts +++ b/src/components/views/polls/pollHistory/usePollHistory.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useEffect, useState } from "react"; diff --git a/src/components/views/right_panel/BaseCard.tsx b/src/components/views/right_panel/BaseCard.tsx index 8443da220..cfc49a823 100644 --- a/src/components/views/right_panel/BaseCard.tsx +++ b/src/components/views/right_panel/BaseCard.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { forwardRef, ReactNode, KeyboardEvent, Ref, MouseEvent } from "react"; diff --git a/src/components/views/right_panel/EmptyState.tsx b/src/components/views/right_panel/EmptyState.tsx index 7189cb8b3..3d7c9a89a 100644 --- a/src/components/views/right_panel/EmptyState.tsx +++ b/src/components/views/right_panel/EmptyState.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentType } from "react"; diff --git a/src/components/views/right_panel/EncryptionInfo.tsx b/src/components/views/right_panel/EncryptionInfo.tsx index 850967c44..588d2d910 100644 --- a/src/components/views/right_panel/EncryptionInfo.tsx +++ b/src/components/views/right_panel/EncryptionInfo.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/right_panel/EncryptionPanel.tsx b/src/components/views/right_panel/EncryptionPanel.tsx index 26ba841f7..37aad94f0 100644 --- a/src/components/views/right_panel/EncryptionPanel.tsx +++ b/src/components/views/right_panel/EncryptionPanel.tsx @@ -1,22 +1,15 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback, useEffect, useRef, useState } from "react"; import { VerificationPhase, VerificationRequest, VerificationRequestEvent } from "matrix-js-sdk/src/crypto-api"; import { RoomMember, User } from "matrix-js-sdk/src/matrix"; +import { logger } from "matrix-js-sdk/src/logger"; import EncryptionInfo from "./EncryptionInfo"; import VerificationPanel from "./VerificationPanel"; @@ -48,7 +41,12 @@ const EncryptionPanel: React.FC = (props: IProps) => { // state to show a spinner immediately after clicking "start verification", // before we have a request const [isRequesting, setRequesting] = useState(false); - const [phase, setPhase] = useState(request?.phase); + const [phase, doSetPhase] = useState(request?.phase); + const setPhase = (phase: VerificationPhase | undefined): void => { + logger.debug(`EncryptionPanel: phase now ${phase === undefined ? phase : VerificationPhase[phase]}`); + doSetPhase(phase); + }; + useEffect(() => { setRequest(verificationRequest); if (verificationRequest) { diff --git a/src/components/views/right_panel/ExtensionsCard.tsx b/src/components/views/right_panel/ExtensionsCard.tsx index 22ea8bad9..a3dc8bef4 100644 --- a/src/components/views/right_panel/ExtensionsCard.tsx +++ b/src/components/views/right_panel/ExtensionsCard.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useEffect, useMemo, useState } from "react"; diff --git a/src/components/views/right_panel/HeaderButton.tsx b/src/components/views/right_panel/HeaderButton.tsx index bfe463c6b..5d836604d 100644 --- a/src/components/views/right_panel/HeaderButton.tsx +++ b/src/components/views/right_panel/HeaderButton.tsx @@ -1,21 +1,13 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. +Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd Copyright 2017 Vector Creations Ltd Copyright 2017 New Vector Ltd -Copyright 2018 New Vector Ltd -Copyright 2019 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2015, 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/right_panel/HeaderButtons.tsx b/src/components/views/right_panel/HeaderButtons.tsx index 35c2275ad..cfa86df76 100644 --- a/src/components/views/right_panel/HeaderButtons.tsx +++ b/src/components/views/right_panel/HeaderButtons.tsx @@ -1,21 +1,13 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. +Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd Copyright 2017 Vector Creations Ltd Copyright 2017 New Vector Ltd -Copyright 2018 New Vector Ltd -Copyright 2019 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2015, 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/right_panel/LegacyRoomHeaderButtons.tsx b/src/components/views/right_panel/LegacyRoomHeaderButtons.tsx index 226339963..d75638d8d 100644 --- a/src/components/views/right_panel/LegacyRoomHeaderButtons.tsx +++ b/src/components/views/right_panel/LegacyRoomHeaderButtons.tsx @@ -1,21 +1,13 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. +Copyright 2019-2023 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd Copyright 2017 Vector Creations Ltd Copyright 2017 New Vector Ltd -Copyright 2018 New Vector Ltd -Copyright 2019 - 2023 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2015, 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -28,9 +20,7 @@ import HeaderButtons, { HeaderKind } from "./HeaderButtons"; import { RightPanelPhases } from "../../../stores/right-panel/RightPanelStorePhases"; import { ActionPayload } from "../../../dispatcher/payloads"; import RightPanelStore from "../../../stores/right-panel/RightPanelStore"; -import { useReadPinnedEvents, usePinnedEvents } from "./PinnedMessagesCard"; import { showThreadPanel } from "../../../dispatcher/dispatch-actions/threads"; -import SettingsStore from "../../../settings/SettingsStore"; import { RoomNotificationStateStore, UPDATE_STATUS_INDICATOR, @@ -41,6 +31,7 @@ import PosthogTrackers from "../../../PosthogTrackers"; import { ButtonEvent } from "../elements/AccessibleButton"; import { doesRoomOrThreadHaveUnreadMessages } from "../../../Unread"; import TchapUIFeature from "../../../../../../src/tchap/util/TchapUIFeature"; // :TCHAP: remove-thread-buttons +import { usePinnedEvents, useReadPinnedEvents } from "../../../hooks/usePinnedEvents"; const ROOM_INFO_PHASES = [ RightPanelPhases.RoomSummary, @@ -254,17 +245,16 @@ export default class LegacyRoomHeaderButtons extends HeaderButtons { const rightPanelPhaseButtons: Map = new Map(); - if (SettingsStore.getValue("feature_pinning")) { - rightPanelPhaseButtons.set( - RightPanelPhases.PinnedMessages, - , - ); - } + rightPanelPhaseButtons.set( + RightPanelPhases.PinnedMessages, + , + ); + rightPanelPhaseButtons.set( RightPanelPhases.Timeline, { - const [pinnedEvents, setPinnedEvents] = useState(getPinnedEventIds(room)); - - // Update the pinned events when the room state changes - // Filter out events that are not pinned events - const update = useCallback( - (ev?: MatrixEvent) => { - if (ev && ev.getType() !== EventType.RoomPinnedEvents) return; - setPinnedEvents(getPinnedEventIds(room)); - }, - [room], - ); - - useTypedEventEmitter(room?.getLiveTimeline().getState(EventTimeline.FORWARDS), RoomStateEvent.Events, update); - useEffect(() => { - setPinnedEvents(getPinnedEventIds(room)); - return () => { - setPinnedEvents([]); - }; - }, [room]); - return pinnedEvents; -}; - -/** - * Get the read pinned event IDs from a room. - * @param room - */ -function getReadPinnedEventIds(room?: Room): Set { - return new Set(room?.getAccountData(ReadPinsEventId)?.getContent()?.event_ids ?? []); -} - -/** - * Get the read pinned event IDs from a room. - * @param room - */ -export const useReadPinnedEvents = (room?: Room): Set => { - const [readPinnedEvents, setReadPinnedEvents] = useState>(new Set()); - - // Update the read pinned events when the room state changes - // Filter out events that are not read pinned events - const update = useCallback( - (ev?: MatrixEvent) => { - if (ev && ev.getType() !== ReadPinsEventId) return; - setReadPinnedEvents(getReadPinnedEventIds(room)); - }, - [room], - ); - - useTypedEventEmitter(room, RoomEvent.AccountData, update); - useEffect(() => { - setReadPinnedEvents(getReadPinnedEventIds(room)); - return () => { - setReadPinnedEvents(new Set()); - }; - }, [room]); - return readPinnedEvents; -}; - -/** - * Fetch the pinned events - * @param room - * @param pinnedEventIds - */ -function useFetchedPinnedEvents(room: Room, pinnedEventIds: string[]): Array | null { - const cli = useMatrixClientContext(); - - return useAsyncMemo( - () => { - const promises = pinnedEventIds.map(async (eventId): Promise => { - const timelineSet = room.getUnfilteredTimelineSet(); - // Get the event from the local timeline - const localEvent = timelineSet - ?.getTimelineForEvent(eventId) - ?.getEvents() - .find((e) => e.getId() === eventId); - - // Decrypt the event if it's encrypted - // Can happen when the tab is refreshed and the pinned events card is opened directly - if (localEvent?.isEncrypted()) { - await cli.decryptEventIfNeeded(localEvent); - } - - // If the event is available locally, return it if it's pinnable - // Otherwise, return null - if (localEvent) return PinningUtils.isPinnable(localEvent) ? localEvent : null; - - try { - // The event is not available locally, so we fetch the event and latest edit in parallel - const [ - evJson, - { - events: [edit], - }, - ] = await Promise.all([ - cli.fetchRoomEvent(room.roomId, eventId), - cli.relations(room.roomId, eventId, RelationType.Replace, null, { limit: 1 }), - ]); - - const event = new MatrixEvent(evJson); - - // Decrypt the event if it's encrypted - if (event.isEncrypted()) { - await cli.decryptEventIfNeeded(event); - } - - // Handle poll events - await room.processPollEvents([event]); - - const senderUserId = event.getSender(); - if (senderUserId && PinningUtils.isPinnable(event)) { - // Inject sender information - event.sender = room.getMember(senderUserId); - // Also inject any edits we've found - if (edit) event.makeReplaced(edit); - - return event; - } - } catch (err) { - logger.error("Error looking up pinned event " + eventId + " in room " + room.roomId); - logger.error(err); - } - return null; - }); - - return Promise.all(promises); - }, - [cli, room, pinnedEventIds], - null, - ); -} +import { usePinnedEvents, useReadPinnedEvents, useSortedFetchedPinnedEvents } from "../../../hooks/usePinnedEvents"; +import PinningUtils from "../../../utils/PinningUtils.ts"; /** * List the pinned messages in a room inside a Card. @@ -219,7 +52,7 @@ export function PinnedMessagesCard({ room, onClose, permalinkCreator }: PinnedMe const roomContext = useRoomContext(); const pinnedEventIds = usePinnedEvents(room); const readPinnedEvents = useReadPinnedEvents(room); - const pinnedEvents = useFetchedPinnedEvents(room, pinnedEventIds); + const pinnedEvents = useSortedFetchedPinnedEvents(room, pinnedEventIds); useEffect(() => { if (!cli || cli.isGuest()) return; // nothing to do @@ -301,10 +134,9 @@ function PinnedMessages({ events, room, permalinkCreator }: PinnedMessagesProps) /** * Whether the client can unpin events from the room. + * Listen to room state to update this value. */ - const canUnpin = useRoomState(room, (state) => - state.mayClientSendStateEvent(EventType.RoomPinnedEvents, matrixClient), - ); + const canUnpin = useRoomState(room, () => PinningUtils.userHasPinOrUnpinPermission(matrixClient, room)); /** * Opens the unpin all dialog. @@ -324,7 +156,7 @@ function PinnedMessages({ events, room, permalinkCreator }: PinnedMessagesProps) })} role="list" > - {events.reverse().map((event, i) => ( + {events.map((event, i) => ( <> = ({ phase, room }): JSX.Element | } }); - const isVideoRoom = useIsVideoRoom(room); + const isVideoRoom = room !== undefined && calcIsVideoRoom(room); if (!shouldShowTabsForPhase(phase)) return null; diff --git a/src/components/views/right_panel/RoomSummaryCard.tsx b/src/components/views/right_panel/RoomSummaryCard.tsx index c13899f77..6cd9faf7b 100644 --- a/src/components/views/right_panel/RoomSummaryCard.tsx +++ b/src/components/views/right_panel/RoomSummaryCard.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, SyntheticEvent, useContext, useEffect, useRef, useState } from "react"; @@ -57,8 +49,6 @@ import { useEventEmitterState } from "../../../hooks/useEventEmitter"; import { E2EStatus } from "../../../utils/ShieldUtils"; import { RoomPermalinkCreator } from "../../../utils/permalinks/Permalinks"; import RoomContext, { TimelineRenderingType } from "../../../contexts/RoomContext"; -import { useFeatureEnabled } from "../../../hooks/useSettings"; -import { usePinnedEvents } from "./PinnedMessagesCard"; import RoomName from "../elements/RoomName"; import ExportDialog from "../dialogs/ExportDialog"; import RightPanelStore from "../../../stores/right-panel/RightPanelStore"; @@ -80,7 +70,9 @@ import { useDispatcher } from "../../../hooks/useDispatcher"; import { Action } from "../../../dispatcher/actions"; import { Key } from "../../../Keyboard"; import { useTransition } from "../../../hooks/useTransition"; -import { useIsVideoRoom } from "../../../utils/video-rooms"; +import { isVideoRoom as calcIsVideoRoom } from "../../../utils/video-rooms"; +import { usePinnedEvents } from "../../../hooks/usePinnedEvents"; +import { ReleaseAnnouncement } from "../../structures/ReleaseAnnouncement.tsx"; import DecoratedRoomAvatar from "../avatars/DecoratedRoomAvatar"; // :TCHAP: tchap-room-icons @@ -98,6 +90,7 @@ const onRoomFilesClick = (): void => { }; const onRoomPinsClick = (): void => { + PosthogTrackers.trackInteraction("PinnedMessageRoomInfoButton"); RightPanelStore.instance.pushCard({ phase: RightPanelPhases.PinnedMessages }, true); }; @@ -229,7 +222,7 @@ const RoomSummaryCard: React.FC = ({ const isRoomEncrypted = useIsEncrypted(cli, room); const roomContext = useContext(RoomContext); const e2eStatus = roomContext.e2eStatus; - const isVideoRoom = useIsVideoRoom(room); + const isVideoRoom = calcIsVideoRoom(room); const roomState = useRoomState(room); const directRoomsList = useAccountData>(room.client, EventType.Direct); @@ -330,8 +323,7 @@ const RoomSummaryCard: React.FC = ({ ); - const pinningEnabled = useFeatureEnabled("feature_pinning"); - const pinCount = usePinnedEvents(pinningEnabled ? room : undefined)?.length; + const pinCount = usePinnedEvents(room).length; const roomTags = useEventEmitterState(RoomListStore.instance, LISTS_UPDATE_EVENT, () => RoomListStore.instance.getTagsForRoom(room), @@ -398,17 +390,25 @@ const RoomSummaryCard: React.FC = ({ {!isVideoRoom && ( <> - {pinningEnabled && ( - - - {pinCount} - - - )} + +
    + + + {pinCount} + + +
    +
    )} diff --git a/src/components/views/right_panel/TimelineCard.tsx b/src/components/views/right_panel/TimelineCard.tsx index 97f5aabc3..77778ffdd 100644 --- a/src/components/views/right_panel/TimelineCard.tsx +++ b/src/components/views/right_panel/TimelineCard.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/right_panel/UserInfo.tsx b/src/components/views/right_panel/UserInfo.tsx index 9cc50fa92..e2d928b1d 100644 --- a/src/components/views/right_panel/UserInfo.tsx +++ b/src/components/views/right_panel/UserInfo.tsx @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017, 2018 Vector Creations Ltd -Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2017, 2018 Vector Creations Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, useCallback, useContext, useEffect, useMemo, useState } from "react"; @@ -34,7 +26,7 @@ import { KnownMembership } from "matrix-js-sdk/src/types"; import { UserVerificationStatus, VerificationRequest } from "matrix-js-sdk/src/crypto-api"; import { logger } from "matrix-js-sdk/src/logger"; import { CryptoEvent } from "matrix-js-sdk/src/crypto"; -import { Heading, MenuItem, Text } from "@vector-im/compound-web"; +import { Heading, MenuItem, Text, Tooltip } from "@vector-im/compound-web"; import ChatIcon from "@vector-im/compound-design-tokens/assets/web/icons/chat"; import CheckIcon from "@vector-im/compound-design-tokens/assets/web/icons/check"; import ShareIcon from "@vector-im/compound-design-tokens/assets/web/icons/share"; @@ -93,7 +85,7 @@ import { SdkContextClass } from "../../../contexts/SDKContext"; import { asyncSome } from "../../../utils/arrays"; import { Flex } from "../../utils/Flex"; import CopyableText from "../elements/CopyableText"; - +import { useUserTimezone } from "../../../hooks/useUserTimezone"; export interface IDevice extends Device { ambiguous?: boolean; } @@ -1702,6 +1694,8 @@ export const UserInfoHeader: React.FC<{ ); } + const timezoneInfo = useUserTimezone(cli, member.userId); + const e2eIcon = e2eStatus ? : null; const userIdentifier = UserIdentifierCustomisations.getDisplayUserIdentifier?.(member.userId, { roomId, @@ -1735,6 +1729,15 @@ export const UserInfoHeader: React.FC<{ {presenceLabel} + {timezoneInfo && ( + + + + {timezoneInfo?.friendly ?? ""} + + + + )} userIdentifier} border={false}> {userIdentifier} diff --git a/src/components/views/right_panel/VerificationPanel.tsx b/src/components/views/right_panel/VerificationPanel.tsx index 4189ee190..5e667dcfc 100644 --- a/src/components/views/right_panel/VerificationPanel.tsx +++ b/src/components/views/right_panel/VerificationPanel.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/right_panel/WidgetCard.tsx b/src/components/views/right_panel/WidgetCard.tsx index 210e67355..887ecb619 100644 --- a/src/components/views/right_panel/WidgetCard.tsx +++ b/src/components/views/right_panel/WidgetCard.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext, useEffect } from "react"; diff --git a/src/components/views/right_panel/context.ts b/src/components/views/right_panel/context.ts index 5fe04b867..b0d979ea0 100644 --- a/src/components/views/right_panel/context.ts +++ b/src/components/views/right_panel/context.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/right_panel/types.ts b/src/components/views/right_panel/types.ts index f7a6d60f5..f390dfcb7 100644 --- a/src/components/views/right_panel/types.ts +++ b/src/components/views/right_panel/types.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export const ReadPinsEventId = "im.vector.room.read_pins"; diff --git a/src/components/views/room_settings/AliasSettings.tsx b/src/components/views/room_settings/AliasSettings.tsx index a8fe6cdbe..3c1a74553 100644 --- a/src/components/views/room_settings/AliasSettings.tsx +++ b/src/components/views/room_settings/AliasSettings.tsx @@ -1,17 +1,9 @@ /* -Copyright 2016 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, ContextType, createRef, SyntheticEvent } from "react"; diff --git a/src/components/views/room_settings/RoomProfileSettings.tsx b/src/components/views/room_settings/RoomProfileSettings.tsx index e565e1239..73d345847 100644 --- a/src/components/views/room_settings/RoomProfileSettings.tsx +++ b/src/components/views/room_settings/RoomProfileSettings.tsx @@ -1,17 +1,8 @@ /* -Copyright 2019, 2024 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/components/views/room_settings/RoomPublishSetting.tsx b/src/components/views/room_settings/RoomPublishSetting.tsx index 5fddb66a1..9690e9c0e 100644 --- a/src/components/views/room_settings/RoomPublishSetting.tsx +++ b/src/components/views/room_settings/RoomPublishSetting.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -21,6 +13,8 @@ import LabelledToggleSwitch from "../elements/LabelledToggleSwitch"; import { _t } from "../../../languageHandler"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; import DirectoryCustomisations from "../../../customisations/Directory"; +import Modal from "../../../Modal"; +import ErrorDialog from "../dialogs/ErrorDialog"; interface IProps { roomId: string; @@ -41,6 +35,13 @@ export default class RoomPublishSetting extends React.PureComponent { const valueBefore = this.state.isRoomPublished; const newValue = !valueBefore; @@ -50,6 +51,7 @@ export default class RoomPublishSetting extends React.PureComponent { + this.showError(); // Roll back the local echo on the change this.setState({ isRoomPublished: valueBefore }); }); diff --git a/src/components/views/room_settings/UrlPreviewSettings.tsx b/src/components/views/room_settings/UrlPreviewSettings.tsx index ad0d1bd98..babe7cf14 100644 --- a/src/components/views/room_settings/UrlPreviewSettings.tsx +++ b/src/components/views/room_settings/UrlPreviewSettings.tsx @@ -1,20 +1,12 @@ /* -Copyright 2016 OpenMarket Ltd -Copyright 2017 Travis Ralston -Copyright 2018, 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018, 2019 New Vector Ltd +Copyright 2017 Travis Ralston +Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/rooms/AppsDrawer.tsx b/src/components/views/rooms/AppsDrawer.tsx index 2247edce0..cba6e6c69 100644 --- a/src/components/views/rooms/AppsDrawer.tsx +++ b/src/components/views/rooms/AppsDrawer.tsx @@ -1,18 +1,9 @@ /* +Copyright 2018-2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Copyright 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { AriaRole } from "react"; @@ -35,6 +26,7 @@ import { clamp, percentageOf, percentageWithin } from "../../../utils/numbers"; import UIStore from "../../../stores/UIStore"; import { ActionPayload } from "../../../dispatcher/payloads"; import Spinner from "../elements/Spinner"; +import SdkConfig from "../../../SdkConfig"; interface IProps { userId: string; @@ -335,7 +327,7 @@ const PersistentVResizer: React.FC = ({ defaultHeight = clamp(defaultHeight, 0, 100); defaultHeight = percentageWithin(defaultHeight / 100, minHeight, maxHeight); } else { - defaultHeight = 280; + defaultHeight = SdkConfig.get().default_widget_container_height ?? 280; } return ( diff --git a/src/components/views/rooms/Autocomplete.tsx b/src/components/views/rooms/Autocomplete.tsx index eb7c42ee7..db4ac3741 100644 --- a/src/components/views/rooms/Autocomplete.tsx +++ b/src/components/views/rooms/Autocomplete.tsx @@ -1,18 +1,9 @@ /* +Copyright 2017-2024 New Vector Ltd. Copyright 2016 Aviral Dasgupta -Copyright 2017 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, KeyboardEvent } from "react"; diff --git a/src/components/views/rooms/AuxPanel.tsx b/src/components/views/rooms/AuxPanel.tsx index 4e3e20a7c..5763a2815 100644 --- a/src/components/views/rooms/AuxPanel.tsx +++ b/src/components/views/rooms/AuxPanel.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/rooms/BasicMessageComposer.tsx b/src/components/views/rooms/BasicMessageComposer.tsx index 38576dc25..012e99669 100644 --- a/src/components/views/rooms/BasicMessageComposer.tsx +++ b/src/components/views/rooms/BasicMessageComposer.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/rooms/CollapsibleButton.tsx b/src/components/views/rooms/CollapsibleButton.tsx index d2d5de5ea..27589ec58 100644 --- a/src/components/views/rooms/CollapsibleButton.tsx +++ b/src/components/views/rooms/CollapsibleButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext } from "react"; diff --git a/src/components/views/rooms/E2EIcon.tsx b/src/components/views/rooms/E2EIcon.tsx index e655d8b86..1e4036134 100644 --- a/src/components/views/rooms/E2EIcon.tsx +++ b/src/components/views/rooms/E2EIcon.tsx @@ -1,18 +1,10 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps, CSSProperties } from "react"; diff --git a/src/components/views/rooms/EditMessageComposer.tsx b/src/components/views/rooms/EditMessageComposer.tsx index 9b33f4291..06f189df5 100644 --- a/src/components/views/rooms/EditMessageComposer.tsx +++ b/src/components/views/rooms/EditMessageComposer.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, KeyboardEvent } from "react"; diff --git a/src/components/views/rooms/EmojiButton.tsx b/src/components/views/rooms/EmojiButton.tsx index 6139043a1..de64b3d42 100644 --- a/src/components/views/rooms/EmojiButton.tsx +++ b/src/components/views/rooms/EmojiButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/rooms/EntityTile.tsx b/src/components/views/rooms/EntityTile.tsx index cfb579b11..2a9af902d 100644 --- a/src/components/views/rooms/EntityTile.tsx +++ b/src/components/views/rooms/EntityTile.tsx @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/EventTile.tsx b/src/components/views/rooms/EventTile.tsx index e0f8ab116..746cceabd 100644 --- a/src/components/views/rooms/EventTile.tsx +++ b/src/components/views/rooms/EventTile.tsx @@ -1,18 +1,10 @@ /* -Copyright 2015 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2023 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, forwardRef, MouseEvent, ReactNode } from "react"; @@ -60,7 +52,7 @@ import PlatformPeg from "../../../PlatformPeg"; import MemberAvatar from "../avatars/MemberAvatar"; import SenderProfile from "../messages/SenderProfile"; import MessageTimestamp from "../messages/MessageTimestamp"; -import { IReadReceiptInfo } from "./ReadReceiptMarker"; +import { IReadReceiptPosition } from "./ReadReceiptMarker"; import MessageActionBar from "../messages/MessageActionBar"; import ReactionsRow from "../messages/ReactionsRow"; import { getEventDisplayInfo } from "../../../utils/EventRenderingUtils"; @@ -167,7 +159,7 @@ export interface EventTileProps { // opaque readreceipt info for each userId; used by ReadReceiptMarker // to manage its animations. Should be an empty object when the room // first loads - readReceiptMap?: { [userId: string]: IReadReceiptInfo }; + readReceiptMap?: { [userId: string]: IReadReceiptPosition }; // A function which is used to check if the parent panel is being // unmounted, to avoid unnecessary work. Should return true if we diff --git a/src/components/views/rooms/EventTile/EventTileThreadToolbar.tsx b/src/components/views/rooms/EventTile/EventTileThreadToolbar.tsx index bc41f20b2..603bc9953 100644 --- a/src/components/views/rooms/EventTile/EventTileThreadToolbar.tsx +++ b/src/components/views/rooms/EventTile/EventTileThreadToolbar.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/ExtraTile.tsx b/src/components/views/rooms/ExtraTile.tsx index 3e734651c..8f9426462 100644 --- a/src/components/views/rooms/ExtraTile.tsx +++ b/src/components/views/rooms/ExtraTile.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/HistoryTile.tsx b/src/components/views/rooms/HistoryTile.tsx index 42faf0db3..c52ab044a 100644 --- a/src/components/views/rooms/HistoryTile.tsx +++ b/src/components/views/rooms/HistoryTile.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Robin Townsend -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext } from "react"; diff --git a/src/components/views/rooms/JumpToBottomButton.tsx b/src/components/views/rooms/JumpToBottomButton.tsx index 6c84924fa..7111a14e7 100644 --- a/src/components/views/rooms/JumpToBottomButton.tsx +++ b/src/components/views/rooms/JumpToBottomButton.tsx @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/LegacyRoomHeader.tsx b/src/components/views/rooms/LegacyRoomHeader.tsx index 20c835747..0e4cd28aa 100644 --- a/src/components/views/rooms/LegacyRoomHeader.tsx +++ b/src/components/views/rooms/LegacyRoomHeader.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FC, useState, useMemo, useCallback } from "react"; @@ -259,8 +251,7 @@ const CallButtons: FC = ({ room }) => { const [busy, setBusy] = useState(false); const showButtons = useSettingValue("showCallButtonsInComposer"); const groupCallsEnabled = useFeatureEnabled("feature_group_calls"); - const videoRoomsEnabled = useFeatureEnabled("feature_video_rooms"); - const isVideoRoom = useMemo(() => videoRoomsEnabled && calcIsVideoRoom(room), [videoRoomsEnabled, room]); + const isVideoRoom = useMemo(() => calcIsVideoRoom(room), [room]); const useElementCallExclusively = useMemo(() => { return SdkConfig.get("element_call").use_exclusively; }, []); @@ -298,53 +289,13 @@ const CallButtons: FC = ({ room }) => { if (isVideoRoom || !showButtons) { return null; - } else if (groupCallsEnabled) { - if (useElementCallExclusively) { - if (hasGroupCall) { - return makeVideoCallButton(new DisabledWithReason(_t("voip|disabled_ongoing_call"))); - } else if (mayCreateElementCalls) { - return makeVideoCallButton("element"); - } else { - return makeVideoCallButton(new DisabledWithReason(_t("voip|disabled_no_perms_start_video_call"))); - } - } else if (hasLegacyCall || hasJitsiWidget) { - return ( - <> - {makeVoiceCallButton(new DisabledWithReason(_t("voip|disabled_ongoing_call")))} - {makeVideoCallButton(new DisabledWithReason(_t("voip|disabled_ongoing_call")))} - - ); - } else if (functionalMembers.length <= 1) { - return ( - <> - {makeVoiceCallButton(new DisabledWithReason(_t("voip|disabled_no_one_here")))} - {makeVideoCallButton(new DisabledWithReason(_t("voip|disabled_no_one_here")))} - - ); - } else if (functionalMembers.length === 2) { - return ( - <> - {makeVoiceCallButton("legacy_or_jitsi")} - {makeVideoCallButton("legacy_or_element")} - - ); - } else if (mayEditWidgets) { - return ( - <> - {makeVoiceCallButton("legacy_or_jitsi")} - {makeVideoCallButton(mayCreateElementCalls ? "jitsi_or_element" : "legacy_or_jitsi")} - - ); + } else if (groupCallsEnabled && useElementCallExclusively) { + if (hasGroupCall) { + return makeVideoCallButton(new DisabledWithReason(_t("voip|disabled_ongoing_call"))); + } else if (mayCreateElementCalls) { + return makeVideoCallButton("element"); } else { - const videoCallBehavior = mayCreateElementCalls - ? "element" - : new DisabledWithReason(_t("voip|disabled_no_perms_start_video_call")); - return ( - <> - {makeVoiceCallButton(new DisabledWithReason(_t("voip|disabled_no_perms_start_voice_call")))} - {makeVideoCallButton(videoCallBehavior)} - - ); + return makeVideoCallButton(new DisabledWithReason(_t("voip|disabled_no_perms_start_video_call"))); } } else if (hasLegacyCall || hasJitsiWidget) { return ( @@ -360,18 +311,31 @@ const CallButtons: FC = ({ room }) => { {makeVideoCallButton(new DisabledWithReason(_t("voip|disabled_no_one_here")))} ); - } else if (functionalMembers.length === 2 || mayEditWidgets) { + } else if (functionalMembers.length === 2) { return ( <> {makeVoiceCallButton("legacy_or_jitsi")} - {makeVideoCallButton("legacy_or_jitsi")} + {makeVideoCallButton(groupCallsEnabled ? "legacy_or_element" : "legacy_or_jitsi")} + + ); + } else if (mayEditWidgets) { + return ( + <> + {makeVoiceCallButton("legacy_or_jitsi")} + {makeVideoCallButton( + groupCallsEnabled && mayCreateElementCalls ? "jitsi_or_element" : "legacy_or_jitsi", + )} ); } else { + const videoCallBehavior = + groupCallsEnabled && mayCreateElementCalls + ? "element" + : new DisabledWithReason(_t("voip|disabled_no_perms_start_video_call")); return ( <> {makeVoiceCallButton(new DisabledWithReason(_t("voip|disabled_no_perms_start_voice_call")))} - {makeVideoCallButton(new DisabledWithReason(_t("voip|disabled_no_perms_start_video_call")))} + {makeVideoCallButton(videoCallBehavior)} ); } @@ -753,7 +717,7 @@ export default class RoomHeader extends React.Component { } public render(): React.ReactNode { - const isVideoRoom = SettingsStore.getValue("feature_video_rooms") && calcIsVideoRoom(this.props.room); + const isVideoRoom = calcIsVideoRoom(this.props.room); let roomAvatar: JSX.Element | null = null; if (this.props.room) { diff --git a/src/components/views/rooms/LinkPreviewGroup.tsx b/src/components/views/rooms/LinkPreviewGroup.tsx index c940e9fce..9f3fa0182 100644 --- a/src/components/views/rooms/LinkPreviewGroup.tsx +++ b/src/components/views/rooms/LinkPreviewGroup.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext, useEffect } from "react"; diff --git a/src/components/views/rooms/LinkPreviewWidget.tsx b/src/components/views/rooms/LinkPreviewWidget.tsx index 227bb38dc..91fb0608a 100644 --- a/src/components/views/rooms/LinkPreviewWidget.tsx +++ b/src/components/views/rooms/LinkPreviewWidget.tsx @@ -1,17 +1,9 @@ /* -Copyright 2016 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps, createRef, ReactNode } from "react"; diff --git a/src/components/views/rooms/LiveContentSummary.tsx b/src/components/views/rooms/LiveContentSummary.tsx index 847e1f1f2..0d9211941 100644 --- a/src/components/views/rooms/LiveContentSummary.tsx +++ b/src/components/views/rooms/LiveContentSummary.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FC } from "react"; diff --git a/src/components/views/rooms/MemberList.tsx b/src/components/views/rooms/MemberList.tsx index 554b67149..0b7c644a3 100644 --- a/src/components/views/rooms/MemberList.tsx +++ b/src/components/views/rooms/MemberList.tsx @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd -Copyright 2017, 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner +Copyright 2017, 2018 New Vector Ltd +Copyright 2017 Vector Creations Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/MemberTile.tsx b/src/components/views/rooms/MemberTile.tsx index 92c26ddd1..d81a54494 100644 --- a/src/components/views/rooms/MemberTile.tsx +++ b/src/components/views/rooms/MemberTile.tsx @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/MessageComposer.tsx b/src/components/views/rooms/MessageComposer.tsx index a4a73b495..99e4507c1 100644 --- a/src/components/views/rooms/MessageComposer.tsx +++ b/src/components/views/rooms/MessageComposer.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, ReactNode } from "react"; @@ -26,6 +18,7 @@ import { } from "matrix-js-sdk/src/matrix"; import { Optional } from "matrix-events-sdk"; import { Tooltip } from "@vector-im/compound-web"; +import { logger } from "matrix-js-sdk/src/logger"; import { _t } from "../../../languageHandler"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; @@ -65,6 +58,9 @@ import { createCantStartVoiceMessageBroadcastDialog } from "../dialogs/CantStart import { UIFeature } from "../../../settings/UIFeature"; import { formatTimeLeft } from "../../../DateUtils"; +// The prefix used when persisting editor drafts to localstorage. +export const WYSIWYG_EDITOR_STATE_STORAGE_PREFIX = "mx_wysiwyg_state_"; + let instanceCount = 0; interface ISendButtonProps { @@ -109,6 +105,12 @@ interface IState { initialComposerContent: string; } +type WysiwygComposerState = { + content: string; + isRichText: boolean; + replyEventId?: string; +}; + export class MessageComposer extends React.Component { private dispatcherRef?: string; private messageComposerInput = createRef(); @@ -129,11 +131,32 @@ export class MessageComposer extends React.Component { public constructor(props: IProps, context: React.ContextType) { super(props, context); + this.context = context; // otherwise React will only set it prior to render due to type def above + VoiceRecordingStore.instance.on(UPDATE_EVENT, this.onVoiceStoreUpdate); + window.addEventListener("beforeunload", this.saveWysiwygEditorState); + const isWysiwygLabEnabled = SettingsStore.getValue("feature_wysiwyg_composer"); + let isRichTextEnabled = true; + let initialComposerContent = ""; + if (isWysiwygLabEnabled) { + const wysiwygState = this.restoreWysiwygEditorState(); + if (wysiwygState) { + isRichTextEnabled = wysiwygState.isRichText; + initialComposerContent = wysiwygState.content; + if (wysiwygState.replyEventId) { + dis.dispatch({ + action: "reply_to_event", + event: this.props.room.findEventById(wysiwygState.replyEventId), + context: this.context.timelineRenderingType, + }); + } + } + } + this.state = { - isComposerEmpty: true, - composerContent: "", + isComposerEmpty: initialComposerContent?.length === 0, + composerContent: initialComposerContent, haveRecording: false, recordingTimeLeftSeconds: undefined, // when set to a number, shows a toast isMenuOpen: false, @@ -141,9 +164,9 @@ export class MessageComposer extends React.Component { showStickersButton: SettingsStore.getValue("MessageComposerInput.showStickersButton"), showPollsButton: SettingsStore.getValue("MessageComposerInput.showPollsButton"), showVoiceBroadcastButton: SettingsStore.getValue(Features.VoiceBroadcast), - isWysiwygLabEnabled: SettingsStore.getValue("feature_wysiwyg_composer"), - isRichTextEnabled: true, - initialComposerContent: "", + isWysiwygLabEnabled: isWysiwygLabEnabled, + isRichTextEnabled: isRichTextEnabled, + initialComposerContent: initialComposerContent, }; this.instanceId = instanceCount++; @@ -154,6 +177,52 @@ export class MessageComposer extends React.Component { SettingsStore.monitorSetting("feature_wysiwyg_composer", null); } + private get editorStateKey(): string { + let key = WYSIWYG_EDITOR_STATE_STORAGE_PREFIX + this.props.room.roomId; + if (this.props.relation?.rel_type === THREAD_RELATION_TYPE.name) { + key += `_${this.props.relation.event_id}`; + } + return key; + } + + private restoreWysiwygEditorState(): WysiwygComposerState | undefined { + const json = localStorage.getItem(this.editorStateKey); + if (json) { + try { + const state: WysiwygComposerState = JSON.parse(json); + return state; + } catch (e) { + logger.error(e); + } + } + return undefined; + } + + private saveWysiwygEditorState = (): void => { + if (this.shouldSaveWysiwygEditorState()) { + const { isRichTextEnabled, composerContent } = this.state; + const replyEventId = this.props.replyToEvent ? this.props.replyToEvent.getId() : undefined; + const item: WysiwygComposerState = { + content: composerContent, + isRichText: isRichTextEnabled, + replyEventId: replyEventId, + }; + localStorage.setItem(this.editorStateKey, JSON.stringify(item)); + } else { + this.clearStoredEditorState(); + } + }; + + // should save state when wysiwyg is enabled and has contents or reply is open + private shouldSaveWysiwygEditorState = (): boolean => { + const { isWysiwygLabEnabled, isComposerEmpty } = this.state; + return isWysiwygLabEnabled && (!isComposerEmpty || !!this.props.replyToEvent); + }; + + private clearStoredEditorState(): void { + localStorage.removeItem(this.editorStateKey); + } + private get voiceRecording(): Optional { return this._voiceRecording; } @@ -265,6 +334,8 @@ export class MessageComposer extends React.Component { UIStore.instance.stopTrackingElementDimensions(`MessageComposer${this.instanceId}`); UIStore.instance.removeListener(`MessageComposer${this.instanceId}`, this.onResize); + window.removeEventListener("beforeunload", this.saveWysiwygEditorState); + this.saveWysiwygEditorState(); // clean up our listeners by setting our cached recording to falsy (see internal setter) this.voiceRecording = null; } diff --git a/src/components/views/rooms/MessageComposerButtons.tsx b/src/components/views/rooms/MessageComposerButtons.tsx index dc5c14517..003c2afed 100644 --- a/src/components/views/rooms/MessageComposerButtons.tsx +++ b/src/components/views/rooms/MessageComposerButtons.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/rooms/MessageComposerFormatBar.tsx b/src/components/views/rooms/MessageComposerFormatBar.tsx index 04406158a..34798cc60 100644 --- a/src/components/views/rooms/MessageComposerFormatBar.tsx +++ b/src/components/views/rooms/MessageComposerFormatBar.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/components/views/rooms/NewRoomIntro.tsx b/src/components/views/rooms/NewRoomIntro.tsx index 03ea25664..05912c482 100644 --- a/src/components/views/rooms/NewRoomIntro.tsx +++ b/src/components/views/rooms/NewRoomIntro.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext } from "react"; @@ -105,7 +97,7 @@ const NewRoomIntro: React.FC = () => { introMessage, {}, { - displayName: () => {displayName}, + displayName: () => {displayName}, }, )}

    @@ -249,7 +241,7 @@ const NewRoomIntro: React.FC = () => { "room|intro|start_of_room", {}, { - roomName: () => {room.name}, + roomName: () => {room.name}, }, )}

    diff --git a/src/components/views/rooms/NotificationBadge.tsx b/src/components/views/rooms/NotificationBadge.tsx index b142c9a12..c4cc418db 100644 --- a/src/components/views/rooms/NotificationBadge.tsx +++ b/src/components/views/rooms/NotificationBadge.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/rooms/NotificationBadge/StatelessNotificationBadge.tsx b/src/components/views/rooms/NotificationBadge/StatelessNotificationBadge.tsx index 825192b82..597f6d599 100644 --- a/src/components/views/rooms/NotificationBadge/StatelessNotificationBadge.tsx +++ b/src/components/views/rooms/NotificationBadge/StatelessNotificationBadge.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { forwardRef } from "react"; diff --git a/src/components/views/rooms/NotificationBadge/UnreadNotificationBadge.tsx b/src/components/views/rooms/NotificationBadge/UnreadNotificationBadge.tsx index c3c8cf7df..dee861f11 100644 --- a/src/components/views/rooms/NotificationBadge/UnreadNotificationBadge.tsx +++ b/src/components/views/rooms/NotificationBadge/UnreadNotificationBadge.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/rooms/PinnedEventTile.tsx b/src/components/views/rooms/PinnedEventTile.tsx index 5252e5124..491199b67 100644 --- a/src/components/views/rooms/PinnedEventTile.tsx +++ b/src/components/views/rooms/PinnedEventTile.tsx @@ -1,28 +1,21 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. +Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { JSX, useCallback, useState } from "react"; import { EventTimeline, EventType, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; -import { IconButton, Menu, MenuItem, Separator, Text } from "@vector-im/compound-web"; +import { IconButton, Menu, MenuItem, Separator, Tooltip } from "@vector-im/compound-web"; import { Icon as ViewIcon } from "@vector-im/compound-design-tokens/icons/visibility-on.svg"; import { Icon as UnpinIcon } from "@vector-im/compound-design-tokens/icons/unpin.svg"; import { Icon as ForwardIcon } from "@vector-im/compound-design-tokens/icons/forward.svg"; import { Icon as TriggerIcon } from "@vector-im/compound-design-tokens/icons/overflow-horizontal.svg"; import { Icon as DeleteIcon } from "@vector-im/compound-design-tokens/icons/delete.svg"; +import { Icon as ThreadIcon } from "@vector-im/compound-design-tokens/icons/threads.svg"; import classNames from "classnames"; import dis from "../../../dispatcher/dispatcher"; @@ -39,6 +32,9 @@ import { isContentActionable } from "../../../utils/EventUtils"; import { getForwardableEvent } from "../../../events"; import { OpenForwardDialogPayload } from "../../../dispatcher/payloads/OpenForwardDialogPayload"; import { createRedactEventDialog } from "../dialogs/ConfirmRedactDialog"; +import { ShowThreadPayload } from "../../../dispatcher/payloads/ShowThreadPayload"; +import PinningUtils from "../../../utils/PinningUtils.ts"; +import PosthogTrackers from "../../../PosthogTrackers.ts"; const AVATAR_SIZE = "32px"; @@ -69,6 +65,9 @@ export function PinnedEventTile({ event, room, permalinkCreator }: PinnedEventTi throw new Error("Pinned event unexpectedly has no sender"); } + const isInThread = Boolean(event.threadRootId); + const displayThreadInfo = !event.isThreadRoot && isInThread; + return (
    @@ -81,13 +80,11 @@ export function PinnedEventTile({ event, room, permalinkCreator }: PinnedEventTi
    - - {event.sender?.name || sender} - + + + {event.sender?.name || sender} + +
    + {displayThreadInfo && ( +
    + + {_t( + "right_panel|pinned_messages|reply_thread", + {}, + { + link: (sub) => ( + + ), + }, + )} +
    + )}
    ); @@ -118,6 +145,8 @@ function PinMenu({ event, room, permalinkCreator }: PinMenuProps): JSX.Element { * View the event in the timeline. */ const onViewInTimeline = useCallback(() => { + PosthogTrackers.trackInteraction("PinnedMessageListViewTimeline"); + dis.dispatch({ action: Action.ViewRoom, event_id: event.getId(), @@ -129,30 +158,18 @@ function PinMenu({ event, room, permalinkCreator }: PinMenuProps): JSX.Element { /** * Whether the client can unpin the event. - * Pin and unpin are using the same permission. + * If the room state change, we want to check again the permission */ - const canUnpin = useRoomState(room, (state) => - state.mayClientSendStateEvent(EventType.RoomPinnedEvents, matrixClient), - ); + const canUnpin = useRoomState(room, () => PinningUtils.canUnpin(matrixClient, event)); /** * Unpin the event. * @param event */ const onUnpin = useCallback(async (): Promise => { - const pinnedEvents = room - .getLiveTimeline() - .getState(EventTimeline.FORWARDS) - ?.getStateEvents(EventType.RoomPinnedEvents, ""); - if (pinnedEvents?.getContent()?.pinned) { - const pinned = pinnedEvents.getContent().pinned; - const index = pinned.indexOf(event.getId()); - if (index !== -1) { - pinned.splice(index, 1); - await matrixClient.sendStateEvent(room.roomId, EventType.RoomPinnedEvents, { pinned }, ""); - } - } - }, [event, room, matrixClient]); + await PinningUtils.pinOrUnpinEvent(matrixClient, event); + PosthogTrackers.trackPinUnpinMessage("Unpin", "MessagePinningList"); + }, [event, matrixClient]); const contentActionable = isContentActionable(event); // Get the forwardable event for the given event diff --git a/src/components/views/rooms/PinnedMessageBanner.tsx b/src/components/views/rooms/PinnedMessageBanner.tsx new file mode 100644 index 000000000..4679912c4 --- /dev/null +++ b/src/components/views/rooms/PinnedMessageBanner.tsx @@ -0,0 +1,318 @@ +/* + * Copyright 2024 New Vector Ltd. + * Copyright 2024 The Matrix.org Foundation C.I.C. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. + */ + +import React, { JSX, useEffect, useMemo, useState } from "react"; +import { Icon as PinIcon } from "@vector-im/compound-design-tokens/icons/pin-solid.svg"; +import { Button } from "@vector-im/compound-web"; +import { M_POLL_START, MatrixEvent, MsgType, Room } from "matrix-js-sdk/src/matrix"; +import classNames from "classnames"; + +import { usePinnedEvents, useSortedFetchedPinnedEvents } from "../../../hooks/usePinnedEvents"; +import { _t } from "../../../languageHandler"; +import RightPanelStore from "../../../stores/right-panel/RightPanelStore"; +import { RightPanelPhases } from "../../../stores/right-panel/RightPanelStorePhases"; +import { useEventEmitter } from "../../../hooks/useEventEmitter"; +import { UPDATE_EVENT } from "../../../stores/AsyncStore"; +import { RoomPermalinkCreator } from "../../../utils/permalinks/Permalinks"; +import { MessagePreviewStore } from "../../../stores/room-list/MessagePreviewStore"; +import dis from "../../../dispatcher/dispatcher"; +import { ViewRoomPayload } from "../../../dispatcher/payloads/ViewRoomPayload"; +import { Action } from "../../../dispatcher/actions"; +import MessageEvent from "../messages/MessageEvent"; +import PosthogTrackers from "../../../PosthogTrackers.ts"; + +/** + * The props for the {@link PinnedMessageBanner} component. + */ +interface PinnedMessageBannerProps { + /** + * The permalink creator to use. + */ + permalinkCreator: RoomPermalinkCreator; + /** + * The room where the banner is displayed + */ + room: Room; +} + +/** + * A banner that displays the pinned messages in a room. + */ +export function PinnedMessageBanner({ room, permalinkCreator }: PinnedMessageBannerProps): JSX.Element | null { + const pinnedEventIds = usePinnedEvents(room); + const pinnedEvents = useSortedFetchedPinnedEvents(room, pinnedEventIds); + const eventCount = pinnedEvents.length; + const isSinglePinnedEvent = eventCount === 1; + + const [currentEventIndex, setCurrentEventIndex] = useState(eventCount - 1); + // When the number of pinned messages changes, we want to display the last message + useEffect(() => { + setCurrentEventIndex(() => eventCount - 1); + }, [eventCount]); + + const pinnedEvent = pinnedEvents[currentEventIndex]; + if (!pinnedEvent) return null; + + const shouldUseMessageEvent = pinnedEvent.isRedacted() || pinnedEvent.isDecryptionFailure(); + + const onBannerClick = (): void => { + PosthogTrackers.trackInteraction("PinnedMessageBannerClick"); + + // Scroll to the pinned message + dis.dispatch({ + action: Action.ViewRoom, + event_id: pinnedEvent.getId(), + highlighted: true, + room_id: room.roomId, + metricsTrigger: undefined, // room doesn't change + }); + + // Cycle through the pinned messages + // When we reach the first message, we go back to the last message + setCurrentEventIndex((currentEventIndex) => (--currentEventIndex === -1 ? eventCount - 1 : currentEventIndex)); + }; + + return ( +
    + + {!isSinglePinnedEvent && } +
    + ); +} + +/** + * The props for the {@link EventPreview} component. + */ +interface EventPreviewProps { + /** + * The pinned event to display the preview for + */ + pinnedEvent: MatrixEvent; +} + +/** + * A component that displays a preview for the pinned event. + */ +function EventPreview({ pinnedEvent }: EventPreviewProps): JSX.Element | null { + const preview = useEventPreview(pinnedEvent); + if (!preview) return null; + + const prefix = getPreviewPrefix(pinnedEvent.getType(), pinnedEvent.getContent().msgtype as MsgType); + if (!prefix) + return ( + + {preview} + + ); + + return ( + + {_t( + "room|pinned_message_banner|preview", + { + prefix, + preview, + }, + { + bold: (sub) => {sub}, + }, + )} + + ); +} + +/** + * Hooks to generate a preview for the pinned event. + * @param pinnedEvent + */ +function useEventPreview(pinnedEvent: MatrixEvent | null): string | null { + return useMemo(() => { + if (!pinnedEvent || pinnedEvent.isRedacted() || pinnedEvent.isDecryptionFailure()) return null; + return MessagePreviewStore.instance.generatePreviewForEvent(pinnedEvent); + }, [pinnedEvent]); +} + +/** + * Get the prefix for the preview based on the type and the message type. + * @param type + * @param msgType + */ +function getPreviewPrefix(type: string, msgType: MsgType): string | null { + switch (type) { + case M_POLL_START.name: + return _t("room|pinned_message_banner|prefix|poll"); + default: + } + + switch (msgType) { + case MsgType.Audio: + return _t("room|pinned_message_banner|prefix|audio"); + case MsgType.Image: + return _t("room|pinned_message_banner|prefix|image"); + case MsgType.Video: + return _t("room|pinned_message_banner|prefix|video"); + case MsgType.File: + return _t("room|pinned_message_banner|prefix|file"); + default: + return null; + } +} + +const MAX_INDICATORS = 3; + +/** + * The props for the {@link IndicatorsProps} component. + */ +interface IndicatorsProps { + /** + * The number of messages pinned + */ + count: number; + /** + * The current index of the pinned message + */ + currentIndex: number; +} + +/** + * A component that displays vertical indicators for the pinned messages. + */ +function Indicators({ count, currentIndex }: IndicatorsProps): JSX.Element { + // We only display a maximum of 3 indicators at one time. + // When there is more than 3 messages pinned, we will cycle through the indicators + + // If there is only 2 messages pinned, we will display 2 indicators + // In case of 1 message pinned, the indicators are not displayed, see {@link PinnedMessageBanner} logic. + const numberOfIndicators = Math.min(count, MAX_INDICATORS); + // The index of the active indicator + const index = currentIndex % numberOfIndicators; + + // We hide the indicators when we are on the last cycle and there are less than 3 remaining messages pinned + const numberOfCycles = Math.ceil(count / numberOfIndicators); + // If the current index is greater than the last cycle index, we are on the last cycle + const isLastCycle = currentIndex >= (numberOfCycles - 1) * MAX_INDICATORS; + // The index of the last message in the last cycle + const lastCycleIndex = numberOfIndicators - (numberOfCycles * numberOfIndicators - count); + + return ( +
    + {Array.from({ length: numberOfIndicators }).map((_, i) => ( +
    + ); +} + +/** + * The props for the {@link Indicator} component. + */ +interface IndicatorProps { + /** + * Whether the indicator is active + */ + active: boolean; + /** + * Whether the indicator is hidden + */ + hidden: boolean; +} + +/** + * A component that displays a vertical indicator for a pinned message. + */ +function Indicator({ active, hidden }: IndicatorProps): JSX.Element { + return ( +
    + ); +} + +function getRightPanelPhase(roomId: string): RightPanelPhases | null { + if (!RightPanelStore.instance.isOpenForRoom(roomId)) return null; + return RightPanelStore.instance.currentCard.phase; +} + +/** + * The props for the {@link BannerButton} component. + */ +interface BannerButtonProps { + /** + * The room where the banner is displayed + */ + room: Room; +} + +/** + * A button that allows the user to view or close the list of pinned messages. + */ +function BannerButton({ room }: BannerButtonProps): JSX.Element { + const [currentPhase, setCurrentPhase] = useState(getRightPanelPhase(room.roomId)); + useEventEmitter(RightPanelStore.instance, UPDATE_EVENT, () => setCurrentPhase(getRightPanelPhase(room.roomId))); + const isPinnedMessagesPhase = currentPhase === RightPanelPhases.PinnedMessages; + + return ( + + ); +} diff --git a/src/components/views/rooms/PresenceLabel.tsx b/src/components/views/rooms/PresenceLabel.tsx index 55e6b111d..de7a46c66 100644 --- a/src/components/views/rooms/PresenceLabel.tsx +++ b/src/components/views/rooms/PresenceLabel.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/ReadReceiptGroup.tsx b/src/components/views/rooms/ReadReceiptGroup.tsx index c9d00a4e6..8ac0db0e1 100644 --- a/src/components/views/rooms/ReadReceiptGroup.tsx +++ b/src/components/views/rooms/ReadReceiptGroup.tsx @@ -1,24 +1,16 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { PropsWithChildren } from "react"; import { User } from "matrix-js-sdk/src/matrix"; import { Tooltip } from "@vector-im/compound-web"; -import ReadReceiptMarker, { IReadReceiptInfo } from "./ReadReceiptMarker"; +import ReadReceiptMarker, { IReadReceiptPosition } from "./ReadReceiptMarker"; import { IReadReceiptProps } from "./EventTile"; import AccessibleButton from "../elements/AccessibleButton"; import MemberAvatar from "../avatars/MemberAvatar"; @@ -41,7 +33,7 @@ export const READ_AVATAR_SIZE = 16; interface Props { readReceipts: IReadReceiptProps[]; - readReceiptMap: { [userId: string]: IReadReceiptInfo }; + readReceiptMap: { [userId: string]: IReadReceiptPosition }; checkUnmounting?: () => boolean; suppressAnimation: boolean; isTwelveHour?: boolean; @@ -111,13 +103,13 @@ export function ReadReceiptGroup({ const { hidden, position } = determineAvatarPosition(index, maxAvatars); const userId = receipt.userId; - let readReceiptInfo: IReadReceiptInfo | undefined; + let readReceiptPosition: IReadReceiptPosition | undefined; if (readReceiptMap) { - readReceiptInfo = readReceiptMap[userId]; - if (!readReceiptInfo) { - readReceiptInfo = {}; - readReceiptMap[userId] = readReceiptInfo; + readReceiptPosition = readReceiptMap[userId]; + if (!readReceiptPosition) { + readReceiptPosition = {}; + readReceiptMap[userId] = readReceiptPosition; } } @@ -128,7 +120,7 @@ export function ReadReceiptGroup({ fallbackUserId={userId} offset={position * READ_AVATAR_OFFSET} hidden={hidden} - readReceiptInfo={readReceiptInfo} + readReceiptPosition={readReceiptPosition} checkUnmounting={checkUnmounting} suppressAnimation={suppressAnimation} timestamp={receipt.ts} diff --git a/src/components/views/rooms/ReadReceiptMarker.tsx b/src/components/views/rooms/ReadReceiptMarker.tsx index 7b907e6f2..edfad13fc 100644 --- a/src/components/views/rooms/ReadReceiptMarker.tsx +++ b/src/components/views/rooms/ReadReceiptMarker.tsx @@ -1,18 +1,10 @@ /* -Copyright 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; @@ -24,10 +16,10 @@ import { toPx } from "../../../utils/units"; import MemberAvatar from "../avatars/MemberAvatar"; import { READ_AVATAR_SIZE } from "./ReadReceiptGroup"; -export interface IReadReceiptInfo { +// The top & right from the bounding client rect of each read receipt +export interface IReadReceiptPosition { top?: number; right?: number; - parent?: Element; } interface IProps { @@ -48,7 +40,7 @@ interface IProps { suppressAnimation?: boolean; // an opaque object for storing information about this user's RR in this room - readReceiptInfo?: IReadReceiptInfo; + readReceiptPosition?: IReadReceiptPosition; // A function which is used to check if the parent panel is being // unmounted, to avoid unnecessary work. Should return true if we @@ -90,7 +82,7 @@ export default class ReadReceiptMarker extends React.PureComponent +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 Tulir Asokan -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/components/views/rooms/RoomBreadcrumbs.tsx b/src/components/views/rooms/RoomBreadcrumbs.tsx index 23e25f62f..19405e96b 100644 --- a/src/components/views/rooms/RoomBreadcrumbs.tsx +++ b/src/components/views/rooms/RoomBreadcrumbs.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/RoomContextDetails.tsx b/src/components/views/rooms/RoomContextDetails.tsx index 156ddf089..d341c6fbb 100644 --- a/src/components/views/rooms/RoomContextDetails.tsx +++ b/src/components/views/rooms/RoomContextDetails.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/rooms/RoomHeader.tsx b/src/components/views/rooms/RoomHeader.tsx index 1b5d02e0c..fa825c092 100644 --- a/src/components/views/rooms/RoomHeader.tsx +++ b/src/components/views/rooms/RoomHeader.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback, useContext, useMemo, useState } from "react"; @@ -50,17 +42,16 @@ import RightPanelStore from "../../../stores/right-panel/RightPanelStore"; import PosthogTrackers from "../../../PosthogTrackers"; import { VideoRoomChatButton } from "./RoomHeader/VideoRoomChatButton"; import { RoomKnocksBar } from "./RoomKnocksBar"; -import { useIsVideoRoom } from "../../../utils/video-rooms"; +import { isVideoRoom as calcIsVideoRoom } from "../../../utils/video-rooms"; import { notificationLevelToIndicator } from "../../../utils/notifications"; import { CallGuestLinkButton } from "./RoomHeader/CallGuestLinkButton"; import { ButtonEvent } from "../elements/AccessibleButton"; -import { ReleaseAnnouncement } from "../../structures/ReleaseAnnouncement"; -import { useIsReleaseAnnouncementOpen } from "../../../hooks/useIsReleaseAnnouncementOpen"; -import { ReleaseAnnouncementStore } from "../../../stores/ReleaseAnnouncementStore"; import WithPresenceIndicator, { useDmMember } from "../avatars/WithPresenceIndicator"; import { IOOBData } from "../../../stores/ThreepidInviteStore"; import RoomContext from "../../../contexts/RoomContext"; import { MainSplitContentType } from "../../structures/RoomView"; +import defaultDispatcher from "../../../dispatcher/dispatcher.ts"; +import { RoomSettingsTab } from "../dialogs/RoomSettingsDialog.tsx"; import TchapUIFeature from "../../../../../../src/tchap/util/TchapUIFeature"; // :TCHAP: customize-room-header-bar import TchapExternalRoomHeader from "../../../../../../src/tchap/components/views/rooms/TchapExternalRoomHeader"; // :TCHAP: customize-room-header-bar @@ -237,36 +228,40 @@ export default function RoomHeader({ voiceCallButton = undefined; } - const isReleaseAnnouncementOpen = useIsReleaseAnnouncementOpen("newRoomHeader"); - const roomContext = useContext(RoomContext); - const isVideoRoom = useIsVideoRoom(room); + const isVideoRoom = calcIsVideoRoom(room); const showChatButton = isVideoRoom || roomContext.mainSplitContentType === MainSplitContentType.MaximisedWidget || roomContext.mainSplitContentType === MainSplitContentType.Call; + const onAvatarClick = (): void => { + defaultDispatcher.dispatch({ + action: "open_room_settings", + initial_tab_id: RoomSettingsTab.General, + }); + }; + return ( <> - + {/* We hide this from the tabIndex list as it is a pointer shortcut and superfluous for a11y */} + + + - + + {additionalButtons?.map((props) => { const label = props.label(); @@ -376,7 +370,7 @@ export default function RoomHeader({ { evt.stopPropagation(); - RightPanelStore.instance.showOrHidePanel(RightPanelPhases.RoomSummary); + RightPanelStore.instance.showOrHidePhase(RightPanelPhases.RoomSummary); }} aria-label={_t("right_panel|room_summary_card|title")} > @@ -393,7 +387,7 @@ export default function RoomHeader({ indicator={notificationLevelToIndicator(threadNotifications)} onClick={(evt) => { evt.stopPropagation(); - RightPanelStore.instance.showOrHidePanel(RightPanelPhases.ThreadPanel); + RightPanelStore.instance.showOrHidePhase(RightPanelPhases.ThreadPanel); PosthogTrackers.trackInteraction("WebRoomHeaderButtonsThreadsButton", evt); }} aria-label={_t("common|threads")} @@ -425,7 +419,7 @@ export default function RoomHeader({ indicator={notificationLevelToIndicator(globalNotificationState.level)} onClick={(evt) => { evt.stopPropagation(); - RightPanelStore.instance.showOrHidePanel(RightPanelPhases.NotificationPanel); + RightPanelStore.instance.showOrHidePhase(RightPanelPhases.NotificationPanel); }} aria-label={_t("notifications|enable_prompt_toast_title")} > @@ -444,7 +438,7 @@ export default function RoomHeader({ viewUserOnClick={false} tooltipLabel={_t("room|header_face_pile_tooltip")} onClick={(e: ButtonEvent) => { - RightPanelStore.instance.showOrHidePanel(RightPanelPhases.RoomMemberList); + RightPanelStore.instance.showOrHidePhase(RightPanelPhases.RoomMemberList); e.stopPropagation(); }} aria-label={_t("common|n_members", { count: memberCount })} diff --git a/src/components/views/rooms/RoomHeader/CallGuestLinkButton.tsx b/src/components/views/rooms/RoomHeader/CallGuestLinkButton.tsx index 32f8ed7e5..3e7c1531a 100644 --- a/src/components/views/rooms/RoomHeader/CallGuestLinkButton.tsx +++ b/src/components/views/rooms/RoomHeader/CallGuestLinkButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import ExternalLinkIcon from "@vector-im/compound-design-tokens/assets/web/icons/link"; import { Button, IconButton, Tooltip } from "@vector-im/compound-web"; diff --git a/src/components/views/rooms/RoomHeader/VideoRoomChatButton.tsx b/src/components/views/rooms/RoomHeader/VideoRoomChatButton.tsx index 434ada3a9..8f79ef8ba 100644 --- a/src/components/views/rooms/RoomHeader/VideoRoomChatButton.tsx +++ b/src/components/views/rooms/RoomHeader/VideoRoomChatButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext } from "react"; @@ -52,7 +44,7 @@ export const VideoRoomChatButton: React.FC<{ room: Room }> = ({ room }) => { // stop event propagating up and triggering RoomHeader bar click // which will open RoomSummary event.stopPropagation(); - sdkContext.rightPanelStore.showOrHidePanel(RightPanelPhases.Timeline); + sdkContext.rightPanelStore.showOrHidePhase(RightPanelPhases.Timeline); }; return ( diff --git a/src/components/views/rooms/RoomInfoLine.tsx b/src/components/views/rooms/RoomInfoLine.tsx index b026054ac..5d570abb9 100644 --- a/src/components/views/rooms/RoomInfoLine.tsx +++ b/src/components/views/rooms/RoomInfoLine.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FC } from "react"; @@ -25,7 +17,7 @@ import { useAsyncMemo } from "../../../hooks/useAsyncMemo"; import { useRoomState } from "../../../hooks/useRoomState"; import { useRoomMemberCount, useMyRoomMembership } from "../../../hooks/useRoomMembers"; import AccessibleButton from "../elements/AccessibleButton"; -import { useIsVideoRoom } from "../../../utils/video-rooms"; +import { isVideoRoom as calcIsVideoRoom } from "../../../utils/video-rooms"; interface IProps { room: Room; @@ -45,7 +37,7 @@ const RoomInfoLine: FC = ({ room }) => { const membership = useMyRoomMembership(room); const memberCount = useRoomMemberCount(room); - const isVideoRoom = useIsVideoRoom(room, true); + const isVideoRoom = calcIsVideoRoom(room); let iconClass: string; let roomType: string; diff --git a/src/components/views/rooms/RoomKnocksBar.tsx b/src/components/views/rooms/RoomKnocksBar.tsx index 9feb23a14..7f9aeae3f 100644 --- a/src/components/views/rooms/RoomKnocksBar.tsx +++ b/src/components/views/rooms/RoomKnocksBar.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Nordeck IT + Consulting GmbH -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EventTimeline, JoinRule, MatrixError, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/rooms/RoomList.tsx b/src/components/views/rooms/RoomList.tsx index ebb0d8938..c0e981ccf 100644 --- a/src/components/views/rooms/RoomList.tsx +++ b/src/components/views/rooms/RoomList.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015-2018, 2020, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2018 , 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EventType, RoomType, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/rooms/RoomListHeader.tsx b/src/components/views/rooms/RoomListHeader.tsx index 913995961..3f838d3fe 100644 --- a/src/components/views/rooms/RoomListHeader.tsx +++ b/src/components/views/rooms/RoomListHeader.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EventType, RoomType, Room, RoomEvent, ClientEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/rooms/RoomPreviewBar.tsx b/src/components/views/rooms/RoomPreviewBar.tsx index 0f4c552fd..b69b01177 100644 --- a/src/components/views/rooms/RoomPreviewBar.tsx +++ b/src/components/views/rooms/RoomPreviewBar.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, ReactNode } from "react"; diff --git a/src/components/views/rooms/RoomPreviewCard.tsx b/src/components/views/rooms/RoomPreviewCard.tsx index 2fc9a57aa..2c816e474 100644 --- a/src/components/views/rooms/RoomPreviewCard.tsx +++ b/src/components/views/rooms/RoomPreviewCard.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FC, useContext, useState } from "react"; @@ -25,7 +17,6 @@ import { UserTab } from "../dialogs/UserTab"; import { EffectiveMembership, getEffectiveMembership } from "../../../utils/membership"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; import { useDispatcher } from "../../../hooks/useDispatcher"; -import { useFeatureEnabled } from "../../../hooks/useSettings"; import { useRoomState } from "../../../hooks/useRoomState"; import { useMyRoomMembership } from "../../../hooks/useRoomMembers"; import AccessibleButton from "../elements/AccessibleButton"; @@ -37,7 +28,7 @@ import RoomAvatar from "../avatars/RoomAvatar"; import MemberAvatar from "../avatars/MemberAvatar"; import { BetaPill } from "../beta/BetaCard"; import RoomInfoLine from "./RoomInfoLine"; -import { useIsVideoRoom } from "../../../utils/video-rooms"; +import { isVideoRoom as calcIsVideoRoom } from "../../../utils/video-rooms"; interface IProps { room: Room; @@ -51,8 +42,7 @@ interface IProps { // and viewing invite reasons to achieve parity with the default invite screen. const RoomPreviewCard: FC = ({ room, onJoinButtonClicked, onRejectButtonClicked }) => { const cli = useContext(MatrixClientContext); - const videoRoomsEnabled = useFeatureEnabled("feature_video_rooms"); - const isVideoRoom = useIsVideoRoom(room, true); + const isVideoRoom = calcIsVideoRoom(room); const myMembership = useMyRoomMembership(room); useDispatcher(defaultDispatcher, (payload) => { if (payload.action === Action.JoinRoomError && payload.roomId === room.roomId) { @@ -103,7 +93,7 @@ const RoomPreviewCard: FC = ({ room, onJoinButtonClicked, onRejectButton "room|invites_you_text", {}, { - inviter: () => {inviter?.name || inviteSender}, + inviter: () => {inviter?.name || inviteSender}, }, )}
    @@ -172,24 +162,6 @@ const RoomPreviewCard: FC = ({ room, onJoinButtonClicked, onRejectButton avatarRow = ; } - let notice: string | null = null; - if (cannotJoin) { - notice = _t("room|join_failed_needs_invite", { - roomName: room.name, - }); - } else if (isVideoRoom && !videoRoomsEnabled) { - notice = - myMembership === KnownMembership.Join - ? _t("room|view_failed_enable_video_rooms") - : _t("room|join_failed_enable_video_rooms"); - - joinButtons = ( - - {_t("room|show_labs_settings")} - - ); - } - return (
    {inviterSection} @@ -200,7 +172,11 @@ const RoomPreviewCard: FC = ({ room, onJoinButtonClicked, onRejectButton {room.getJoinRule() === "public" && } - {notice ?
    {notice}
    : null} + {cannotJoin ? ( +
    + {_t("room|join_failed_needs_invite", { roomName: room.name })} +
    + ) : null}
    {joinButtons}
    ); diff --git a/src/components/views/rooms/RoomSearchAuxPanel.tsx b/src/components/views/rooms/RoomSearchAuxPanel.tsx index 1461b12a4..e317e6161 100644 --- a/src/components/views/rooms/RoomSearchAuxPanel.tsx +++ b/src/components/views/rooms/RoomSearchAuxPanel.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -46,7 +38,7 @@ const RoomSearchAuxPanel: React.FC = ({ searchInfo, isRoomEncrypted, onSe _t( "room|search|summary", { count: searchInfo.count }, - { query: () => {searchInfo.term} }, + { query: () => {searchInfo.term} }, ) ) : ( diff --git a/src/components/views/rooms/RoomSublist.tsx b/src/components/views/rooms/RoomSublist.tsx index 7a25f6595..12f6e70d3 100644 --- a/src/components/views/rooms/RoomSublist.tsx +++ b/src/components/views/rooms/RoomSublist.tsx @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017, 2018 Vector Creations Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2017, 2018 Vector Creations Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/rooms/RoomTile.tsx b/src/components/views/rooms/RoomTile.tsx index 71ff1ef29..93fb42f44 100644 --- a/src/components/views/rooms/RoomTile.tsx +++ b/src/components/views/rooms/RoomTile.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2018 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2015-2017, 2019-2021 The Matrix.org Foundation C.I.C. +Copyright 2015-2017 , 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/components/views/rooms/RoomTileCallSummary.tsx b/src/components/views/rooms/RoomTileCallSummary.tsx index c244a78b4..d97ae1b71 100644 --- a/src/components/views/rooms/RoomTileCallSummary.tsx +++ b/src/components/views/rooms/RoomTileCallSummary.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FC } from "react"; diff --git a/src/components/views/rooms/RoomTileSubtitle.tsx b/src/components/views/rooms/RoomTileSubtitle.tsx index f3f8604ac..2295fbe6a 100644 --- a/src/components/views/rooms/RoomTileSubtitle.tsx +++ b/src/components/views/rooms/RoomTileSubtitle.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/RoomUpgradeWarningBar.tsx b/src/components/views/rooms/RoomUpgradeWarningBar.tsx index ab374108e..66519fa76 100644 --- a/src/components/views/rooms/RoomUpgradeWarningBar.tsx +++ b/src/components/views/rooms/RoomUpgradeWarningBar.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2018-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -77,7 +69,7 @@ export default class RoomUpgradeWarningBar extends React.PureComponent {sub}, + b: (sub) => {sub}, i: (sub) => {sub}, }, )} diff --git a/src/components/views/rooms/SearchResultTile.tsx b/src/components/views/rooms/SearchResultTile.tsx index 52977901c..5ebbaffdd 100644 --- a/src/components/views/rooms/SearchResultTile.tsx +++ b/src/components/views/rooms/SearchResultTile.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2019-2023 The Matrix.org Foundation C.I.C. Copyright 2015 OpenMarket Ltd -Copyright 2019 - 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/SendMessageComposer.tsx b/src/components/views/rooms/SendMessageComposer.tsx index 9e986a181..1b3fb4716 100644 --- a/src/components/views/rooms/SendMessageComposer.tsx +++ b/src/components/views/rooms/SendMessageComposer.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, KeyboardEvent, SyntheticEvent } from "react"; diff --git a/src/components/views/rooms/Stickerpicker.tsx b/src/components/views/rooms/Stickerpicker.tsx index 89a66219c..a930fb897 100644 --- a/src/components/views/rooms/Stickerpicker.tsx +++ b/src/components/views/rooms/Stickerpicker.tsx @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/ThirdPartyMemberInfo.tsx b/src/components/views/rooms/ThirdPartyMemberInfo.tsx index b510d5e00..f39fa723b 100644 --- a/src/components/views/rooms/ThirdPartyMemberInfo.tsx +++ b/src/components/views/rooms/ThirdPartyMemberInfo.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/ThreadSummary.tsx b/src/components/views/rooms/ThreadSummary.tsx index 2e03262bd..768cd1097 100644 --- a/src/components/views/rooms/ThreadSummary.tsx +++ b/src/components/views/rooms/ThreadSummary.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext, useState } from "react"; diff --git a/src/components/views/rooms/TopUnreadMessagesBar.tsx b/src/components/views/rooms/TopUnreadMessagesBar.tsx index c5d54b94c..b90c69f85 100644 --- a/src/components/views/rooms/TopUnreadMessagesBar.tsx +++ b/src/components/views/rooms/TopUnreadMessagesBar.tsx @@ -1,17 +1,9 @@ /* -Copyright 2016 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/VoiceRecordComposerTile.tsx b/src/components/views/rooms/VoiceRecordComposerTile.tsx index 4010adf28..bd8ea7de7 100644 --- a/src/components/views/rooms/VoiceRecordComposerTile.tsx +++ b/src/components/views/rooms/VoiceRecordComposerTile.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/rooms/WhoIsTypingTile.tsx b/src/components/views/rooms/WhoIsTypingTile.tsx index 2bc633794..85cf4f6dd 100644 --- a/src/components/views/rooms/WhoIsTypingTile.tsx +++ b/src/components/views/rooms/WhoIsTypingTile.tsx @@ -1,18 +1,9 @@ /* +Copyright 2017-2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017, 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/ComposerContext.ts b/src/components/views/rooms/wysiwyg_composer/ComposerContext.ts index 19daf8fde..3babdfb93 100644 --- a/src/components/views/rooms/wysiwyg_composer/ComposerContext.ts +++ b/src/components/views/rooms/wysiwyg_composer/ComposerContext.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { createContext, useContext } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/DynamicImportWysiwygComposer.tsx b/src/components/views/rooms/wysiwyg_composer/DynamicImportWysiwygComposer.tsx index 97e5b6759..5eba21357 100644 --- a/src/components/views/rooms/wysiwyg_composer/DynamicImportWysiwygComposer.tsx +++ b/src/components/views/rooms/wysiwyg_composer/DynamicImportWysiwygComposer.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps, lazy, Suspense } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/EditWysiwygComposer.tsx b/src/components/views/rooms/wysiwyg_composer/EditWysiwygComposer.tsx index 69bc8b618..98597c736 100644 --- a/src/components/views/rooms/wysiwyg_composer/EditWysiwygComposer.tsx +++ b/src/components/views/rooms/wysiwyg_composer/EditWysiwygComposer.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ForwardedRef, forwardRef, MutableRefObject, useRef } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/SendWysiwygComposer.tsx b/src/components/views/rooms/wysiwyg_composer/SendWysiwygComposer.tsx index 300032a4d..7f790978f 100644 --- a/src/components/views/rooms/wysiwyg_composer/SendWysiwygComposer.tsx +++ b/src/components/views/rooms/wysiwyg_composer/SendWysiwygComposer.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ForwardedRef, forwardRef, MutableRefObject, useRef } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/components/EditionButtons.tsx b/src/components/views/rooms/wysiwyg_composer/components/EditionButtons.tsx index d79094e56..fccd4b7f2 100644 --- a/src/components/views/rooms/wysiwyg_composer/components/EditionButtons.tsx +++ b/src/components/views/rooms/wysiwyg_composer/components/EditionButtons.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/components/Editor.tsx b/src/components/views/rooms/wysiwyg_composer/components/Editor.tsx index 43e46572d..7e3d0f4d6 100644 --- a/src/components/views/rooms/wysiwyg_composer/components/Editor.tsx +++ b/src/components/views/rooms/wysiwyg_composer/components/Editor.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/rooms/wysiwyg_composer/components/Emoji.tsx b/src/components/views/rooms/wysiwyg_composer/components/Emoji.tsx index a7cdf8146..b7a6d65e2 100644 --- a/src/components/views/rooms/wysiwyg_composer/components/Emoji.tsx +++ b/src/components/views/rooms/wysiwyg_composer/components/Emoji.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/components/FormattingButtons.tsx b/src/components/views/rooms/wysiwyg_composer/components/FormattingButtons.tsx index 0b09654b7..85f1ad79b 100644 --- a/src/components/views/rooms/wysiwyg_composer/components/FormattingButtons.tsx +++ b/src/components/views/rooms/wysiwyg_composer/components/FormattingButtons.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { MouseEventHandler, ReactNode } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/components/LinkModal.tsx b/src/components/views/rooms/wysiwyg_composer/components/LinkModal.tsx index 34e58e271..3d7798249 100644 --- a/src/components/views/rooms/wysiwyg_composer/components/LinkModal.tsx +++ b/src/components/views/rooms/wysiwyg_composer/components/LinkModal.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { FormattingFunctions } from "@matrix-org/matrix-wysiwyg"; diff --git a/src/components/views/rooms/wysiwyg_composer/components/PlainTextComposer.tsx b/src/components/views/rooms/wysiwyg_composer/components/PlainTextComposer.tsx index e35ad34de..787f0dd88 100644 --- a/src/components/views/rooms/wysiwyg_composer/components/PlainTextComposer.tsx +++ b/src/components/views/rooms/wysiwyg_composer/components/PlainTextComposer.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/rooms/wysiwyg_composer/components/WysiwygAutocomplete.tsx b/src/components/views/rooms/wysiwyg_composer/components/WysiwygAutocomplete.tsx index 1e1cb0eb6..a617e23db 100644 --- a/src/components/views/rooms/wysiwyg_composer/components/WysiwygAutocomplete.tsx +++ b/src/components/views/rooms/wysiwyg_composer/components/WysiwygAutocomplete.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ForwardedRef, forwardRef, FunctionComponent } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/components/WysiwygComposer.tsx b/src/components/views/rooms/wysiwyg_composer/components/WysiwygComposer.tsx index 645b1a6b8..34e8b1802 100644 --- a/src/components/views/rooms/wysiwyg_composer/components/WysiwygComposer.tsx +++ b/src/components/views/rooms/wysiwyg_composer/components/WysiwygComposer.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { memo, MutableRefObject, ReactNode, useEffect, useMemo, useRef } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/hooks/useComposerFunctions.ts b/src/components/views/rooms/wysiwyg_composer/hooks/useComposerFunctions.ts index 7578fb738..aa7c672af 100644 --- a/src/components/views/rooms/wysiwyg_composer/hooks/useComposerFunctions.ts +++ b/src/components/views/rooms/wysiwyg_composer/hooks/useComposerFunctions.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RefObject, useMemo } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/hooks/useEditing.ts b/src/components/views/rooms/wysiwyg_composer/hooks/useEditing.ts index 11b80c38f..5d1c3b867 100644 --- a/src/components/views/rooms/wysiwyg_composer/hooks/useEditing.ts +++ b/src/components/views/rooms/wysiwyg_composer/hooks/useEditing.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ISendEventResponse } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/rooms/wysiwyg_composer/hooks/useInitialContent.ts b/src/components/views/rooms/wysiwyg_composer/hooks/useInitialContent.ts index 431281426..2e0ddd3cc 100644 --- a/src/components/views/rooms/wysiwyg_composer/hooks/useInitialContent.ts +++ b/src/components/views/rooms/wysiwyg_composer/hooks/useInitialContent.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/rooms/wysiwyg_composer/hooks/useInputEventProcessor.ts b/src/components/views/rooms/wysiwyg_composer/hooks/useInputEventProcessor.ts index a9cfa2966..4a8ecee92 100644 --- a/src/components/views/rooms/wysiwyg_composer/hooks/useInputEventProcessor.ts +++ b/src/components/views/rooms/wysiwyg_composer/hooks/useInputEventProcessor.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Wysiwyg, WysiwygEvent } from "@matrix-org/matrix-wysiwyg"; diff --git a/src/components/views/rooms/wysiwyg_composer/hooks/useIsExpanded.ts b/src/components/views/rooms/wysiwyg_composer/hooks/useIsExpanded.ts index c48239fea..09e47d7b0 100644 --- a/src/components/views/rooms/wysiwyg_composer/hooks/useIsExpanded.ts +++ b/src/components/views/rooms/wysiwyg_composer/hooks/useIsExpanded.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MutableRefObject, useEffect, useState } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/hooks/useIsFocused.ts b/src/components/views/rooms/wysiwyg_composer/hooks/useIsFocused.ts index c43174657..de9f758dc 100644 --- a/src/components/views/rooms/wysiwyg_composer/hooks/useIsFocused.ts +++ b/src/components/views/rooms/wysiwyg_composer/hooks/useIsFocused.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { FocusEvent, useCallback, useEffect, useRef, useState } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/hooks/usePlainTextInitialization.ts b/src/components/views/rooms/wysiwyg_composer/hooks/usePlainTextInitialization.ts index 3528fda01..6adf43d9a 100644 --- a/src/components/views/rooms/wysiwyg_composer/hooks/usePlainTextInitialization.ts +++ b/src/components/views/rooms/wysiwyg_composer/hooks/usePlainTextInitialization.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RefObject, useEffect } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/hooks/usePlainTextListeners.ts b/src/components/views/rooms/wysiwyg_composer/hooks/usePlainTextListeners.ts index 282ed9d17..89e096414 100644 --- a/src/components/views/rooms/wysiwyg_composer/hooks/usePlainTextListeners.ts +++ b/src/components/views/rooms/wysiwyg_composer/hooks/usePlainTextListeners.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { KeyboardEvent, RefObject, SyntheticEvent, useCallback, useRef, useState } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/hooks/useSelection.ts b/src/components/views/rooms/wysiwyg_composer/hooks/useSelection.ts index 92823773c..aa541afa5 100644 --- a/src/components/views/rooms/wysiwyg_composer/hooks/useSelection.ts +++ b/src/components/views/rooms/wysiwyg_composer/hooks/useSelection.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useCallback, useEffect } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/hooks/useSetCursorPosition.ts b/src/components/views/rooms/wysiwyg_composer/hooks/useSetCursorPosition.ts index 69afff9d1..01d42378a 100644 --- a/src/components/views/rooms/wysiwyg_composer/hooks/useSetCursorPosition.ts +++ b/src/components/views/rooms/wysiwyg_composer/hooks/useSetCursorPosition.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RefObject, useEffect } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/hooks/useSuggestion.ts b/src/components/views/rooms/wysiwyg_composer/hooks/useSuggestion.ts index 337849aec..9b728c101 100644 --- a/src/components/views/rooms/wysiwyg_composer/hooks/useSuggestion.ts +++ b/src/components/views/rooms/wysiwyg_composer/hooks/useSuggestion.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EMOTICON_TO_EMOJI } from "@matrix-org/emojibase-bindings"; diff --git a/src/components/views/rooms/wysiwyg_composer/hooks/useWysiwygEditActionHandler.ts b/src/components/views/rooms/wysiwyg_composer/hooks/useWysiwygEditActionHandler.ts index 10a96e611..e1e34623c 100644 --- a/src/components/views/rooms/wysiwyg_composer/hooks/useWysiwygEditActionHandler.ts +++ b/src/components/views/rooms/wysiwyg_composer/hooks/useWysiwygEditActionHandler.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RefObject, useCallback, useRef } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/hooks/useWysiwygSendActionHandler.ts b/src/components/views/rooms/wysiwyg_composer/hooks/useWysiwygSendActionHandler.ts index 50a229b63..16e1e608e 100644 --- a/src/components/views/rooms/wysiwyg_composer/hooks/useWysiwygSendActionHandler.ts +++ b/src/components/views/rooms/wysiwyg_composer/hooks/useWysiwygSendActionHandler.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MutableRefObject, useCallback, useRef } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/hooks/utils.ts b/src/components/views/rooms/wysiwyg_composer/hooks/utils.ts index f95405c3b..9210ef041 100644 --- a/src/components/views/rooms/wysiwyg_composer/hooks/utils.ts +++ b/src/components/views/rooms/wysiwyg_composer/hooks/utils.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MutableRefObject, RefObject } from "react"; diff --git a/src/components/views/rooms/wysiwyg_composer/index.ts b/src/components/views/rooms/wysiwyg_composer/index.ts index 92cf97032..82d7d2a90 100644 --- a/src/components/views/rooms/wysiwyg_composer/index.ts +++ b/src/components/views/rooms/wysiwyg_composer/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export { diff --git a/src/components/views/rooms/wysiwyg_composer/types.ts b/src/components/views/rooms/wysiwyg_composer/types.ts index 97d3fd91a..d38704f34 100644 --- a/src/components/views/rooms/wysiwyg_composer/types.ts +++ b/src/components/views/rooms/wysiwyg_composer/types.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export type ComposerFunctions = { diff --git a/src/components/views/rooms/wysiwyg_composer/utils/autocomplete.ts b/src/components/views/rooms/wysiwyg_composer/utils/autocomplete.ts index c7a8670c6..ef85fed05 100644 --- a/src/components/views/rooms/wysiwyg_composer/utils/autocomplete.ts +++ b/src/components/views/rooms/wysiwyg_composer/utils/autocomplete.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { AllowedMentionAttributes, MappedSuggestion } from "@matrix-org/matrix-wysiwyg"; diff --git a/src/components/views/rooms/wysiwyg_composer/utils/createMessageContent.ts b/src/components/views/rooms/wysiwyg_composer/utils/createMessageContent.ts index 6b056c915..43a4f38ff 100644 --- a/src/components/views/rooms/wysiwyg_composer/utils/createMessageContent.ts +++ b/src/components/views/rooms/wysiwyg_composer/utils/createMessageContent.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { richToPlain, plainToRich } from "@matrix-org/matrix-wysiwyg"; diff --git a/src/components/views/rooms/wysiwyg_composer/utils/editing.ts b/src/components/views/rooms/wysiwyg_composer/utils/editing.ts index 335e67ac6..58a9e2449 100644 --- a/src/components/views/rooms/wysiwyg_composer/utils/editing.ts +++ b/src/components/views/rooms/wysiwyg_composer/utils/editing.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EventStatus, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/rooms/wysiwyg_composer/utils/event.ts b/src/components/views/rooms/wysiwyg_composer/utils/event.ts index 3683c336e..5fd37b366 100644 --- a/src/components/views/rooms/wysiwyg_composer/utils/event.ts +++ b/src/components/views/rooms/wysiwyg_composer/utils/event.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, MatrixEvent, THREAD_RELATION_TYPE } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/rooms/wysiwyg_composer/utils/isContentModified.ts b/src/components/views/rooms/wysiwyg_composer/utils/isContentModified.ts index 62af83b82..6ffbb9b69 100644 --- a/src/components/views/rooms/wysiwyg_composer/utils/isContentModified.ts +++ b/src/components/views/rooms/wysiwyg_composer/utils/isContentModified.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RoomMessageEventContent, RoomMessageTextEventContent } from "matrix-js-sdk/src/types"; diff --git a/src/components/views/rooms/wysiwyg_composer/utils/message.ts b/src/components/views/rooms/wysiwyg_composer/utils/message.ts index 3122a9d2e..d368d150e 100644 --- a/src/components/views/rooms/wysiwyg_composer/utils/message.ts +++ b/src/components/views/rooms/wysiwyg_composer/utils/message.ts @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Composer as ComposerEvent } from "@matrix-org/analytics-events/types/typescript/Composer"; diff --git a/src/components/views/rooms/wysiwyg_composer/utils/selection.ts b/src/components/views/rooms/wysiwyg_composer/utils/selection.ts index 4af4b00c9..f52667521 100644 --- a/src/components/views/rooms/wysiwyg_composer/utils/selection.ts +++ b/src/components/views/rooms/wysiwyg_composer/utils/selection.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { SubSelection } from "../types"; diff --git a/src/components/views/settings/AddPrivilegedUsers.tsx b/src/components/views/settings/AddPrivilegedUsers.tsx index 5bcaecd46..060ea0c9f 100644 --- a/src/components/views/settings/AddPrivilegedUsers.tsx +++ b/src/components/views/settings/AddPrivilegedUsers.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FormEvent, useCallback, useContext, useRef, useState } from "react"; diff --git a/src/components/views/settings/AddRemoveThreepids.tsx b/src/components/views/settings/AddRemoveThreepids.tsx index 242afd272..4535400c3 100644 --- a/src/components/views/settings/AddRemoveThreepids.tsx +++ b/src/components/views/settings/AddRemoveThreepids.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback, useRef, useState } from "react"; diff --git a/src/components/views/settings/AvatarSetting.tsx b/src/components/views/settings/AvatarSetting.tsx index 9bb9f736b..eaeabc641 100644 --- a/src/components/views/settings/AvatarSetting.tsx +++ b/src/components/views/settings/AvatarSetting.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019, 2024 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, createRef, useCallback, useEffect, useState } from "react"; diff --git a/src/components/views/settings/BridgeTile.tsx b/src/components/views/settings/BridgeTile.tsx index 79dd6d9f3..6ae860aa0 100644 --- a/src/components/views/settings/BridgeTile.tsx +++ b/src/components/views/settings/BridgeTile.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/settings/ChangeDisplayName.tsx b/src/components/views/settings/ChangeDisplayName.tsx index a7bc2b4a0..05a4334f4 100644 --- a/src/components/views/settings/ChangeDisplayName.tsx +++ b/src/components/views/settings/ChangeDisplayName.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/ChangePassword.tsx b/src/components/views/settings/ChangePassword.tsx index 77c9d8afd..9461f20d8 100644 --- a/src/components/views/settings/ChangePassword.tsx +++ b/src/components/views/settings/ChangePassword.tsx @@ -1,18 +1,9 @@ /* +Copyright 2018-2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018-2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/CrossSigningPanel.tsx b/src/components/views/settings/CrossSigningPanel.tsx index 07bedb5dd..b246d7312 100644 --- a/src/components/views/settings/CrossSigningPanel.tsx +++ b/src/components/views/settings/CrossSigningPanel.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/CryptographyPanel.tsx b/src/components/views/settings/CryptographyPanel.tsx index e123f7dba..4076729ac 100644 --- a/src/components/views/settings/CryptographyPanel.tsx +++ b/src/components/views/settings/CryptographyPanel.tsx @@ -1,20 +1,13 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; +import { logger } from "matrix-js-sdk/src/logger"; import type ExportE2eKeysDialog from "../../../async-components/views/dialogs/security/ExportE2eKeysDialog"; import type ImportE2eKeysDialog from "../../../async-components/views/dialogs/security/ImportE2eKeysDialog"; @@ -30,25 +23,53 @@ import SettingsSubsection, { SettingsSubsectionText } from "./shared/SettingsSub interface IProps {} -interface IState {} +interface IState { + /** The device's base64-encoded Ed25519 identity key, or: + * + * * `undefined`: not yet loaded + * * `null`: encryption is not supported (or the crypto stack was not correctly initialized) + */ + deviceIdentityKey: string | undefined | null; +} export default class CryptographyPanel extends React.Component { public constructor(props: IProps) { super(props); + + const client = MatrixClientPeg.safeGet(); + const crypto = client.getCrypto(); + if (!crypto) { + this.state = { deviceIdentityKey: null }; + } else { + this.state = { deviceIdentityKey: undefined }; + crypto + .getOwnDeviceKeys() + .then((keys) => { + this.setState({ deviceIdentityKey: keys.ed25519 }); + }) + .catch((e) => { + logger.error(`CryptographyPanel: Error fetching own device keys: ${e}`); + this.setState({ deviceIdentityKey: null }); + }); + } } public render(): React.ReactNode { const client = MatrixClientPeg.safeGet(); const deviceId = client.deviceId; - let identityKey = client.getDeviceEd25519Key(); - if (!identityKey) { + let identityKey = this.state.deviceIdentityKey; + if (identityKey === undefined) { + // Should show a spinner here really, but since this will be very transitional, I can't be doing with the + // necessary styling. + identityKey = "..."; + } else if (identityKey === null) { identityKey = _t("encryption|not_supported"); } else { identityKey = FormattingUtils.formatCryptoKey(identityKey); } let importExportButtons: JSX.Element | undefined; - if (client.isCryptoEnabled()) { + if (client.getCrypto()) { importExportButtons = (
    @@ -77,20 +98,22 @@ export default class CryptographyPanel extends React.Component { - - - - - - - - + + + + + + + + + +
    {_t("settings|security|session_id")} - {deviceId} -
    {_t("settings|security|session_key")} - - {identityKey} - -
    {_t("settings|security|session_id")} + {deviceId} +
    {_t("settings|security|session_key")} + + {identityKey} + +
    {importExportButtons} diff --git a/src/components/views/settings/EventIndexPanel.tsx b/src/components/views/settings/EventIndexPanel.tsx index e26fc79e6..d2ade3571 100644 --- a/src/components/views/settings/EventIndexPanel.tsx +++ b/src/components/views/settings/EventIndexPanel.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020-2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/FontScalingPanel.tsx b/src/components/views/settings/FontScalingPanel.tsx index 593e5c7c9..5cdd9d16b 100644 --- a/src/components/views/settings/FontScalingPanel.tsx +++ b/src/components/views/settings/FontScalingPanel.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/ImageSizePanel.tsx b/src/components/views/settings/ImageSizePanel.tsx index ad601010c..e21579262 100644 --- a/src/components/views/settings/ImageSizePanel.tsx +++ b/src/components/views/settings/ImageSizePanel.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/IntegrationManager.tsx b/src/components/views/settings/IntegrationManager.tsx index e1169f55a..91b3b4633 100644 --- a/src/components/views/settings/IntegrationManager.tsx +++ b/src/components/views/settings/IntegrationManager.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/JoinRuleSettings.tsx b/src/components/views/settings/JoinRuleSettings.tsx index 0d7cac30d..a6c1e9124 100644 --- a/src/components/views/settings/JoinRuleSettings.tsx +++ b/src/components/views/settings/JoinRuleSettings.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, useEffect, useState } from "react"; @@ -289,7 +281,7 @@ const JoinRuleSettings: React.FC = ({ "room_settings|security|join_rule_restricted_description_active_space", {}, { - spaceName: () => {SpaceStore.instance.activeSpaceRoom!.name}, + spaceName: () => {SpaceStore.instance.activeSpaceRoom!.name}, }, ); } else { @@ -357,7 +349,7 @@ const JoinRuleSettings: React.FC = ({ (roomId) => !cli.getRoom(roomId)?.currentState.maySendStateEvent(EventType.SpaceChild, userId), ); if (unableToUpdateSomeParents) { - warning = {_t("room_settings|security|join_rule_restricted_upgrade_warning")}; + warning = {_t("room_settings|security|join_rule_restricted_upgrade_warning")}; } upgradeRequiredDialog( diff --git a/src/components/views/settings/KeyboardShortcut.tsx b/src/components/views/settings/KeyboardShortcut.tsx index ea907655e..4f0973b10 100644 --- a/src/components/views/settings/KeyboardShortcut.tsx +++ b/src/components/views/settings/KeyboardShortcut.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/LayoutSwitcher.tsx b/src/components/views/settings/LayoutSwitcher.tsx index de3827b63..5ca2610a3 100644 --- a/src/components/views/settings/LayoutSwitcher.tsx +++ b/src/components/views/settings/LayoutSwitcher.tsx @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import React, { JSX, useEffect, useState } from "react"; diff --git a/src/components/views/settings/Notifications.tsx b/src/components/views/settings/Notifications.tsx index fe111ee2f..e1b5e2bbe 100644 --- a/src/components/views/settings/Notifications.tsx +++ b/src/components/views/settings/Notifications.tsx @@ -1,17 +1,9 @@ /* -Copyright 2016 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/settings/PowerLevelSelector.tsx b/src/components/views/settings/PowerLevelSelector.tsx index dcb1590c0..a2de6791d 100644 --- a/src/components/views/settings/PowerLevelSelector.tsx +++ b/src/components/views/settings/PowerLevelSelector.tsx @@ -1,19 +1,9 @@ /* - * + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import React, { useState, JSX, PropsWithChildren } from "react"; diff --git a/src/components/views/settings/SecureBackupPanel.tsx b/src/components/views/settings/SecureBackupPanel.tsx index 8a9ec085f..7c3a44c93 100644 --- a/src/components/views/settings/SecureBackupPanel.tsx +++ b/src/components/views/settings/SecureBackupPanel.tsx @@ -1,18 +1,10 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; @@ -277,7 +269,7 @@ export default class SecureBackupPanel extends React.PureComponent<{}, IState> { {/* end TCHAP */} {/* :TCHAP activate-cross-signing-and-secure-storage-react - remove element text - {_t("settings|security|key_backup_inactive", {}, { b: (sub) => {sub} })} + {_t("settings|security|key_backup_inactive", {}, { b: (sub) => {sub} })} {_t("settings|security|key_backup_connect_prompt")} @@ -357,7 +349,11 @@ export default class SecureBackupPanel extends React.PureComponent<{}, IState> { statusDescription = ( <> - {_t("settings|security|key_backup_inactive_warning", {}, { b: (sub) => {sub} })} + {_t( + "settings|security|key_backup_inactive_warning", + {}, + { b: (sub) => {sub} }, + )} {/* :TCHAP: remove {_t("encryption|setup_secure_backup|explainer")} diff --git a/src/components/views/settings/SetIdServer.tsx b/src/components/views/settings/SetIdServer.tsx index bd75204e7..5b6645b16 100644 --- a/src/components/views/settings/SetIdServer.tsx +++ b/src/components/views/settings/SetIdServer.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; @@ -196,8 +188,8 @@ export default class SetIdServer extends React.Component { "identity_server|change_prompt", {}, { - current: (sub) => {abbreviateUrl(currentClientIdServer)}, - new: (sub) => {abbreviateUrl(idServer)}, + current: (sub) => {abbreviateUrl(currentClientIdServer)}, + new: (sub) => {abbreviateUrl(idServer)}, }, ), button: _t("action|continue"), @@ -243,7 +235,7 @@ export default class SetIdServer extends React.Component { unboundMessage: _t( "identity_server|disconnect_server", {}, - { idserver: (sub) => {abbreviateUrl(this.state.currentClientIdServer)} }, + { idserver: (sub) => {abbreviateUrl(this.state.currentClientIdServer)} }, ), button: _t("action|disconnect"), }); @@ -286,8 +278,8 @@ export default class SetIdServer extends React.Component { let message; let danger = false; const messageElements = { - idserver: (sub: string) => {abbreviateUrl(currentClientIdServer)}, - b: (sub: string) => {sub}, + idserver: (sub: string) => {abbreviateUrl(currentClientIdServer)}, + b: (sub: string) => {sub}, }; if (!currentServerReachable) { message = ( @@ -364,13 +356,13 @@ export default class SetIdServer extends React.Component { bodyText = _t( "identity_server|description_connected", {}, - { server: (sub) => {abbreviateUrl(idServerUrl)} }, + { server: (sub) => {abbreviateUrl(idServerUrl)} }, ); if (this.props.missingTerms) { bodyText = _t( "identity_server|change_server_prompt", {}, - { server: (sub) => {abbreviateUrl(idServerUrl)} }, + { server: (sub) => {abbreviateUrl(idServerUrl)} }, ); } } else { diff --git a/src/components/views/settings/SetIntegrationManager.tsx b/src/components/views/settings/SetIntegrationManager.tsx index fe55efd90..c129d0e2e 100644 --- a/src/components/views/settings/SetIntegrationManager.tsx +++ b/src/components/views/settings/SetIntegrationManager.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -66,7 +58,7 @@ export default class SetIntegrationManager extends React.Component {sub} }, + { b: (sub) => {sub} }, ); } else { bodyText = _t("integration_manager|use_im"); diff --git a/src/components/views/settings/SettingsFieldset.tsx b/src/components/views/settings/SettingsFieldset.tsx index d63b5bf78..1ff40bcf7 100644 --- a/src/components/views/settings/SettingsFieldset.tsx +++ b/src/components/views/settings/SettingsFieldset.tsx @@ -1,15 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, HTMLAttributes } from "react"; diff --git a/src/components/views/settings/SpellCheckSettings.tsx b/src/components/views/settings/SpellCheckSettings.tsx index 58737773e..13f542b74 100644 --- a/src/components/views/settings/SpellCheckSettings.tsx +++ b/src/components/views/settings/SpellCheckSettings.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/ThemeChoicePanel.tsx b/src/components/views/settings/ThemeChoicePanel.tsx index c817cee0f..4ba08612a 100644 --- a/src/components/views/settings/ThemeChoicePanel.tsx +++ b/src/components/views/settings/ThemeChoicePanel.tsx @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, JSX, useCallback, useMemo, useRef, useState } from "react"; diff --git a/src/components/views/settings/UpdateCheckButton.tsx b/src/components/views/settings/UpdateCheckButton.tsx index 9793999bd..3b2c9bfa6 100644 --- a/src/components/views/settings/UpdateCheckButton.tsx +++ b/src/components/views/settings/UpdateCheckButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode, useState } from "react"; diff --git a/src/components/views/settings/UserPersonalInfoSettings.tsx b/src/components/views/settings/UserPersonalInfoSettings.tsx index 63925424a..151f54ced 100644 --- a/src/components/views/settings/UserPersonalInfoSettings.tsx +++ b/src/components/views/settings/UserPersonalInfoSettings.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback, useEffect, useState } from "react"; diff --git a/src/components/views/settings/UserProfileSettings.tsx b/src/components/views/settings/UserProfileSettings.tsx index b793f27dd..59eb2f935 100644 --- a/src/components/views/settings/UserProfileSettings.tsx +++ b/src/components/views/settings/UserProfileSettings.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2024 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, ReactNode, useCallback, useEffect, useMemo, useState } from "react"; diff --git a/src/components/views/settings/devices/CurrentDeviceSection.tsx b/src/components/views/settings/devices/CurrentDeviceSection.tsx index c3d5f643b..cf338392c 100644 --- a/src/components/views/settings/devices/CurrentDeviceSection.tsx +++ b/src/components/views/settings/devices/CurrentDeviceSection.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useState } from "react"; diff --git a/src/components/views/settings/devices/DeviceDetailHeading.tsx b/src/components/views/settings/devices/DeviceDetailHeading.tsx index f21be9c0b..23ecdbc39 100644 --- a/src/components/views/settings/devices/DeviceDetailHeading.tsx +++ b/src/components/views/settings/devices/DeviceDetailHeading.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useEffect, useState } from "react"; diff --git a/src/components/views/settings/devices/DeviceDetails.tsx b/src/components/views/settings/devices/DeviceDetails.tsx index 546c7cc33..dda0089d8 100644 --- a/src/components/views/settings/devices/DeviceDetails.tsx +++ b/src/components/views/settings/devices/DeviceDetails.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/devices/DeviceExpandDetailsButton.tsx b/src/components/views/settings/devices/DeviceExpandDetailsButton.tsx index 791b61259..d99a2e5d3 100644 --- a/src/components/views/settings/devices/DeviceExpandDetailsButton.tsx +++ b/src/components/views/settings/devices/DeviceExpandDetailsButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/settings/devices/DeviceMetaData.tsx b/src/components/views/settings/devices/DeviceMetaData.tsx index 57e805c9b..08d22968f 100644 --- a/src/components/views/settings/devices/DeviceMetaData.tsx +++ b/src/components/views/settings/devices/DeviceMetaData.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { Fragment } from "react"; diff --git a/src/components/views/settings/devices/DeviceSecurityCard.tsx b/src/components/views/settings/devices/DeviceSecurityCard.tsx index 4c28bca16..1f47135b0 100644 --- a/src/components/views/settings/devices/DeviceSecurityCard.tsx +++ b/src/components/views/settings/devices/DeviceSecurityCard.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/settings/devices/DeviceSecurityLearnMore.tsx b/src/components/views/settings/devices/DeviceSecurityLearnMore.tsx index 66d08ec8f..bc2e0be43 100644 --- a/src/components/views/settings/devices/DeviceSecurityLearnMore.tsx +++ b/src/components/views/settings/devices/DeviceSecurityLearnMore.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps } from "react"; diff --git a/src/components/views/settings/devices/DeviceTile.tsx b/src/components/views/settings/devices/DeviceTile.tsx index 6ee236072..6463af48c 100644 --- a/src/components/views/settings/devices/DeviceTile.tsx +++ b/src/components/views/settings/devices/DeviceTile.tsx @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/devices/DeviceTypeIcon.tsx b/src/components/views/settings/devices/DeviceTypeIcon.tsx index a4e8e5b49..b9ab535e2 100644 --- a/src/components/views/settings/devices/DeviceTypeIcon.tsx +++ b/src/components/views/settings/devices/DeviceTypeIcon.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/devices/DeviceVerificationStatusCard.tsx b/src/components/views/settings/devices/DeviceVerificationStatusCard.tsx index 7c9b3802d..8989400e7 100644 --- a/src/components/views/settings/devices/DeviceVerificationStatusCard.tsx +++ b/src/components/views/settings/devices/DeviceVerificationStatusCard.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/devices/FilteredDeviceList.tsx b/src/components/views/settings/devices/FilteredDeviceList.tsx index cbec45df2..e5f1a6a9a 100644 --- a/src/components/views/settings/devices/FilteredDeviceList.tsx +++ b/src/components/views/settings/devices/FilteredDeviceList.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ForwardedRef, forwardRef } from "react"; diff --git a/src/components/views/settings/devices/FilteredDeviceListHeader.tsx b/src/components/views/settings/devices/FilteredDeviceListHeader.tsx index cb7359d44..9cd5a285d 100644 --- a/src/components/views/settings/devices/FilteredDeviceListHeader.tsx +++ b/src/components/views/settings/devices/FilteredDeviceListHeader.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { HTMLProps } from "react"; diff --git a/src/components/views/settings/devices/LoginWithQRSection.tsx b/src/components/views/settings/devices/LoginWithQRSection.tsx index 9c7ed9efe..41510a8e2 100644 --- a/src/components/views/settings/devices/LoginWithQRSection.tsx +++ b/src/components/views/settings/devices/LoginWithQRSection.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/devices/OtherSessionsSectionHeading.tsx b/src/components/views/settings/devices/OtherSessionsSectionHeading.tsx index 94a5f32ef..b5ba0cb4c 100644 --- a/src/components/views/settings/devices/OtherSessionsSectionHeading.tsx +++ b/src/components/views/settings/devices/OtherSessionsSectionHeading.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/devices/SecurityRecommendations.tsx b/src/components/views/settings/devices/SecurityRecommendations.tsx index 913a2f388..be4b74950 100644 --- a/src/components/views/settings/devices/SecurityRecommendations.tsx +++ b/src/components/views/settings/devices/SecurityRecommendations.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/devices/SelectableDeviceTile.tsx b/src/components/views/settings/devices/SelectableDeviceTile.tsx index b42c4d342..4c8747a63 100644 --- a/src/components/views/settings/devices/SelectableDeviceTile.tsx +++ b/src/components/views/settings/devices/SelectableDeviceTile.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/devices/deleteDevices.tsx b/src/components/views/settings/devices/deleteDevices.tsx index e42dbe10b..4b8bc19d7 100644 --- a/src/components/views/settings/devices/deleteDevices.tsx +++ b/src/components/views/settings/devices/deleteDevices.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, MatrixError } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/settings/devices/filter.ts b/src/components/views/settings/devices/filter.ts index f61278525..0b252e7cd 100644 --- a/src/components/views/settings/devices/filter.ts +++ b/src/components/views/settings/devices/filter.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ExtendedDevice, DeviceSecurityVariation } from "./types"; diff --git a/src/components/views/settings/devices/types.ts b/src/components/views/settings/devices/types.ts index 5b0738317..e46e43ab0 100644 --- a/src/components/views/settings/devices/types.ts +++ b/src/components/views/settings/devices/types.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IMyDevice } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/settings/devices/useOwnDevices.ts b/src/components/views/settings/devices/useOwnDevices.ts index f0cec2777..b1143017e 100644 --- a/src/components/views/settings/devices/useOwnDevices.ts +++ b/src/components/views/settings/devices/useOwnDevices.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useCallback, useContext, useEffect, useState } from "react"; diff --git a/src/components/views/settings/discovery/DiscoverySettings.tsx b/src/components/views/settings/discovery/DiscoverySettings.tsx index 4eec56e41..1b6b29999 100644 --- a/src/components/views/settings/discovery/DiscoverySettings.tsx +++ b/src/components/views/settings/discovery/DiscoverySettings.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback, useEffect, useState } from "react"; diff --git a/src/components/views/settings/notifications/NotificationPusherSettings.tsx b/src/components/views/settings/notifications/NotificationPusherSettings.tsx index 9da85e0b2..193436f5d 100644 --- a/src/components/views/settings/notifications/NotificationPusherSettings.tsx +++ b/src/components/views/settings/notifications/NotificationPusherSettings.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ThreepidMedium, IPusher } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/settings/notifications/NotificationSettings2.tsx b/src/components/views/settings/notifications/NotificationSettings2.tsx index 84cd57882..e7b92de7c 100644 --- a/src/components/views/settings/notifications/NotificationSettings2.tsx +++ b/src/components/views/settings/notifications/NotificationSettings2.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useState } from "react"; diff --git a/src/components/views/settings/shared/SettingsBanner.tsx b/src/components/views/settings/shared/SettingsBanner.tsx index 85dfb1d89..c35703bf1 100644 --- a/src/components/views/settings/shared/SettingsBanner.tsx +++ b/src/components/views/settings/shared/SettingsBanner.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { PropsWithChildren, ReactNode } from "react"; diff --git a/src/components/views/settings/shared/SettingsIndent.tsx b/src/components/views/settings/shared/SettingsIndent.tsx index 48ddf2fb7..ee7e570d1 100644 --- a/src/components/views/settings/shared/SettingsIndent.tsx +++ b/src/components/views/settings/shared/SettingsIndent.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { HTMLAttributes } from "react"; diff --git a/src/components/views/settings/shared/SettingsSection.tsx b/src/components/views/settings/shared/SettingsSection.tsx index 329ce755f..a42a2a9b7 100644 --- a/src/components/views/settings/shared/SettingsSection.tsx +++ b/src/components/views/settings/shared/SettingsSection.tsx @@ -1,17 +1,9 @@ /* -Copyright 2022-2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classnames from "classnames"; diff --git a/src/components/views/settings/shared/SettingsSubsection.tsx b/src/components/views/settings/shared/SettingsSubsection.tsx index afcf92dea..a3b9c3c96 100644 --- a/src/components/views/settings/shared/SettingsSubsection.tsx +++ b/src/components/views/settings/shared/SettingsSubsection.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/settings/shared/SettingsSubsectionHeading.tsx b/src/components/views/settings/shared/SettingsSubsectionHeading.tsx index 936b11dc3..25439d6a6 100644 --- a/src/components/views/settings/shared/SettingsSubsectionHeading.tsx +++ b/src/components/views/settings/shared/SettingsSubsectionHeading.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { HTMLAttributes } from "react"; diff --git a/src/components/views/settings/tabs/SettingsTab.tsx b/src/components/views/settings/tabs/SettingsTab.tsx index 7ecd4d3c5..7472da22e 100644 --- a/src/components/views/settings/tabs/SettingsTab.tsx +++ b/src/components/views/settings/tabs/SettingsTab.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { HTMLAttributes } from "react"; diff --git a/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.tsx index 98b0a6bb9..c32ac5150 100644 --- a/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -123,7 +115,7 @@ export default class AdvancedRoomSettingsTab extends React.Component {sub}, + b: (sub) => {sub}, i: (sub) => {sub}, }, )} diff --git a/src/components/views/settings/tabs/room/BridgeSettingsTab.tsx b/src/components/views/settings/tabs/room/BridgeSettingsTab.tsx index 1f44f0632..d29d82853 100644 --- a/src/components/views/settings/tabs/room/BridgeSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/BridgeSettingsTab.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx index a5954945a..fc9864889 100644 --- a/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ContextType } from "react"; diff --git a/src/components/views/settings/tabs/room/NotificationSettingsTab.tsx b/src/components/views/settings/tabs/room/NotificationSettingsTab.tsx index 1b0dbfdf1..a2f38ca0f 100644 --- a/src/components/views/settings/tabs/room/NotificationSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/NotificationSettingsTab.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx index 22c2bc471..a600be313 100644 --- a/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Nordeck IT + Consulting GmbH -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EventTimeline, MatrixError, Room, RoomMember, RoomStateEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/settings/tabs/room/PollHistoryTab.tsx b/src/components/views/settings/tabs/room/PollHistoryTab.tsx index 8c162859b..830da280a 100644 --- a/src/components/views/settings/tabs/room/PollHistoryTab.tsx +++ b/src/components/views/settings/tabs/room/PollHistoryTab.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext } from "react"; diff --git a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx index 3105ba961..ec8a2b871 100644 --- a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -275,15 +267,13 @@ export default class RolesRoomSettingsTab extends React.Component { [EventType.RoomServerAcl]: _td("room_settings|permissions|m.room.server_acl"), [EventType.Reaction]: _td("room_settings|permissions|m.reaction"), [EventType.RoomRedaction]: _td("room_settings|permissions|m.room.redaction"), + [EventType.RoomPinnedEvents]: _td("room_settings|permissions|m.room.pinned_events"), // TODO: Enable support for m.widget event type (https://github.com/vector-im/element-web/issues/13111) "im.vector.modular.widgets": isSpaceRoom ? null : _td("room_settings|permissions|m.widget"), [VoiceBroadcastInfoEventType]: _td("room_settings|permissions|io.element.voice_broadcast_info"), }; - if (SettingsStore.getValue("feature_pinning")) { - plEventsToLabels[EventType.RoomPinnedEvents] = _td("room_settings|permissions|m.room.pinned_events"); - } // MSC3401: Native Group VoIP signaling if (SettingsStore.getValue("feature_group_calls")) { plEventsToLabels[ElementCall.CALL_EVENT_TYPE.name] = _td("room_settings|permissions|m.call"); diff --git a/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.tsx index d6d661d89..645011892 100644 --- a/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; @@ -125,7 +117,7 @@ export default class SecurityRoomSettingsTab extends React.Component {sub} }, + { b: (sub) => {sub} }, )}{" "}

    @@ -318,7 +310,7 @@ export default class SecurityRoomSettingsTab extends React.Component {" "} {_t("room_settings|security|encrypted_room_public_confirm_description_1", undefined, { - b: (sub) => {sub}, + b: (sub) => {sub}, })}{" "}

    diff --git a/src/components/views/settings/tabs/room/VoipRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/VoipRoomSettingsTab.tsx index 734f4b6ad..1521ff1bb 100644 --- a/src/components/views/settings/tabs/room/VoipRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/VoipRoomSettingsTab.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback, useMemo, useState } from "react"; diff --git a/src/components/views/settings/tabs/user/AccountUserSettingsTab.tsx b/src/components/views/settings/tabs/user/AccountUserSettingsTab.tsx index a08005c00..a928dbd05 100644 --- a/src/components/views/settings/tabs/user/AccountUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/AccountUserSettingsTab.tsx @@ -1,19 +1,10 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback, useContext, useEffect } from "react"; @@ -195,7 +186,9 @@ const AccountUserSettingsTab: React.FC = ({ closeSettingsFn }) => { canSetDisplayName={canSetDisplayName} canSetAvatar={canSetAvatar} /> - + {/* :TCHAP: hide-discovery-email-phone-settings-updated */} + {/* */} + {/* end :TCHAP: */} - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import React from "react"; -import { HTTPError } from "matrix-js-sdk/src/matrix"; -import { logger } from "matrix-js-sdk/src/logger"; - -import { UserFriendlyError, _t } from "../../../../../languageHandler"; -import UserProfileSettings from "../../UserProfileSettings"; -import SettingsStore from "../../../../../settings/SettingsStore"; -import AccessibleButton from "../../../elements/AccessibleButton"; -import DeactivateAccountDialog from "../../../dialogs/DeactivateAccountDialog"; -import Modal from "../../../../../Modal"; -import { UIFeature } from "../../../../../settings/UIFeature"; -import ErrorDialog, { extractErrorMessageFromError } from "../../../dialogs/ErrorDialog"; -import ChangePassword from "../../ChangePassword"; -import SettingsTab from "../SettingsTab"; -import { SettingsSection } from "../../shared/SettingsSection"; -import SettingsSubsection, { SettingsSubsectionText } from "../../shared/SettingsSubsection"; -import { SDKContext } from "../../../../../contexts/SDKContext"; -import UserPersonalInfoSettings from "../../UserPersonalInfoSettings"; - -interface IProps { - closeSettingsFn: () => void; -} - -interface IState { - canChangePassword: boolean; - idServerName?: string; - externalAccountManagementUrl?: string; - canMake3pidChanges: boolean; - canSetDisplayName: boolean; - canSetAvatar: boolean; -} - -export default class GeneralUserSettingsTab extends React.Component { - public static contextType = SDKContext; - public context!: React.ContextType; - - public constructor(props: IProps, context: React.ContextType) { - super(props); - this.context = context; - - this.state = { - canChangePassword: false, - canMake3pidChanges: false, - canSetDisplayName: false, - canSetAvatar: false, - }; - - this.getCapabilities(); - } - - private async getCapabilities(): Promise { - const cli = this.context.client!; - - const capabilities = (await cli.getCapabilities()) ?? {}; - const changePasswordCap = capabilities["m.change_password"]; - - // You can change your password so long as the capability isn't explicitly disabled. The implicit - // behaviour is you can change your password when the capability is missing or has not-false as - // the enabled flag value. - const canChangePassword = !changePasswordCap || changePasswordCap["enabled"] !== false; - - await this.context.oidcClientStore.readyPromise; // wait for the store to be ready - const externalAccountManagementUrl = this.context.oidcClientStore.accountManagementEndpoint; - // https://spec.matrix.org/v1.7/client-server-api/#m3pid_changes-capability - // We support as far back as v1.1 which doesn't have m.3pid_changes - // so the behaviour for when it is missing has to be assume true - const canMake3pidChanges = !capabilities["m.3pid_changes"] || capabilities["m.3pid_changes"].enabled === true; - - const canSetDisplayName = - !capabilities["m.set_displayname"] || capabilities["m.set_displayname"].enabled === true; - const canSetAvatar = !capabilities["m.set_avatar_url"] || capabilities["m.set_avatar_url"].enabled === true; - - this.setState({ - canChangePassword, - externalAccountManagementUrl, - canMake3pidChanges, - canSetDisplayName, - canSetAvatar, - }); - } - - private onPasswordChangeError = (err: Error): void => { - logger.error("Failed to change password: " + err); - - let underlyingError = err; - if (err instanceof UserFriendlyError && err.cause instanceof Error) { - underlyingError = err.cause; - } - - const errorMessage = extractErrorMessageFromError( - err, - _t("settings|general|error_password_change_unknown", { - stringifiedError: String(err), - }), - ); - - let errorMessageToDisplay = errorMessage; - if (underlyingError instanceof HTTPError && underlyingError.httpStatus === 403) { - errorMessageToDisplay = _t("settings|general|error_password_change_403"); - } else if (underlyingError instanceof HTTPError) { - errorMessageToDisplay = _t("settings|general|error_password_change_http", { - errorMessage, - httpStatus: underlyingError.httpStatus, - }); - } - - // TODO: Figure out a design that doesn't involve replacing the current dialog - Modal.createDialog(ErrorDialog, { - title: _t("settings|general|error_password_change_title"), - description: errorMessageToDisplay, - }); - }; - - private onPasswordChanged = (): void => { - const description = _t("settings|general|password_change_success"); - // TODO: Figure out a design that doesn't involve replacing the current dialog - Modal.createDialog(ErrorDialog, { - title: _t("common|success"), - description, - }); - }; - - private onDeactivateClicked = (): void => { - Modal.createDialog(DeactivateAccountDialog, { - onFinished: (success) => { - if (success) this.props.closeSettingsFn(); - }, - }); - }; - - private renderAccountSection(): JSX.Element | undefined { - if (!this.state.canChangePassword) return undefined; - - return ( - <> - - {_t("settings|general|password_change_section")} - - - - ); - } - - private renderManagementSection(): JSX.Element { - // TODO: Improve warning text for account deactivation - return ( - - - - {_t("settings|general|deactivate_section")} - - - - ); - } - - public render(): React.ReactNode { - let accountManagementSection: JSX.Element | undefined; - const isAccountManagedExternally = !!this.state.externalAccountManagementUrl; - if (SettingsStore.getValue(UIFeature.Deactivate) && !isAccountManagedExternally) { - accountManagementSection = this.renderManagementSection(); - } - - return ( - - - - {/* :TCHAP: hide-discovery-email-phone-settings-updated */} - {/* */} - {/* end :TCHAP: */} - {this.renderAccountSection()} - - {accountManagementSection} - - ); - } -} diff --git a/src/components/views/settings/tabs/user/HelpUserSettingsTab.tsx b/src/components/views/settings/tabs/user/HelpUserSettingsTab.tsx index 867b986c8..ec0e20fb3 100644 --- a/src/components/views/settings/tabs/user/HelpUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/HelpUserSettingsTab.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; @@ -310,7 +302,7 @@ export default class HelpUserSettingsTab extends React.Component

    {_t("common|access_token")} - {_t("setting|help_about|access_token_detail")} + {_t("setting|help_about|access_token_detail")} this.context.getAccessToken()}> {this.context.getAccessToken()} diff --git a/src/components/views/settings/tabs/user/KeyboardUserSettingsTab.tsx b/src/components/views/settings/tabs/user/KeyboardUserSettingsTab.tsx index ea3a75e8f..c973fa4b9 100644 --- a/src/components/views/settings/tabs/user/KeyboardUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/KeyboardUserSettingsTab.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 Šimon Brandner Copyright 2020 The Matrix.org Foundation C.I.C. -Copyright 2021 - 2022 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/tabs/user/LabsUserSettingsTab.tsx b/src/components/views/settings/tabs/user/LabsUserSettingsTab.tsx index b83ea5d5c..3be630fd2 100644 --- a/src/components/views/settings/tabs/user/LabsUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/LabsUserSettingsTab.tsx @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/tabs/user/MjolnirUserSettingsTab.tsx b/src/components/views/settings/tabs/user/MjolnirUserSettingsTab.tsx index 29466fc57..338f5ee91 100644 --- a/src/components/views/settings/tabs/user/MjolnirUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/MjolnirUserSettingsTab.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, SyntheticEvent } from "react"; diff --git a/src/components/views/settings/tabs/user/NotificationUserSettingsTab.tsx b/src/components/views/settings/tabs/user/NotificationUserSettingsTab.tsx index 841babf97..5b70d908c 100644 --- a/src/components/views/settings/tabs/user/NotificationUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/NotificationUserSettingsTab.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.tsx b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.tsx index 0e213de96..d95b0894d 100644 --- a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.tsx @@ -1,26 +1,20 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2023 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ -import React, { useCallback, useEffect, useState } from "react"; +import React, { ReactElement, useCallback, useEffect, useState } from "react"; +import { NonEmptyArray } from "../../../../../@types/common"; import { _t, getCurrentLanguage } from "../../../../../languageHandler"; import { UseCase } from "../../../../../settings/enums/UseCase"; import SettingsStore from "../../../../../settings/SettingsStore"; import Field from "../../../elements/Field"; +import Dropdown from "../../../elements/Dropdown"; import { SettingLevel } from "../../../../../settings/SettingLevel"; import SettingsFlag from "../../../elements/SettingsFlag"; import AccessibleButton from "../../../elements/AccessibleButton"; @@ -38,12 +32,16 @@ import PlatformPeg from "../../../../../PlatformPeg"; import { IS_MAC } from "../../../../../Keyboard"; import SpellCheckSettings from "../../SpellCheckSettings"; import LabelledToggleSwitch from "../../../elements/LabelledToggleSwitch"; +import * as TimezoneHandler from "../../../../../TimezoneHandler"; interface IProps { closeSettingsFn(success: boolean): void; } interface IState { + timezone: string | undefined; + timezones: string[]; + timezoneSearch: string | undefined; autocompleteDelay: string; readMarkerInViewThresholdMs: string; readMarkerOutOfViewThresholdMs: string; @@ -68,7 +66,7 @@ const LanguageSection: React.FC = () => { ); return ( -
    +
    {_t("settings|general|application_language")}
    @@ -173,6 +171,9 @@ export default class PreferencesUserSettingsTab extends React.Component { + this.setState({ timezone: tz }); + TimezoneHandler.setUserTimezone(tz); + }; + + /** + * If present filter the time zones matching the search term + */ + private onTimezoneSearchChange = (search: string): void => { + const timezoneSearch = search.toLowerCase(); + const timezones = timezoneSearch + ? TimezoneHandler.getAllTimezones().filter((tz) => { + return tz.toLowerCase().includes(timezoneSearch); + }) + : TimezoneHandler.getAllTimezones(); + + this.setState({ timezones, timezoneSearch }); + }; + private onAutocompleteDelayChange = (e: React.ChangeEvent): void => { this.setState({ autocompleteDelay: e.target.value }); SettingsStore.setValue("autocompleteDelay", null, SettingLevel.DEVICE, e.target.value); @@ -217,6 +237,16 @@ export default class PreferencesUserSettingsTab extends React.Component it !== "FTUE.userOnboardingButton" || showUserOnboardingPage(useCase)); + const browserTimezoneLabel: string = _t("settings|preferences|default_timezone", { + timezone: TimezoneHandler.shortBrowserTimezone(), + }); + + // Always Preprend the default option + const timezones = this.state.timezones.map((tz) => { + return
    {tz}
    ; + }); + timezones.unshift(
    {browserTimezoneLabel}
    ); + return ( @@ -254,7 +284,25 @@ export default class PreferencesUserSettingsTab extends React.Component +
    + {_t("settings|preferences|user_timezone")} + + {timezones as NonEmptyArray} + +
    + {this.renderGroup(PreferencesUserSettingsTab.TIME_SETTINGS)} +
    = ({ matrixClient: cli, space

    {_t("room_settings|visibility|history_visibility_anyone_space_description")}
    - {_t("room_settings|visibility|history_visibility_anyone_space_recommendation")} + + {_t("room_settings|visibility|history_visibility_anyone_space_recommendation")} +

    diff --git a/src/components/views/spaces/SpaceTreeLevel.tsx b/src/components/views/spaces/SpaceTreeLevel.tsx index fc9511f52..edbce66a7 100644 --- a/src/components/views/spaces/SpaceTreeLevel.tsx +++ b/src/components/views/spaces/SpaceTreeLevel.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { diff --git a/src/components/views/spaces/threads-activity-centre/ThreadsActivityCentre.tsx b/src/components/views/spaces/threads-activity-centre/ThreadsActivityCentre.tsx index fc3832639..c8e5ef142 100644 --- a/src/components/views/spaces/threads-activity-centre/ThreadsActivityCentre.tsx +++ b/src/components/views/spaces/threads-activity-centre/ThreadsActivityCentre.tsx @@ -1,19 +1,9 @@ /* - * + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import React, { JSX, useState } from "react"; diff --git a/src/components/views/spaces/threads-activity-centre/ThreadsActivityCentreButton.tsx b/src/components/views/spaces/threads-activity-centre/ThreadsActivityCentreButton.tsx index 4feb16734..e130498b5 100644 --- a/src/components/views/spaces/threads-activity-centre/ThreadsActivityCentreButton.tsx +++ b/src/components/views/spaces/threads-activity-centre/ThreadsActivityCentreButton.tsx @@ -1,19 +1,9 @@ /* - * + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps, forwardRef } from "react"; diff --git a/src/components/views/spaces/threads-activity-centre/index.ts b/src/components/views/spaces/threads-activity-centre/index.ts index 79ab01906..98aa76786 100644 --- a/src/components/views/spaces/threads-activity-centre/index.ts +++ b/src/components/views/spaces/threads-activity-centre/index.ts @@ -1,19 +1,9 @@ /* - * + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ export { ThreadsActivityCentre } from "./ThreadsActivityCentre"; diff --git a/src/components/views/spaces/threads-activity-centre/useUnreadThreadRooms.ts b/src/components/views/spaces/threads-activity-centre/useUnreadThreadRooms.ts index 725fcfd5b..110c9d51f 100644 --- a/src/components/views/spaces/threads-activity-centre/useUnreadThreadRooms.ts +++ b/src/components/views/spaces/threads-activity-centre/useUnreadThreadRooms.ts @@ -1,19 +1,9 @@ /* - * + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { useCallback, useEffect, useState } from "react"; diff --git a/src/components/views/terms/InlineTermsAgreement.tsx b/src/components/views/terms/InlineTermsAgreement.tsx index 6424dbe4c..350c408d7 100644 --- a/src/components/views/terms/InlineTermsAgreement.tsx +++ b/src/components/views/terms/InlineTermsAgreement.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/toasts/GenericExpiringToast.tsx b/src/components/views/toasts/GenericExpiringToast.tsx index fea826dfa..0809eae92 100644 --- a/src/components/views/toasts/GenericExpiringToast.tsx +++ b/src/components/views/toasts/GenericExpiringToast.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/toasts/GenericToast.tsx b/src/components/views/toasts/GenericToast.tsx index 70c6c1a7d..76c74993c 100644 --- a/src/components/views/toasts/GenericToast.tsx +++ b/src/components/views/toasts/GenericToast.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020-2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentType, ReactNode } from "react"; diff --git a/src/components/views/toasts/NonUrgentEchoFailureToast.tsx b/src/components/views/toasts/NonUrgentEchoFailureToast.tsx index 2e4d7bd7b..069d5ee88 100644 --- a/src/components/views/toasts/NonUrgentEchoFailureToast.tsx +++ b/src/components/views/toasts/NonUrgentEchoFailureToast.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/toasts/VerificationRequestToast.tsx b/src/components/views/toasts/VerificationRequestToast.tsx index c7ac14f80..54932a12e 100644 --- a/src/components/views/toasts/VerificationRequestToast.tsx +++ b/src/components/views/toasts/VerificationRequestToast.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/typography/Caption.tsx b/src/components/views/typography/Caption.tsx index 69e7714b2..3bf574768 100644 --- a/src/components/views/typography/Caption.tsx +++ b/src/components/views/typography/Caption.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/typography/Heading.tsx b/src/components/views/typography/Heading.tsx index 21feae622..70ade1a51 100644 --- a/src/components/views/typography/Heading.tsx +++ b/src/components/views/typography/Heading.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { HTMLAttributes } from "react"; diff --git a/src/components/views/user-onboarding/UserOnboardingButton.tsx b/src/components/views/user-onboarding/UserOnboardingButton.tsx index 00a2f9f26..d1e420d4a 100644 --- a/src/components/views/user-onboarding/UserOnboardingButton.tsx +++ b/src/components/views/user-onboarding/UserOnboardingButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/user-onboarding/UserOnboardingHeader.tsx b/src/components/views/user-onboarding/UserOnboardingHeader.tsx index 67e536787..42ad147b0 100644 --- a/src/components/views/user-onboarding/UserOnboardingHeader.tsx +++ b/src/components/views/user-onboarding/UserOnboardingHeader.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; diff --git a/src/components/views/user-onboarding/UserOnboardingList.tsx b/src/components/views/user-onboarding/UserOnboardingList.tsx index 3d94c5508..c6c03527c 100644 --- a/src/components/views/user-onboarding/UserOnboardingList.tsx +++ b/src/components/views/user-onboarding/UserOnboardingList.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; diff --git a/src/components/views/user-onboarding/UserOnboardingPage.tsx b/src/components/views/user-onboarding/UserOnboardingPage.tsx index d2d06a9c3..ebb9b9565 100644 --- a/src/components/views/user-onboarding/UserOnboardingPage.tsx +++ b/src/components/views/user-onboarding/UserOnboardingPage.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useEffect, useState } from "react"; diff --git a/src/components/views/user-onboarding/UserOnboardingTask.tsx b/src/components/views/user-onboarding/UserOnboardingTask.tsx index 0a8127c9b..add9db1b3 100644 --- a/src/components/views/user-onboarding/UserOnboardingTask.tsx +++ b/src/components/views/user-onboarding/UserOnboardingTask.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/components/views/verification/VerificationCancelled.tsx b/src/components/views/verification/VerificationCancelled.tsx index 33a42d505..d1a84742b 100644 --- a/src/components/views/verification/VerificationCancelled.tsx +++ b/src/components/views/verification/VerificationCancelled.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/verification/VerificationComplete.tsx b/src/components/views/verification/VerificationComplete.tsx index 214f58630..aba9b9341 100644 --- a/src/components/views/verification/VerificationComplete.tsx +++ b/src/components/views/verification/VerificationComplete.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/verification/VerificationShowSas.tsx b/src/components/views/verification/VerificationShowSas.tsx index de091091a..139c5f728 100644 --- a/src/components/views/verification/VerificationShowSas.tsx +++ b/src/components/views/verification/VerificationShowSas.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/voip/AudioFeed.tsx b/src/components/views/voip/AudioFeed.tsx index e079360b4..88f1463bb 100644 --- a/src/components/views/voip/AudioFeed.tsx +++ b/src/components/views/voip/AudioFeed.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/components/views/voip/AudioFeedArrayForLegacyCall.tsx b/src/components/views/voip/AudioFeedArrayForLegacyCall.tsx index 5c1bbe808..b135bb027 100644 --- a/src/components/views/voip/AudioFeedArrayForLegacyCall.tsx +++ b/src/components/views/voip/AudioFeedArrayForLegacyCall.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/voip/CallDuration.tsx b/src/components/views/voip/CallDuration.tsx index 287b059c9..3dba4bfc1 100644 --- a/src/components/views/voip/CallDuration.tsx +++ b/src/components/views/voip/CallDuration.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FC, useState, useEffect, memo } from "react"; diff --git a/src/components/views/voip/CallView.tsx b/src/components/views/voip/CallView.tsx index 772d50b08..e51d1c025 100644 --- a/src/components/views/voip/CallView.tsx +++ b/src/components/views/voip/CallView.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { FC, useContext, useEffect, AriaRole, useCallback } from "react"; diff --git a/src/components/views/voip/DialPad.tsx b/src/components/views/voip/DialPad.tsx index d505a4fb5..9dda9468d 100644 --- a/src/components/views/voip/DialPad.tsx +++ b/src/components/views/voip/DialPad.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as React from "react"; diff --git a/src/components/views/voip/DialPadModal.tsx b/src/components/views/voip/DialPadModal.tsx index abed416f3..b4b7cdf64 100644 --- a/src/components/views/voip/DialPadModal.tsx +++ b/src/components/views/voip/DialPadModal.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ChangeEvent, createRef, SyntheticEvent } from "react"; diff --git a/src/components/views/voip/LegacyCallView.tsx b/src/components/views/voip/LegacyCallView.tsx index 4e658d0ec..b67fa4541 100644 --- a/src/components/views/voip/LegacyCallView.tsx +++ b/src/components/views/voip/LegacyCallView.tsx @@ -1,19 +1,11 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 Šimon Brandner +Copyright 2019-2021 The Matrix.org Foundation C.I.C. Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. -Copyright 2021 - 2022 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef } from "react"; diff --git a/src/components/views/voip/LegacyCallView/LegacyCallViewButtons.tsx b/src/components/views/voip/LegacyCallView/LegacyCallViewButtons.tsx index 4b7b5b992..bdcd3713c 100644 --- a/src/components/views/voip/LegacyCallView/LegacyCallViewButtons.tsx +++ b/src/components/views/voip/LegacyCallView/LegacyCallViewButtons.tsx @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner +Copyright 2019-2021 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, useState, forwardRef } from "react"; diff --git a/src/components/views/voip/LegacyCallView/LegacyCallViewHeader.tsx b/src/components/views/voip/LegacyCallView/LegacyCallViewHeader.tsx index c60b70c93..bb81527ef 100644 --- a/src/components/views/voip/LegacyCallView/LegacyCallViewHeader.tsx +++ b/src/components/views/voip/LegacyCallView/LegacyCallViewHeader.tsx @@ -1,17 +1,8 @@ /* -Copyright 2021 New Vector Ltd +Copyright 2021-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/components/views/voip/LegacyCallViewForRoom.tsx b/src/components/views/voip/LegacyCallViewForRoom.tsx index 640baeced..defee6b97 100644 --- a/src/components/views/voip/LegacyCallViewForRoom.tsx +++ b/src/components/views/voip/LegacyCallViewForRoom.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { CallState, MatrixCall } from "matrix-js-sdk/src/webrtc/call"; diff --git a/src/components/views/voip/LegacyCallViewSidebar.tsx b/src/components/views/voip/LegacyCallViewSidebar.tsx index d5052faeb..d0c328f8b 100644 --- a/src/components/views/voip/LegacyCallViewSidebar.tsx +++ b/src/components/views/voip/LegacyCallViewSidebar.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/components/views/voip/VideoFeed.tsx b/src/components/views/voip/VideoFeed.tsx index 34ef11f5d..6931027dd 100644 --- a/src/components/views/voip/VideoFeed.tsx +++ b/src/components/views/voip/VideoFeed.tsx @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016, 2019, 2020, 2021 The Matrix.org Foundation C.I.C. -Copyright 2021 - 2022 Šimon Brandner +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 Šimon Brandner +Copyright 2015, 2016 , 2019, 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classnames from "classnames"; diff --git a/src/contexts/LocalDeviceVerificationStateContext.ts b/src/contexts/LocalDeviceVerificationStateContext.ts index 4f0d7fe50..43527e100 100644 --- a/src/contexts/LocalDeviceVerificationStateContext.ts +++ b/src/contexts/LocalDeviceVerificationStateContext.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { createContext } from "react"; diff --git a/src/contexts/MatrixClientContext.tsx b/src/contexts/MatrixClientContext.tsx index 273bf773d..ec804f881 100644 --- a/src/contexts/MatrixClientContext.tsx +++ b/src/contexts/MatrixClientContext.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentClass, createContext, forwardRef, useContext } from "react"; diff --git a/src/contexts/RoomContext.ts b/src/contexts/RoomContext.ts index 52a61fe73..8fb94a245 100644 --- a/src/contexts/RoomContext.ts +++ b/src/contexts/RoomContext.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { createContext, useContext } from "react"; @@ -55,6 +47,7 @@ const RoomContext = createContext< lowBandwidth: false, alwaysShowTimestamps: false, showTwelveHourTimestamps: false, + userTimezone: undefined, readMarkerInViewThresholdMs: 3000, readMarkerOutOfViewThresholdMs: 30000, showHiddenEvents: false, diff --git a/src/contexts/SDKContext.ts b/src/contexts/SDKContext.ts index 6c64f7929..28e7e3aad 100644 --- a/src/contexts/SDKContext.ts +++ b/src/contexts/SDKContext.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/contexts/ToastContext.tsx b/src/contexts/ToastContext.tsx index b9423d836..4ae4875c9 100644 --- a/src/contexts/ToastContext.tsx +++ b/src/contexts/ToastContext.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ReactNode, createContext, useCallback, useContext, useEffect, useRef, useState } from "react"; diff --git a/src/createRoom.ts b/src/createRoom.ts index ddb19bbdd..1a09eecfe 100644 --- a/src/createRoom.ts +++ b/src/createRoom.ts @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/customisations/Alias.ts b/src/customisations/Alias.ts index 637f7a286..414f62681 100644 --- a/src/customisations/Alias.ts +++ b/src/customisations/Alias.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ function getDisplayAliasForAliasSet(canonicalAlias: string | null, altAliases: string[]): string | null { diff --git a/src/customisations/ChatExport.ts b/src/customisations/ChatExport.ts index abc5b960f..a4c6c70b3 100644 --- a/src/customisations/ChatExport.ts +++ b/src/customisations/ChatExport.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ExportFormat, ExportType } from "../utils/exportUtils/exportUtils"; diff --git a/src/customisations/ComponentVisibility.ts b/src/customisations/ComponentVisibility.ts index 3e12805f4..e475d3b24 100644 --- a/src/customisations/ComponentVisibility.ts +++ b/src/customisations/ComponentVisibility.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // Dev note: this customisation point is heavily inspired by UIFeature flags, though diff --git a/src/customisations/Directory.ts b/src/customisations/Directory.ts index 7ed4706c7..ca92c1d66 100644 --- a/src/customisations/Directory.ts +++ b/src/customisations/Directory.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ function requireCanonicalAliasAccessToPublish(): boolean { diff --git a/src/customisations/Lifecycle.ts b/src/customisations/Lifecycle.ts index eba2af715..148b03c81 100644 --- a/src/customisations/Lifecycle.ts +++ b/src/customisations/Lifecycle.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ function onLoggedOutAndStorageCleared(): void { diff --git a/src/customisations/Media.ts b/src/customisations/Media.ts index dc3846d90..f9e7766b0 100644 --- a/src/customisations/Media.ts +++ b/src/customisations/Media.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2021 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { MatrixClient, parseErrorResponse, ResizeMethod } from "matrix-js-sdk/src/matrix"; diff --git a/src/customisations/RoomList.ts b/src/customisations/RoomList.ts index 4f9c5a170..917883f63 100644 --- a/src/customisations/RoomList.ts +++ b/src/customisations/RoomList.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2020 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/customisations/Security.ts b/src/customisations/Security.ts index a5fdf09fb..c1b8b580a 100644 --- a/src/customisations/Security.ts +++ b/src/customisations/Security.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { CryptoCallbacks } from "matrix-js-sdk/src/crypto-api"; diff --git a/src/customisations/UserIdentifier.ts b/src/customisations/UserIdentifier.ts index 12e000478..7e291bdad 100644 --- a/src/customisations/UserIdentifier.ts +++ b/src/customisations/UserIdentifier.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/customisations/WidgetPermissions.ts b/src/customisations/WidgetPermissions.ts index 9a7817119..efdffd65b 100644 --- a/src/customisations/WidgetPermissions.ts +++ b/src/customisations/WidgetPermissions.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2020 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ // Populate this class with the details of your customisations when copying it. diff --git a/src/customisations/WidgetVariables.ts b/src/customisations/WidgetVariables.ts index db3a56436..2d0e669e3 100644 --- a/src/customisations/WidgetVariables.ts +++ b/src/customisations/WidgetVariables.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2021 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ // Populate this class with the details of your customisations when copying it. diff --git a/src/customisations/helpers/UIComponents.ts b/src/customisations/helpers/UIComponents.ts index 11b8a4096..4cbc9a88a 100644 --- a/src/customisations/helpers/UIComponents.ts +++ b/src/customisations/helpers/UIComponents.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { UIComponent } from "../../settings/UIFeature"; diff --git a/src/customisations/models/IMediaEventContent.ts b/src/customisations/models/IMediaEventContent.ts index ad305239b..15dae2eb6 100644 --- a/src/customisations/models/IMediaEventContent.ts +++ b/src/customisations/models/IMediaEventContent.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2021 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { EncryptedFile, MediaEventContent } from "matrix-js-sdk/src/types"; diff --git a/src/dispatcher/actions.ts b/src/dispatcher/actions.ts index 7cff1cc85..ad703d144 100644 --- a/src/dispatcher/actions.ts +++ b/src/dispatcher/actions.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // Dispatcher actions also extend into any arbitrary string, so support that. @@ -393,4 +385,9 @@ export enum Action { * Opens right panel room summary and focuses the search input */ FocusMessageSearch = "focus_search", + + /** + * :TCHAP: Open new page to check email instance before launching SSO + */ + EmailPrecheckSSO = "email_precheck_sso" } diff --git a/src/dispatcher/dispatch-actions/threads.ts b/src/dispatcher/dispatch-actions/threads.ts index 80cee1d56..bfa333ab8 100644 --- a/src/dispatcher/dispatch-actions/threads.ts +++ b/src/dispatcher/dispatch-actions/threads.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import RightPanelStore from "../../stores/right-panel/RightPanelStore"; diff --git a/src/dispatcher/dispatcher.ts b/src/dispatcher/dispatcher.ts index 9a1d58625..6d8d3a15a 100644 --- a/src/dispatcher/dispatcher.ts +++ b/src/dispatcher/dispatcher.ts @@ -1,19 +1,11 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2017 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Action } from "./actions"; diff --git a/src/dispatcher/payloads.ts b/src/dispatcher/payloads.ts index fa45b3062..eb177e8b5 100644 --- a/src/dispatcher/payloads.ts +++ b/src/dispatcher/payloads.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { DispatcherAction } from "./actions"; diff --git a/src/dispatcher/payloads/ActiveRoomChangedPayload.ts b/src/dispatcher/payloads/ActiveRoomChangedPayload.ts index 3768cca5e..e24a523e8 100644 --- a/src/dispatcher/payloads/ActiveRoomChangedPayload.ts +++ b/src/dispatcher/payloads/ActiveRoomChangedPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Optional } from "matrix-events-sdk"; diff --git a/src/dispatcher/payloads/AfterLeaveRoomPayload.ts b/src/dispatcher/payloads/AfterLeaveRoomPayload.ts index e8b50d356..bb2cd0825 100644 --- a/src/dispatcher/payloads/AfterLeaveRoomPayload.ts +++ b/src/dispatcher/payloads/AfterLeaveRoomPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/dispatcher/payloads/CancelAskToJoinPayload.ts b/src/dispatcher/payloads/CancelAskToJoinPayload.ts index 1e71b55e0..a35d76d1e 100644 --- a/src/dispatcher/payloads/CancelAskToJoinPayload.ts +++ b/src/dispatcher/payloads/CancelAskToJoinPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Nordeck IT + Consulting GmbH -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Action } from "../actions"; diff --git a/src/dispatcher/payloads/CheckUpdatesPayload.ts b/src/dispatcher/payloads/CheckUpdatesPayload.ts index 44e7fd034..e1f8c948a 100644 --- a/src/dispatcher/payloads/CheckUpdatesPayload.ts +++ b/src/dispatcher/payloads/CheckUpdatesPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../payloads"; diff --git a/src/dispatcher/payloads/ComposerInsertPayload.ts b/src/dispatcher/payloads/ComposerInsertPayload.ts index 760cd561d..d0652f431 100644 --- a/src/dispatcher/payloads/ComposerInsertPayload.ts +++ b/src/dispatcher/payloads/ComposerInsertPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../payloads"; diff --git a/src/dispatcher/payloads/DoAfterSyncPreparedPayload.ts b/src/dispatcher/payloads/DoAfterSyncPreparedPayload.ts index 6f3a9a673..c55b62bbc 100644 --- a/src/dispatcher/payloads/DoAfterSyncPreparedPayload.ts +++ b/src/dispatcher/payloads/DoAfterSyncPreparedPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../payloads"; diff --git a/src/dispatcher/payloads/FocusComposerPayload.ts b/src/dispatcher/payloads/FocusComposerPayload.ts index 1f6ac9613..9db1ba9b1 100644 --- a/src/dispatcher/payloads/FocusComposerPayload.ts +++ b/src/dispatcher/payloads/FocusComposerPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../payloads"; diff --git a/src/dispatcher/payloads/JoinRoomErrorPayload.ts b/src/dispatcher/payloads/JoinRoomErrorPayload.ts index c6de3d3e5..7db3102fd 100644 --- a/src/dispatcher/payloads/JoinRoomErrorPayload.ts +++ b/src/dispatcher/payloads/JoinRoomErrorPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixError } from "matrix-js-sdk/src/matrix"; diff --git a/src/dispatcher/payloads/JoinRoomPayload.ts b/src/dispatcher/payloads/JoinRoomPayload.ts index f55920483..c7fccaebc 100644 --- a/src/dispatcher/payloads/JoinRoomPayload.ts +++ b/src/dispatcher/payloads/JoinRoomPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { JoinedRoom as JoinedRoomEvent } from "@matrix-org/analytics-events/types/typescript/JoinedRoom"; diff --git a/src/dispatcher/payloads/JoinRoomReadyPayload.ts b/src/dispatcher/payloads/JoinRoomReadyPayload.ts index 5dc91a18f..bd47e13f4 100644 --- a/src/dispatcher/payloads/JoinRoomReadyPayload.ts +++ b/src/dispatcher/payloads/JoinRoomReadyPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { JoinedRoom as JoinedRoomEvent } from "@matrix-org/analytics-events/types/typescript/JoinedRoom"; diff --git a/src/dispatcher/payloads/OpenAddExistingToSpaceDialogPayload.ts b/src/dispatcher/payloads/OpenAddExistingToSpaceDialogPayload.ts index 2e4a8e36b..33b3000ed 100644 --- a/src/dispatcher/payloads/OpenAddExistingToSpaceDialogPayload.ts +++ b/src/dispatcher/payloads/OpenAddExistingToSpaceDialogPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/dispatcher/payloads/OpenForwardDialogPayload.ts b/src/dispatcher/payloads/OpenForwardDialogPayload.ts index 021199cc5..d6688575a 100644 --- a/src/dispatcher/payloads/OpenForwardDialogPayload.ts +++ b/src/dispatcher/payloads/OpenForwardDialogPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/dispatcher/payloads/OpenInviteDialogPayload.ts b/src/dispatcher/payloads/OpenInviteDialogPayload.ts index add3e37a2..c8a3522f1 100644 --- a/src/dispatcher/payloads/OpenInviteDialogPayload.ts +++ b/src/dispatcher/payloads/OpenInviteDialogPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Optional } from "matrix-events-sdk"; diff --git a/src/dispatcher/payloads/OpenReportEventDialogPayload.ts b/src/dispatcher/payloads/OpenReportEventDialogPayload.ts index 996379faa..238adeaeb 100644 --- a/src/dispatcher/payloads/OpenReportEventDialogPayload.ts +++ b/src/dispatcher/payloads/OpenReportEventDialogPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/dispatcher/payloads/OpenSpacePreferencesPayload.ts b/src/dispatcher/payloads/OpenSpacePreferencesPayload.ts index b694e0ac6..5bc1abb55 100644 --- a/src/dispatcher/payloads/OpenSpacePreferencesPayload.ts +++ b/src/dispatcher/payloads/OpenSpacePreferencesPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/dispatcher/payloads/OpenSpaceSettingsPayload.ts b/src/dispatcher/payloads/OpenSpaceSettingsPayload.ts index dd122bd51..b7691d44f 100644 --- a/src/dispatcher/payloads/OpenSpaceSettingsPayload.ts +++ b/src/dispatcher/payloads/OpenSpaceSettingsPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/dispatcher/payloads/OpenSpotlightPayload.ts b/src/dispatcher/payloads/OpenSpotlightPayload.ts index d3c8b82d6..bad5ab0f7 100644 --- a/src/dispatcher/payloads/OpenSpotlightPayload.ts +++ b/src/dispatcher/payloads/OpenSpotlightPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Action } from "../actions"; diff --git a/src/dispatcher/payloads/OpenToTabPayload.ts b/src/dispatcher/payloads/OpenToTabPayload.ts index fb1986afa..dfe10f65a 100644 --- a/src/dispatcher/payloads/OpenToTabPayload.ts +++ b/src/dispatcher/payloads/OpenToTabPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../payloads"; diff --git a/src/dispatcher/payloads/OverwriteLoginPayload.ts b/src/dispatcher/payloads/OverwriteLoginPayload.ts index ec5b83c1d..6ba5d33ec 100644 --- a/src/dispatcher/payloads/OverwriteLoginPayload.ts +++ b/src/dispatcher/payloads/OverwriteLoginPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../payloads"; diff --git a/src/dispatcher/payloads/PlatformSetPayload.ts b/src/dispatcher/payloads/PlatformSetPayload.ts index d8c2a25c3..9b844b6d1 100644 --- a/src/dispatcher/payloads/PlatformSetPayload.ts +++ b/src/dispatcher/payloads/PlatformSetPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Action } from "../actions"; diff --git a/src/dispatcher/payloads/RecheckThemePayload.ts b/src/dispatcher/payloads/RecheckThemePayload.ts index e9bea612e..9281a56eb 100644 --- a/src/dispatcher/payloads/RecheckThemePayload.ts +++ b/src/dispatcher/payloads/RecheckThemePayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../payloads"; diff --git a/src/dispatcher/payloads/SettingUpdatedPayload.ts b/src/dispatcher/payloads/SettingUpdatedPayload.ts index 9f14d955d..17cad1704 100644 --- a/src/dispatcher/payloads/SettingUpdatedPayload.ts +++ b/src/dispatcher/payloads/SettingUpdatedPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../payloads"; diff --git a/src/dispatcher/payloads/ShowThreadPayload.ts b/src/dispatcher/payloads/ShowThreadPayload.ts index e1b8ac296..5dbc575e3 100644 --- a/src/dispatcher/payloads/ShowThreadPayload.ts +++ b/src/dispatcher/payloads/ShowThreadPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/dispatcher/payloads/SubmitAskToJoinPayload.ts b/src/dispatcher/payloads/SubmitAskToJoinPayload.ts index b531f0fb1..ec1414c22 100644 --- a/src/dispatcher/payloads/SubmitAskToJoinPayload.ts +++ b/src/dispatcher/payloads/SubmitAskToJoinPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Nordeck IT + Consulting GmbH -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { KnockRoomOpts } from "matrix-js-sdk/src/matrix"; diff --git a/src/dispatcher/payloads/SwitchSpacePayload.ts b/src/dispatcher/payloads/SwitchSpacePayload.ts index 04eb74433..63677af65 100644 --- a/src/dispatcher/payloads/SwitchSpacePayload.ts +++ b/src/dispatcher/payloads/SwitchSpacePayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../payloads"; diff --git a/src/dispatcher/payloads/ThreadPayload.ts b/src/dispatcher/payloads/ThreadPayload.ts index 653bbba3a..c09519e2e 100644 --- a/src/dispatcher/payloads/ThreadPayload.ts +++ b/src/dispatcher/payloads/ThreadPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../payloads"; diff --git a/src/dispatcher/payloads/UpdateFontSizeDeltaPayload.ts b/src/dispatcher/payloads/UpdateFontSizeDeltaPayload.ts index 63a36d736..b4ef6823a 100644 --- a/src/dispatcher/payloads/UpdateFontSizeDeltaPayload.ts +++ b/src/dispatcher/payloads/UpdateFontSizeDeltaPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../payloads"; diff --git a/src/dispatcher/payloads/UpdateSystemFontPayload.ts b/src/dispatcher/payloads/UpdateSystemFontPayload.ts index 1907584da..0061f20e2 100644 --- a/src/dispatcher/payloads/UpdateSystemFontPayload.ts +++ b/src/dispatcher/payloads/UpdateSystemFontPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../payloads"; diff --git a/src/dispatcher/payloads/UploadPayload.ts b/src/dispatcher/payloads/UploadPayload.ts index 6a376f348..afc4ca6c2 100644 --- a/src/dispatcher/payloads/UploadPayload.ts +++ b/src/dispatcher/payloads/UploadPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../payloads"; diff --git a/src/dispatcher/payloads/ViewHomePagePayload.ts b/src/dispatcher/payloads/ViewHomePagePayload.ts index 2a0d0077b..923635e3a 100644 --- a/src/dispatcher/payloads/ViewHomePagePayload.ts +++ b/src/dispatcher/payloads/ViewHomePagePayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Action } from "../actions"; diff --git a/src/dispatcher/payloads/ViewRoomDeltaPayload.ts b/src/dispatcher/payloads/ViewRoomDeltaPayload.ts index de33a88b2..e28f26f2e 100644 --- a/src/dispatcher/payloads/ViewRoomDeltaPayload.ts +++ b/src/dispatcher/payloads/ViewRoomDeltaPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../payloads"; diff --git a/src/dispatcher/payloads/ViewRoomErrorPayload.ts b/src/dispatcher/payloads/ViewRoomErrorPayload.ts index e7fbda097..4657a3581 100644 --- a/src/dispatcher/payloads/ViewRoomErrorPayload.ts +++ b/src/dispatcher/payloads/ViewRoomErrorPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixError, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/dispatcher/payloads/ViewRoomPayload.ts b/src/dispatcher/payloads/ViewRoomPayload.ts index b8211128e..549e8d2c9 100644 --- a/src/dispatcher/payloads/ViewRoomPayload.ts +++ b/src/dispatcher/payloads/ViewRoomPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/dispatcher/payloads/ViewStartChatOrReusePayload.ts b/src/dispatcher/payloads/ViewStartChatOrReusePayload.ts index 97179545a..619d96c67 100644 --- a/src/dispatcher/payloads/ViewStartChatOrReusePayload.ts +++ b/src/dispatcher/payloads/ViewStartChatOrReusePayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { User } from "matrix-js-sdk/src/matrix"; diff --git a/src/dispatcher/payloads/ViewUserPayload.ts b/src/dispatcher/payloads/ViewUserPayload.ts index defb7e379..405820b8c 100644 --- a/src/dispatcher/payloads/ViewUserPayload.ts +++ b/src/dispatcher/payloads/ViewUserPayload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RoomMember, User } from "matrix-js-sdk/src/matrix"; diff --git a/src/editor/autocomplete.ts b/src/editor/autocomplete.ts index 3aed32d91..28f86ddf7 100644 --- a/src/editor/autocomplete.ts +++ b/src/editor/autocomplete.ts @@ -1,18 +1,9 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { KeyboardEvent } from "react"; diff --git a/src/editor/caret.ts b/src/editor/caret.ts index ebd13828a..316c3a052 100644 --- a/src/editor/caret.ts +++ b/src/editor/caret.ts @@ -1,18 +1,9 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { needsCaretNodeBefore, needsCaretNodeAfter } from "./render"; diff --git a/src/editor/commands.tsx b/src/editor/commands.tsx index 27f64f32b..2930efe86 100644 --- a/src/editor/commands.tsx +++ b/src/editor/commands.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/editor/deserialize.ts b/src/editor/deserialize.ts index 70f23c757..91afe4bd3 100644 --- a/src/editor/deserialize.ts +++ b/src/editor/deserialize.ts @@ -1,18 +1,10 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, MsgType } from "matrix-js-sdk/src/matrix"; diff --git a/src/editor/diff.ts b/src/editor/diff.ts index c28cd3350..90429018f 100644 --- a/src/editor/diff.ts +++ b/src/editor/diff.ts @@ -1,18 +1,9 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export interface IDiff { diff --git a/src/editor/dom.ts b/src/editor/dom.ts index 293c7b02d..bb8372a09 100644 --- a/src/editor/dom.ts +++ b/src/editor/dom.ts @@ -1,18 +1,9 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { CARET_NODE_CHAR, isCaretNode } from "./render"; diff --git a/src/editor/history.ts b/src/editor/history.ts index 00bbbddba..2485b3cee 100644 --- a/src/editor/history.ts +++ b/src/editor/history.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import EditorModel from "./model"; diff --git a/src/editor/model.ts b/src/editor/model.ts index cefdc8666..67b19a399 100644 --- a/src/editor/model.ts +++ b/src/editor/model.ts @@ -1,18 +1,9 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diffAtCaret, diffDeletion, IDiff } from "./diff"; diff --git a/src/editor/offset.ts b/src/editor/offset.ts index acad56604..7216dac29 100644 --- a/src/editor/offset.ts +++ b/src/editor/offset.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import EditorModel from "./model"; diff --git a/src/editor/operations.ts b/src/editor/operations.ts index ca8492b08..3a2b7d8fb 100644 --- a/src/editor/operations.ts +++ b/src/editor/operations.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import Range from "./range"; diff --git a/src/editor/parts.ts b/src/editor/parts.ts index 2b732a6dd..bfdc3d29f 100644 --- a/src/editor/parts.ts +++ b/src/editor/parts.ts @@ -1,18 +1,9 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, RoomMember, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/editor/position.ts b/src/editor/position.ts index 243c7970c..439b99188 100644 --- a/src/editor/position.ts +++ b/src/editor/position.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import DocumentOffset from "./offset"; diff --git a/src/editor/range.ts b/src/editor/range.ts index 2c95dc7a8..c3ec67e67 100644 --- a/src/editor/range.ts +++ b/src/editor/range.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import EditorModel from "./model"; diff --git a/src/editor/render.ts b/src/editor/render.ts index 213d68413..22ad40beb 100644 --- a/src/editor/render.ts +++ b/src/editor/render.ts @@ -1,18 +1,9 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Part, Type } from "./parts"; diff --git a/src/editor/serialize.ts b/src/editor/serialize.ts index 14cb413a1..36e2b97b0 100644 --- a/src/editor/serialize.ts +++ b/src/editor/serialize.ts @@ -1,18 +1,10 @@ /* -Copyright 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { encode } from "html-entities"; diff --git a/src/effects/ICanvasEffect.ts b/src/effects/ICanvasEffect.ts index 36681d7cf..ef36b862b 100644 --- a/src/effects/ICanvasEffect.ts +++ b/src/effects/ICanvasEffect.ts @@ -1,18 +1,10 @@ /* - Copyright 2020 Nurjin Jafar - Copyright 2020 Nordeck IT + Consulting GmbH. +Copyright 2024 New Vector Ltd. +Copyright 2020 Nurjin Jafar +Copyright 2020 Nordeck IT + Consulting GmbH. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/effects/confetti/index.ts b/src/effects/confetti/index.ts index 32b607384..28f37a532 100644 --- a/src/effects/confetti/index.ts +++ b/src/effects/confetti/index.ts @@ -1,19 +1,11 @@ /* - Copyright 2020 Nurjin Jafar - Copyright 2020 Nordeck IT + Consulting GmbH. - Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2020 Nurjin Jafar +Copyright 2020 Nordeck IT + Consulting GmbH. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import ICanvasEffect from "../ICanvasEffect"; diff --git a/src/effects/effect.ts b/src/effects/effect.ts index 5bddafe90..2f1ad651b 100644 --- a/src/effects/effect.ts +++ b/src/effects/effect.ts @@ -1,18 +1,10 @@ /* - Copyright 2020 Nurjin Jafar - Copyright 2020 Nordeck IT + Consulting GmbH. +Copyright 2024 New Vector Ltd. +Copyright 2020 Nurjin Jafar +Copyright 2020 Nordeck IT + Consulting GmbH. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { TranslationKey } from "../languageHandler"; diff --git a/src/effects/fireworks/index.ts b/src/effects/fireworks/index.ts index 40a8e7593..00b775828 100644 --- a/src/effects/fireworks/index.ts +++ b/src/effects/fireworks/index.ts @@ -1,19 +1,11 @@ /* - Copyright 2020 Nurjin Jafar - Copyright 2020 Nordeck IT + Consulting GmbH. - Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2020 Nurjin Jafar +Copyright 2020 Nordeck IT + Consulting GmbH. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import ICanvasEffect from "../ICanvasEffect"; diff --git a/src/effects/hearts/index.ts b/src/effects/hearts/index.ts index 3c082e358..608ceaa78 100644 --- a/src/effects/hearts/index.ts +++ b/src/effects/hearts/index.ts @@ -1,18 +1,10 @@ /* - Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. - Copyright 2022 Arseny Uskov +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. +Copyright 2022 Arseny Uskov - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import ICanvasEffect from "../ICanvasEffect"; import { arrayFastClone } from "../../utils/arrays"; diff --git a/src/effects/index.ts b/src/effects/index.ts index 961a14b27..42f8aea78 100644 --- a/src/effects/index.ts +++ b/src/effects/index.ts @@ -1,18 +1,10 @@ /* - Copyright 2020 Nurjin Jafar - Copyright 2020 Nordeck IT + Consulting GmbH. +Copyright 2024 New Vector Ltd. +Copyright 2020 Nurjin Jafar +Copyright 2020 Nordeck IT + Consulting GmbH. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { _t, _td } from "../languageHandler"; import { ConfettiOptions } from "./confetti"; diff --git a/src/effects/rainfall/index.ts b/src/effects/rainfall/index.ts index 8b91ab19b..8fe3ea54e 100644 --- a/src/effects/rainfall/index.ts +++ b/src/effects/rainfall/index.ts @@ -1,18 +1,10 @@ /* - Copyright 2020 - 2023 The Matrix.org Foundation C.I.C. - Copyright 2021 Josias Allestad +Copyright 2024 New Vector Ltd. +Copyright 2020-2023 The Matrix.org Foundation C.I.C. +Copyright 2021 Josias Allestad - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import ICanvasEffect from "../ICanvasEffect"; import { arrayFastClone } from "../../utils/arrays"; diff --git a/src/effects/snowfall/index.ts b/src/effects/snowfall/index.ts index 8c51e8e22..b25aebf59 100644 --- a/src/effects/snowfall/index.ts +++ b/src/effects/snowfall/index.ts @@ -1,17 +1,9 @@ /* - Copyright 2020 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020-2023 The Matrix.org Foundation C.I.C. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import ICanvasEffect from "../ICanvasEffect"; import { arrayFastClone } from "../../utils/arrays"; diff --git a/src/effects/spaceinvaders/index.ts b/src/effects/spaceinvaders/index.ts index f375aee88..ca90c921e 100644 --- a/src/effects/spaceinvaders/index.ts +++ b/src/effects/spaceinvaders/index.ts @@ -1,17 +1,9 @@ /* - Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import ICanvasEffect from "../ICanvasEffect"; import { arrayFastClone } from "../../utils/arrays"; diff --git a/src/effects/utils.ts b/src/effects/utils.ts index 32543b080..62d3046fd 100644 --- a/src/effects/utils.ts +++ b/src/effects/utils.ts @@ -1,18 +1,10 @@ /* - Copyright 2020 Nurjin Jafar - Copyright 2020 Nordeck IT + Consulting GmbH. +Copyright 2024 New Vector Ltd. +Copyright 2020 Nurjin Jafar +Copyright 2020 Nordeck IT + Consulting GmbH. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IContent } from "matrix-js-sdk/src/matrix"; diff --git a/src/email.ts b/src/email.ts index 7a9d4769b..dfdd32500 100644 --- a/src/email.ts +++ b/src/email.ts @@ -1,18 +1,10 @@ /* -Copyright 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. +Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // Regexp based on Simpler Version from https://gist.github.com/gregseth/5582254 - matches RFC2822 diff --git a/src/emojipicker/recent.ts b/src/emojipicker/recent.ts index 3ac08c13c..f95e440cc 100644 --- a/src/emojipicker/recent.ts +++ b/src/emojipicker/recent.ts @@ -1,18 +1,10 @@ /* -Copyright 2019 Tulir Asokan +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Tulir Asokan -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { orderBy } from "lodash"; diff --git a/src/events/EventTileFactory.tsx b/src/events/EventTileFactory.tsx index 88ebb0a56..ff771b046 100644 --- a/src/events/EventTileFactory.tsx +++ b/src/events/EventTileFactory.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/events/RelationsHelper.ts b/src/events/RelationsHelper.ts index fbd1271c3..79b4ee777 100644 --- a/src/events/RelationsHelper.ts +++ b/src/events/RelationsHelper.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/events/forward/getForwardableEvent.ts b/src/events/forward/getForwardableEvent.ts index ddf5f180a..000a50f4e 100644 --- a/src/events/forward/getForwardableEvent.ts +++ b/src/events/forward/getForwardableEvent.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { M_POLL_END, M_POLL_START, M_BEACON_INFO, MatrixEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/events/index.ts b/src/events/index.ts index 5b5be07ca..7e1651927 100644 --- a/src/events/index.ts +++ b/src/events/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export { getForwardableEvent } from "./forward/getForwardableEvent"; diff --git a/src/events/location/getShareableLocationEvent.ts b/src/events/location/getShareableLocationEvent.ts index 4070bb7ac..ef5746493 100644 --- a/src/events/location/getShareableLocationEvent.ts +++ b/src/events/location/getShareableLocationEvent.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { M_BEACON_INFO, MatrixEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/room/useGuestAccessInformation.ts b/src/hooks/room/useGuestAccessInformation.ts index 38b83700b..6f53e0d55 100644 --- a/src/hooks/room/useGuestAccessInformation.ts +++ b/src/hooks/room/useGuestAccessInformation.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useMemo } from "react"; diff --git a/src/hooks/room/useRoomCall.ts b/src/hooks/room/useRoomCall.ts index 8f9a2b176..cb691cb2d 100644 --- a/src/hooks/room/useRoomCall.ts +++ b/src/hooks/room/useRoomCall.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; @@ -141,10 +133,10 @@ export const useRoomCall = ( if (useElementCallExclusively && !hasJitsiWidget) { return [PlatformCallType.ElementCall]; } - if (hasGroupCall && WidgetType.CALL.matches(groupCall.widget.type)) { - // only allow joining the ongoing Element call if there is one. - return [PlatformCallType.ElementCall]; - } + } + if (hasGroupCall && WidgetType.CALL.matches(groupCall.widget.type)) { + // only allow joining the ongoing Element call if there is one. + return [PlatformCallType.ElementCall]; } return options; }, [ diff --git a/src/hooks/room/useRoomMemberProfile.ts b/src/hooks/room/useRoomMemberProfile.ts index 8a085d198..57f72a722 100644 --- a/src/hooks/room/useRoomMemberProfile.ts +++ b/src/hooks/room/useRoomMemberProfile.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RoomMember } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/room/useRoomThreadNotifications.ts b/src/hooks/room/useRoomThreadNotifications.ts index 0c0aa995a..356af140f 100644 --- a/src/hooks/room/useRoomThreadNotifications.ts +++ b/src/hooks/room/useRoomThreadNotifications.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { NotificationCountType, Room, RoomEvent, ThreadEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/room/useTopic.ts b/src/hooks/room/useTopic.ts index a0876ef98..e9d98da97 100644 --- a/src/hooks/room/useTopic.ts +++ b/src/hooks/room/useTopic.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useEffect, useState } from "react"; diff --git a/src/hooks/spotlight/useDebouncedCallback.ts b/src/hooks/spotlight/useDebouncedCallback.ts index eb681e7a0..dbb6a3d20 100644 --- a/src/hooks/spotlight/useDebouncedCallback.ts +++ b/src/hooks/spotlight/useDebouncedCallback.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useEffect } from "react"; diff --git a/src/hooks/spotlight/useRecentSearches.ts b/src/hooks/spotlight/useRecentSearches.ts index 91a9e3ec2..1ce092a45 100644 --- a/src/hooks/spotlight/useRecentSearches.ts +++ b/src/hooks/spotlight/useRecentSearches.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useState } from "react"; diff --git a/src/hooks/useAccountData.ts b/src/hooks/useAccountData.ts index ad25f6146..0f55969e2 100644 --- a/src/hooks/useAccountData.ts +++ b/src/hooks/useAccountData.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useCallback, useState } from "react"; diff --git a/src/hooks/useAnimation.ts b/src/hooks/useAnimation.ts index 7d4646da4..a02bed708 100644 --- a/src/hooks/useAnimation.ts +++ b/src/hooks/useAnimation.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/hooks/useAsyncMemo.ts b/src/hooks/useAsyncMemo.ts index 69783c88e..ee3eb7bf6 100644 --- a/src/hooks/useAsyncMemo.ts +++ b/src/hooks/useAsyncMemo.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useState, useEffect, DependencyList } from "react"; diff --git a/src/hooks/useAsyncRefreshMemo.ts b/src/hooks/useAsyncRefreshMemo.ts index 31e4e21e4..122b7cdb2 100644 --- a/src/hooks/useAsyncRefreshMemo.ts +++ b/src/hooks/useAsyncRefreshMemo.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { DependencyList, useCallback, useEffect, useState } from "react"; diff --git a/src/hooks/useAudioDeviceSelection.ts b/src/hooks/useAudioDeviceSelection.ts index 752e0f822..504eb10ea 100644 --- a/src/hooks/useAudioDeviceSelection.ts +++ b/src/hooks/useAudioDeviceSelection.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useRef, useState } from "react"; diff --git a/src/hooks/useCall.ts b/src/hooks/useCall.ts index 87cc556f3..1fbe4d65e 100644 --- a/src/hooks/useCall.ts +++ b/src/hooks/useCall.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useState, useCallback, useMemo } from "react"; diff --git a/src/hooks/useDispatcher.ts b/src/hooks/useDispatcher.ts index 3c069fc1b..b9b22c413 100644 --- a/src/hooks/useDispatcher.ts +++ b/src/hooks/useDispatcher.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useEffect, useRef } from "react"; diff --git a/src/hooks/useEncryptionStatus.ts b/src/hooks/useEncryptionStatus.ts index fd89770d2..e3e44fca7 100644 --- a/src/hooks/useEncryptionStatus.ts +++ b/src/hooks/useEncryptionStatus.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/useEventEmitter.ts b/src/hooks/useEventEmitter.ts index 9d6b91794..e3020384e 100644 --- a/src/hooks/useEventEmitter.ts +++ b/src/hooks/useEventEmitter.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useRef, useEffect, useState, useCallback } from "react"; diff --git a/src/hooks/useFocus.ts b/src/hooks/useFocus.ts index cf4504cb9..b03ed4799 100644 --- a/src/hooks/useFocus.ts +++ b/src/hooks/useFocus.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useState } from "react"; diff --git a/src/hooks/useGlobalNotificationState.ts b/src/hooks/useGlobalNotificationState.ts index 4417eb609..755ffbf06 100644 --- a/src/hooks/useGlobalNotificationState.ts +++ b/src/hooks/useGlobalNotificationState.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useState } from "react"; diff --git a/src/hooks/useHover.ts b/src/hooks/useHover.ts index b8c3431e7..bbba5549d 100644 --- a/src/hooks/useHover.ts +++ b/src/hooks/useHover.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useState } from "react"; diff --git a/src/hooks/useIsEncrypted.ts b/src/hooks/useIsEncrypted.ts index b46fb571f..a90b795a8 100644 --- a/src/hooks/useIsEncrypted.ts +++ b/src/hooks/useIsEncrypted.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useCallback, useState } from "react"; diff --git a/src/hooks/useIsInitialSyncComplete.ts b/src/hooks/useIsInitialSyncComplete.ts index 3f78e13e7..b0131213a 100644 --- a/src/hooks/useIsInitialSyncComplete.ts +++ b/src/hooks/useIsInitialSyncComplete.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ClientEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/useIsReleaseAnnouncementOpen.ts b/src/hooks/useIsReleaseAnnouncementOpen.ts index f48df3fcc..b4a46568e 100644 --- a/src/hooks/useIsReleaseAnnouncementOpen.ts +++ b/src/hooks/useIsReleaseAnnouncementOpen.ts @@ -1,19 +1,9 @@ /* - * + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { useState } from "react"; diff --git a/src/hooks/useLatestResult.ts b/src/hooks/useLatestResult.ts index 0a03e744e..9776103ab 100644 --- a/src/hooks/useLatestResult.ts +++ b/src/hooks/useLatestResult.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useCallback, useRef } from "react"; diff --git a/src/hooks/useLocalEcho.ts b/src/hooks/useLocalEcho.ts index 6305d5608..bbb978e5d 100644 --- a/src/hooks/useLocalEcho.ts +++ b/src/hooks/useLocalEcho.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useState } from "react"; diff --git a/src/hooks/useLocalStorageState.ts b/src/hooks/useLocalStorageState.ts index c2a710c22..c09ea748a 100644 --- a/src/hooks/useLocalStorageState.ts +++ b/src/hooks/useLocalStorageState.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Dispatch, useCallback, useEffect, useState } from "react"; diff --git a/src/hooks/useNotificationSettings.tsx b/src/hooks/useNotificationSettings.tsx index 0e5f26b88..bf4290a06 100644 --- a/src/hooks/useNotificationSettings.tsx +++ b/src/hooks/useNotificationSettings.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IPushRules, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/usePermalink.ts b/src/hooks/usePermalink.ts index b168d30c8..18c5ed6b9 100644 --- a/src/hooks/usePermalink.ts +++ b/src/hooks/usePermalink.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, Room, RoomMember } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/usePermalinkEvent.ts b/src/hooks/usePermalinkEvent.ts index e72592a6e..ff77f1523 100644 --- a/src/hooks/usePermalinkEvent.ts +++ b/src/hooks/usePermalinkEvent.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/usePermalinkMember.ts b/src/hooks/usePermalinkMember.ts index 043222056..1fc144c9f 100644 --- a/src/hooks/usePermalinkMember.ts +++ b/src/hooks/usePermalinkMember.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IMatrixProfile, MatrixEvent, Room, RoomMember } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/usePermalinkTargetRoom.ts b/src/hooks/usePermalinkTargetRoom.ts index 2413c93a3..e5f46cc49 100644 --- a/src/hooks/usePermalinkTargetRoom.ts +++ b/src/hooks/usePermalinkTargetRoom.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/usePinnedEvents.ts b/src/hooks/usePinnedEvents.ts new file mode 100644 index 000000000..a29c65625 --- /dev/null +++ b/src/hooks/usePinnedEvents.ts @@ -0,0 +1,206 @@ +/* + * Copyright 2024 New Vector Ltd. + * Copyright 2024 The Matrix.org Foundation C.I.C. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. + */ + +import { useCallback, useEffect, useMemo, useState } from "react"; +import { + Room, + RoomEvent, + RoomStateEvent, + MatrixEvent, + EventType, + RelationType, + EventTimeline, + MatrixClient, +} from "matrix-js-sdk/src/matrix"; +import { logger } from "matrix-js-sdk/src/logger"; + +import { useTypedEventEmitter } from "./useEventEmitter"; +import { ReadPinsEventId } from "../components/views/right_panel/types"; +import { useMatrixClientContext } from "../contexts/MatrixClientContext"; +import { useAsyncMemo } from "./useAsyncMemo"; +import PinningUtils from "../utils/PinningUtils"; +import { batch } from "../utils/promise.ts"; + +/** + * Get the pinned event IDs from a room. + * The number of pinned events is limited to 100. + * @param room + */ +function getPinnedEventIds(room?: Room): string[] { + const eventIds: string[] = + room + ?.getLiveTimeline() + .getState(EventTimeline.FORWARDS) + ?.getStateEvents(EventType.RoomPinnedEvents, "") + ?.getContent()?.pinned ?? []; + // Limit the number of pinned events to 100 + return eventIds.slice(0, 100); +} + +/** + * Get the pinned event IDs from a room. + * @param room + */ +export const usePinnedEvents = (room?: Room): string[] => { + const [pinnedEvents, setPinnedEvents] = useState(getPinnedEventIds(room)); + + // Update the pinned events when the room state changes + // Filter out events that are not pinned events + const update = useCallback( + (ev?: MatrixEvent) => { + if (ev && ev.getType() !== EventType.RoomPinnedEvents) return; + setPinnedEvents(getPinnedEventIds(room)); + }, + [room], + ); + + useTypedEventEmitter(room?.getLiveTimeline().getState(EventTimeline.FORWARDS), RoomStateEvent.Events, update); + useEffect(() => { + setPinnedEvents(getPinnedEventIds(room)); + return () => { + setPinnedEvents([]); + }; + }, [room]); + return pinnedEvents; +}; + +/** + * Get the read pinned event IDs from a room. + * @param room + */ +function getReadPinnedEventIds(room?: Room): Set { + return new Set(room?.getAccountData(ReadPinsEventId)?.getContent()?.event_ids ?? []); +} + +/** + * Get the read pinned event IDs from a room. + * @param room + */ +export const useReadPinnedEvents = (room?: Room): Set => { + const [readPinnedEvents, setReadPinnedEvents] = useState>(new Set()); + + // Update the read pinned events when the room state changes + // Filter out events that are not read pinned events + const update = useCallback( + (ev?: MatrixEvent) => { + if (ev && ev.getType() !== ReadPinsEventId) return; + setReadPinnedEvents(getReadPinnedEventIds(room)); + }, + [room], + ); + + useTypedEventEmitter(room, RoomEvent.AccountData, update); + useEffect(() => { + setReadPinnedEvents(getReadPinnedEventIds(room)); + return () => { + setReadPinnedEvents(new Set()); + }; + }, [room]); + return readPinnedEvents; +}; + +/** + * Fetch the pinned event + * @param room + * @param pinnedEventId + * @param cli + */ +async function fetchPinnedEvent(room: Room, pinnedEventId: string, cli: MatrixClient): Promise { + const timelineSet = room.getUnfilteredTimelineSet(); + // Get the event from the local timeline + const localEvent = timelineSet + ?.getTimelineForEvent(pinnedEventId) + ?.getEvents() + .find((e) => e.getId() === pinnedEventId); + + // Decrypt the event if it's encrypted + // Can happen when the tab is refreshed and the pinned events card is opened directly + if (localEvent?.isEncrypted()) { + await cli.decryptEventIfNeeded(localEvent, { emit: false }); + } + + // If the event is available locally, return it if it's pinnable + // or if it's redacted (to show the redacted event and to be able to unpin it) + // Otherwise, return null + if (localEvent) return PinningUtils.isUnpinnable(localEvent) ? localEvent : null; + + try { + // The event is not available locally, so we fetch the event and latest edit in parallel + const [ + evJson, + { + events: [edit], + }, + ] = await Promise.all([ + cli.fetchRoomEvent(room.roomId, pinnedEventId), + cli.relations(room.roomId, pinnedEventId, RelationType.Replace, null, { limit: 1 }), + ]); + + const event = new MatrixEvent(evJson); + + // Decrypt the event if it's encrypted + if (event.isEncrypted()) { + await cli.decryptEventIfNeeded(event, { emit: false }); + } + + // Handle poll events + await room.processPollEvents([event]); + + const senderUserId = event.getSender(); + if (senderUserId && PinningUtils.isUnpinnable(event)) { + // Inject sender information + event.sender = room.getMember(senderUserId); + // Also inject any edits we've found + if (edit) event.makeReplaced(edit); + + return event; + } + } catch (err) { + logger.error(`Error looking up pinned event ${pinnedEventId} in room ${room.roomId}`); + logger.error(err); + } + return null; +} + +/** + * Fetch the pinned events + * @param room + * @param pinnedEventIds + */ +export function useFetchedPinnedEvents(room: Room, pinnedEventIds: string[]): Array | null { + const cli = useMatrixClientContext(); + + return useAsyncMemo( + () => { + const fetchPromises = pinnedEventIds.map((eventId) => () => fetchPinnedEvent(room, eventId, cli)); + // Fetch the pinned events in batches of 10 + return batch(fetchPromises, 10); + }, + [cli, room, pinnedEventIds], + null, + ); +} + +/** + * Fetch the pinned events and sort them by from the oldest to the newest + * The order is determined by the event timestamp + * @param room + * @param pinnedEventIds + */ +export function useSortedFetchedPinnedEvents(room: Room, pinnedEventIds: string[]): Array { + const pinnedEvents = useFetchedPinnedEvents(room, pinnedEventIds); + return useMemo(() => { + if (!pinnedEvents) return []; + + return pinnedEvents.sort((a, b) => { + if (!a) return -1; + if (!b) return 1; + return a.getTs() - b.getTs(); + }); + }, [pinnedEvents]); +} diff --git a/src/hooks/useProfileInfo.ts b/src/hooks/useProfileInfo.ts index d85012b87..bc57f2716 100644 --- a/src/hooks/useProfileInfo.ts +++ b/src/hooks/useProfileInfo.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useCallback, useState } from "react"; diff --git a/src/hooks/usePublicRoomDirectory.ts b/src/hooks/usePublicRoomDirectory.ts index 014e7986c..339ee9ad6 100644 --- a/src/hooks/usePublicRoomDirectory.ts +++ b/src/hooks/usePublicRoomDirectory.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RoomType, IProtocol, IPublicRoomsChunkRoom, IRoomDirectoryOptions } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/usePushers.ts b/src/hooks/usePushers.ts index 2c6439f87..38c36ebc8 100644 --- a/src/hooks/usePushers.ts +++ b/src/hooks/usePushers.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IPusher, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/useRoomMembers.ts b/src/hooks/useRoomMembers.ts index 09c977384..51aa7b464 100644 --- a/src/hooks/useRoomMembers.ts +++ b/src/hooks/useRoomMembers.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useMemo, useState } from "react"; diff --git a/src/hooks/useRoomName.ts b/src/hooks/useRoomName.ts index fa82f6a82..b1f25b7ca 100644 --- a/src/hooks/useRoomName.ts +++ b/src/hooks/useRoomName.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, RoomEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/useRoomNotificationState.ts b/src/hooks/useRoomNotificationState.ts index cd29023eb..46dd4e552 100644 --- a/src/hooks/useRoomNotificationState.ts +++ b/src/hooks/useRoomNotificationState.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useCallback, useMemo, useState } from "react"; diff --git a/src/hooks/useRoomState.ts b/src/hooks/useRoomState.ts index dc3e4c2df..8c0c55961 100644 --- a/src/hooks/useRoomState.ts +++ b/src/hooks/useRoomState.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useCallback, useEffect, useRef, useState } from "react"; diff --git a/src/hooks/useSettings.ts b/src/hooks/useSettings.ts index 23ce891b1..169fccb7c 100644 --- a/src/hooks/useSettings.ts +++ b/src/hooks/useSettings.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useEffect, useState } from "react"; diff --git a/src/hooks/useSlidingSyncRoomSearch.ts b/src/hooks/useSlidingSyncRoomSearch.ts index e026b5a06..bd8529bfd 100644 --- a/src/hooks/useSlidingSyncRoomSearch.ts +++ b/src/hooks/useSlidingSyncRoomSearch.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useCallback, useState } from "react"; diff --git a/src/hooks/useSmoothAnimation.ts b/src/hooks/useSmoothAnimation.ts index 8d0e1e4d4..df62a4d3d 100644 --- a/src/hooks/useSmoothAnimation.ts +++ b/src/hooks/useSmoothAnimation.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/hooks/useSpaceResults.ts b/src/hooks/useSpaceResults.ts index d2dde1315..75a0a119a 100644 --- a/src/hooks/useSpaceResults.ts +++ b/src/hooks/useSpaceResults.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useCallback, useEffect, useMemo, useState } from "react"; diff --git a/src/hooks/useStateArray.ts b/src/hooks/useStateArray.ts index fe8584d60..3db3f5fe7 100644 --- a/src/hooks/useStateArray.ts +++ b/src/hooks/useStateArray.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useState } from "react"; diff --git a/src/hooks/useStateCallback.ts b/src/hooks/useStateCallback.ts index ab73f2652..661898c9f 100644 --- a/src/hooks/useStateCallback.ts +++ b/src/hooks/useStateCallback.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Dispatch, useState } from "react"; diff --git a/src/hooks/useStateToggle.ts b/src/hooks/useStateToggle.ts index 32f0a94d7..c5f24c5db 100644 --- a/src/hooks/useStateToggle.ts +++ b/src/hooks/useStateToggle.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Dispatch, SetStateAction, useState } from "react"; diff --git a/src/hooks/useTheme.ts b/src/hooks/useTheme.ts index fcf77d4c6..e459e6801 100644 --- a/src/hooks/useTheme.ts +++ b/src/hooks/useTheme.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { SettingLevel } from "../settings/SettingLevel"; diff --git a/src/hooks/useThreepids.ts b/src/hooks/useThreepids.ts index 72ce67dd0..7e9f2cc52 100644 --- a/src/hooks/useThreepids.ts +++ b/src/hooks/useThreepids.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, IThreepid } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/useTimeout.ts b/src/hooks/useTimeout.ts index df00e8bbb..c88de82c0 100644 --- a/src/hooks/useTimeout.ts +++ b/src/hooks/useTimeout.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useEffect, useRef, useState } from "react"; diff --git a/src/hooks/useTimeoutToggle.ts b/src/hooks/useTimeoutToggle.ts index fd43c1365..83f1bc333 100644 --- a/src/hooks/useTimeoutToggle.ts +++ b/src/hooks/useTimeoutToggle.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useEffect, useRef, useState } from "react"; diff --git a/src/hooks/useTransition.ts b/src/hooks/useTransition.ts index cab55e986..853354e10 100644 --- a/src/hooks/useTransition.ts +++ b/src/hooks/useTransition.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // Based on https://stackoverflow.com/a/61680184 diff --git a/src/hooks/useUnreadNotifications.ts b/src/hooks/useUnreadNotifications.ts index f687ee7f1..47e4e6b81 100644 --- a/src/hooks/useUnreadNotifications.ts +++ b/src/hooks/useUnreadNotifications.ts @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RoomEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/hooks/useUserDirectory.ts b/src/hooks/useUserDirectory.ts index 9dfcbc05a..09b55f21a 100644 --- a/src/hooks/useUserDirectory.ts +++ b/src/hooks/useUserDirectory.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useCallback, useState } from "react"; diff --git a/src/hooks/useUserOnboardingContext.ts b/src/hooks/useUserOnboardingContext.ts index 38cc8d734..067c7d2c5 100644 --- a/src/hooks/useUserOnboardingContext.ts +++ b/src/hooks/useUserOnboardingContext.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/hooks/useUserOnboardingTasks.ts b/src/hooks/useUserOnboardingTasks.ts index 4948f68e2..a7b52bd6f 100644 --- a/src/hooks/useUserOnboardingTasks.ts +++ b/src/hooks/useUserOnboardingTasks.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useMemo } from "react"; diff --git a/src/hooks/useUserTimezone.ts b/src/hooks/useUserTimezone.ts new file mode 100644 index 000000000..686679bb9 --- /dev/null +++ b/src/hooks/useUserTimezone.ts @@ -0,0 +1,106 @@ +/* +Copyright 2024 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +import { useEffect, useState } from "react"; +import { MatrixClient, MatrixError } from "matrix-js-sdk/src/matrix"; + +/** + * Fetch a user's delclared timezone through their profile, and return + * a friendly string of the current time for that user. This will keep + * in sync with the current time, and will be refreshed once a minute. + * + * @param cli The Matrix Client instance. + * @param userId The userID to fetch the timezone for. + * @returns A timezone name and friendly string for the user's timezone, or + * null if the user has no timezone or the timezone was not recognised + * by the browser. + */ +export const useUserTimezone = (cli: MatrixClient, userId: string): { timezone: string; friendly: string } | null => { + const [timezone, setTimezone] = useState(); + const [updateInterval, setUpdateInterval] = useState>(); + const [friendly, setFriendly] = useState(); + const [supported, setSupported] = useState(); + + useEffect(() => { + if (!cli || supported !== undefined) { + return; + } + cli.doesServerSupportExtendedProfiles() + .then(setSupported) + .catch((ex) => { + console.warn("Unable to determine if extended profiles are supported", ex); + }); + }, [supported, cli]); + + useEffect(() => { + return () => { + if (updateInterval) { + clearInterval(updateInterval); + } + }; + }, [updateInterval]); + + useEffect(() => { + if (supported !== true) { + return; + } + (async () => { + console.log("Trying to fetch TZ"); + try { + const tz = await cli.getExtendedProfileProperty(userId, "us.cloke.msc4175.tz"); + if (typeof tz !== "string") { + // Err, definitely not a tz. + throw Error("Timezone value was not a string"); + } + // This will validate the timezone for us. + // eslint-disable-next-line new-cap + Intl.DateTimeFormat(undefined, { timeZone: tz }); + + const updateTime = (): void => { + const currentTime = new Date(); + const friendly = currentTime.toLocaleString(undefined, { + timeZone: tz, + hour12: true, + hour: "2-digit", + minute: "2-digit", + timeZoneName: "shortOffset", + }); + setTimezone(tz); + setFriendly(friendly); + setUpdateInterval(setTimeout(updateTime, (60 - currentTime.getSeconds()) * 1000)); + }; + updateTime(); + } catch (ex) { + setTimezone(undefined); + setFriendly(undefined); + setUpdateInterval(undefined); + if (ex instanceof MatrixError && ex.errcode === "M_NOT_FOUND") { + // No timezone set, ignore. + return; + } + console.error("Could not render current timezone for user", ex); + } + })(); + }, [supported, userId, cli]); + + if (!timezone || !friendly) { + return null; + } + + return { + friendly, + timezone, + }; +}; diff --git a/src/hooks/useWindowWidth.ts b/src/hooks/useWindowWidth.ts index 354271339..0b952ffce 100644 --- a/src/hooks/useWindowWidth.ts +++ b/src/hooks/useWindowWidth.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index aae7b090c..b4af3e162 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -229,6 +229,7 @@ }, "misconfigured_body": "Ask your %(brand)s admin to check your config for incorrect or duplicate entries.", "misconfigured_title": "Your %(brand)s is misconfigured", + "mobile_create_account_title": "You're about to create an account on %(hsName)s", "msisdn_field_description": "Other users can invite you to rooms using your contact details", "msisdn_field_label": "Phone", "msisdn_field_number_invalid": "That phone number doesn't look quite right, please check and try again", @@ -369,6 +370,8 @@ "email_resend_prompt": "Did not receive it?
    Resend it", "email_resent": "Resent!", "fallback_button": "Start authentication", + "mas_cross_signing_reset_cta": "Go to your account", + "mas_cross_signing_reset_description": "Reset your identity through your account provider and then come back and click “Retry”.", "msisdn": "A text message has been sent to %(msisdn)s", "msisdn_token_incorrect": "Token incorrect", "msisdn_token_prompt": "Please enter the code it contains:", @@ -1424,8 +1427,11 @@ "dynamic_room_predecessors": "Dynamic room predecessors", "dynamic_room_predecessors_description": "Enable MSC3946 (to support late-arriving room archives)", "element_call_video_rooms": "Element Call video rooms", + "exclude_insecure_devices": "Exclude insecure devices when sending/receiving messages", + "exclude_insecure_devices_description": "When this mode is enabled, encrypted messages will not be shared with unverified devices, and messages from unverified devices will be shown as an error. Note that if you enable this mode, you may be unable to communicate with users who have not verified their devices.", "experimental_description": "Feeling experimental? Try out our latest ideas in development. These features are not finalised; they may be unstable, may change, or may be dropped altogether. Learn more.", "experimental_section": "Early previews", + "extended_profiles_msc_support": "Requires your server to support MSC4133", "feature_disable_call_per_sender_encryption": "Disable per-sender encryption for Element Call", "feature_wysiwyg_composer_description": "Use rich text instead of Markdown in the message composer.", "group_calls": "New group call experience", @@ -1464,7 +1470,6 @@ "notifications": "Enable the notifications panel in the room header", "oidc_native_flow": "OIDC native authentication", "oidc_native_flow_description": "⚠ WARNING: Experimental. Use OIDC native authentication when supported by the server.", - "pinning": "Message Pinning", "release_announcement": "Release announcement", "render_reaction_images": "Render custom images in reactions", "render_reaction_images_description": "Sometimes referred to as \"custom emojis\".", @@ -1855,6 +1860,12 @@ "other": "You can only pin up to %(count)s widgets" }, "menu": "Open menu", + "release_announcement": { + "close": "Ok", + "description": "Find all pinned messages here. Rollover any message and select “Pin” to add it.", + "title": "All new pinned messages" + }, + "reply_thread": "Reply to a thread message", "title": "Pinned messages", "unpin_all": { "button": "Unpin all messages", @@ -1969,8 +1980,6 @@ "one": "Asking to join", "other": "%(count)s people asking to join" }, - "release_announcement_description": "Enjoy a simpler, more accessible room header.", - "release_announcement_header": "New design!", "room_is_public": "This room is public", "show_widgets_button": "Show Widgets", "video_call_button_ec": "Video call (%(brand)s)", @@ -1981,6 +1990,7 @@ "video_call_ec_layout_spotlight": "Spotlight", "video_room_view_chat_button": "View chat timeline" }, + "header_avatar_open_settings_label": "Open room settings", "header_face_pile_tooltip": "People", "header_untrusted_label": "Untrusted", "inaccessible": "This room or space is not accessible at this time.", @@ -2014,7 +2024,6 @@ "inviter_unknown": "Unknown", "invites_you_text": " invites you", "join_button_account": "Sign Up", - "join_failed_enable_video_rooms": "To join, please enable video rooms in Labs first", "join_failed_needs_invite": "To view %(roomName)s, you need an invite", "join_the_discussion": "Join the discussion", "join_title": "Join the room to participate", @@ -2052,6 +2061,21 @@ "not_found_title": "This room or space does not exist.", "not_found_title_name": "%(roomName)s does not exist.", "peek_join_prompt": "You're previewing %(roomName)s. Want to join it?", + "pinned_message_banner": { + "button_close_list": "Close list", + "button_view_all": "View all", + "description": "This room has pinned messages. Click to view them.", + "go_to_message": "View the pinned message in the timeline.", + "prefix": { + "audio": "Audio", + "file": "File", + "image": "Image", + "poll": "Poll", + "video": "Video" + }, + "preview": "%(prefix)s: %(preview)s", + "title": "%(index)s of %(length)s Pinned messages" + }, "read_topic": "Click to read topic", "rejecting": "Rejecting invite…", "rejoin_button": "Re-join", @@ -2068,7 +2092,6 @@ }, "this_room_button": "Search this room" }, - "show_labs_settings": "Show Labs settings", "status_bar": { "delete_all": "Delete all", "exceeded_resource_limit": "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.", @@ -2099,7 +2122,6 @@ }, "uploading_single_file": "Uploading %(filename)s" }, - "view_failed_enable_video_rooms": "To view, please enable video rooms in Labs first", "waiting_for_join_subtitle": "Once invited users have joined %(brand)s, you will be able to chat and the room will be end-to-end encrypted", "waiting_for_join_title": "Waiting for users to join %(brand)s" }, @@ -2203,6 +2225,8 @@ "error_deleting_alias_description": "There was an error removing that address. It may no longer exist or a temporary error occurred.", "error_deleting_alias_description_forbidden": "You don't have permission to delete the address.", "error_deleting_alias_title": "Error removing address", + "error_publishing": "Unable to publish room", + "error_publishing_detail": "There was an error publishing this room", "error_save_space_settings": "Failed to save space settings.", "error_updating_alias_description": "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.", "error_updating_canonical_alias_description": "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.", @@ -2700,6 +2724,7 @@ "code_blocks_heading": "Code blocks", "compact_modern": "Use a more compact 'Modern' layout", "composer_heading": "Composer", + "default_timezone": "Browser default (%(timezone)s)", "dialog_title": "Settings: Preferences", "enable_hardware_acceleration": "Enable hardware acceleration", "enable_tray_icon": "Show tray icon and minimise window to it on close", @@ -2707,6 +2732,7 @@ "keyboard_view_shortcuts_button": "To view all keyboard shortcuts, click here.", "media_heading": "Images, GIFs and videos", "presence_description": "Share your activity and status with others.", + "publish_timezone": "Publish timezone on public profile", "rm_lifetime": "Read Marker lifetime (ms)", "rm_lifetime_offscreen": "Read Marker off-screen lifetime (ms)", "room_directory_heading": "Room directory", @@ -2715,7 +2741,8 @@ "show_checklist_shortcuts": "Show shortcut to welcome checklist above the room list", "show_polls_button": "Show polls button", "surround_text": "Surround selected text when typing special characters", - "time_heading": "Displaying time" + "time_heading": "Displaying time", + "user_timezone": "Set timezone" }, "prompt_invite": "Prompt before sending invites to potentially invalid matrix IDs", "replace_plain_emoji": "Automatically replace plain text Emoji", @@ -3278,6 +3305,8 @@ "historical_event_no_key_backup": "Historical messages are not available on this device", "historical_event_unverified_device": "You need to verify this device for access to historical messages", "historical_event_user_not_joined": "You don't have access to this message", + "sender_identity_previously_verified": "Verified identity has changed", + "sender_unsigned_device": "Encrypted by a device not verified by its owner.", "unable_to_decrypt": "Unable to decrypt message" }, "disambiguated_profile": "%(displayName)s (%(matrixId)s)", diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index ad9d34ab0..7b14bbaf1 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -1841,10 +1841,25 @@ "files_button": "Pliki", "info": "Info", "pinned_messages": { + "empty_description": "Znajdź wiadomość i wybierz „%(pinAction)s”, aby załączyć ją tutaj.", + "empty_title": "Przypinaj ważne wiadomości, aby można było je łatwo znaleźć", + "header": { + "one": "Przypięto 1 wiadomość", + "few": "Przypięto %(count)s wiadomości", + "many": "Przypięto %(count)s wiadomości" + }, "limits": { "other": "Możesz przypiąć do %(count)s widżetów" }, - "title": "Przypięte wiadomości" + "menu": "Otwórz menu", + "reply_thread": "Odpowiedz na wiadomość w wątku", + "title": "Przypięte wiadomości", + "unpin_all": { + "button": "Odepnij wszystkie wiadomości", + "content": "Upewnij się, czy naprawdę chcesz usunąć wszystkie przypięte wiadomości. Tej akcji nie można cofnąć.", + "title": "Odpiąć wszystkie wiadomości?" + }, + "view": "Wyświetl na osi czasu" }, "pinned_messages_button": "Przypięte wiadomości", "poll": { @@ -1953,8 +1968,6 @@ "few": "%(count)s osoby proszą o dołączenie", "many": "%(count)s osób prosi o dołączenie" }, - "release_announcement_description": "Ciesz się prostszym, bardziej przystosowanym nagłówkiem pokoju.", - "release_announcement_header": "Nowy design!", "room_is_public": "Ten pokój jest publiczny", "show_widgets_button": "Pokaż widżety", "video_call_button_ec": "Rozmowa wideo (%(brand)s)", @@ -2036,6 +2049,21 @@ "not_found_title": "Ten pokój lub przestrzeń nie istnieje.", "not_found_title_name": "%(roomName)s nie istnieje.", "peek_join_prompt": "Przeglądasz %(roomName)s. Czy chcesz dołączyć do pokoju?", + "pinned_message_banner": { + "button_close_list": "Zamknij listę", + "button_view_all": "Pokaż wszystkie", + "description": "Ten pokój ma przypięte wiadomości. Kliknij, aby je wyświetlić.", + "go_to_message": "Wyświetl przypiętą wiadomość na osi czasu.", + "prefix": { + "audio": "Audio", + "file": "Plik", + "image": "Obraz", + "poll": "Ankieta", + "video": "Wideo" + }, + "preview": "%(prefix)s: %(preview)s", + "title": "%(index)s z %(length)s przypiętych wiadomości" + }, "read_topic": "Kliknij, aby przeczytać temat", "rejecting": "Odrzucanie zaproszenia…", "rejoin_button": "Dołącz ponownie", @@ -2685,6 +2713,7 @@ "code_blocks_heading": "Bloki kodu", "compact_modern": "Użyj bardziej kompaktowego, \"nowoczesnego\" wyglądu", "composer_heading": "Kompozytor", + "default_timezone": "Ustawienie przeglądarki (%(timezone)s)", "dialog_title": "Ustawienia: Preferencje", "enable_hardware_acceleration": "Włącz przyspieszenie sprzętowe", "enable_tray_icon": "Pokaż ikonę w zasobniku systemowym i zminimalizuj okno do niej zamiast zamknięcia", @@ -2700,7 +2729,8 @@ "show_checklist_shortcuts": "Pokaż skrót do listy powitalnej nad listą pokojów", "show_polls_button": "Pokaż przycisk ankiet", "surround_text": "Otocz zaznaczony tekst podczas wpisywania specjalnych znaków", - "time_heading": "Wyświetlanie czasu" + "time_heading": "Wyświetlanie czasu", + "user_timezone": "Ustaw strefę czasową" }, "prompt_invite": "Powiadamiaj przed wysłaniem zaproszenia do potencjalnie nieprawidłowych ID matrix", "replace_plain_emoji": "Automatycznie zastępuj tekstowe emotikony", diff --git a/src/identifiers.ts b/src/identifiers.ts index cc8b2fee4..88f3c2659 100644 --- a/src/identifiers.ts +++ b/src/identifiers.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2021 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ export const ELEMENT_CLIENT_ID = "io.element.web"; diff --git a/src/index.ts b/src/index.ts index 6d942597b..e1fe9c010 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // Import the js-sdk so the proper `request` object can be set. This does some diff --git a/src/indexing/BaseEventIndexManager.ts b/src/indexing/BaseEventIndexManager.ts index 519312de0..efdc64e36 100644 --- a/src/indexing/BaseEventIndexManager.ts +++ b/src/indexing/BaseEventIndexManager.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/indexing/EventIndex.ts b/src/indexing/EventIndex.ts index 15419eecf..ec3935cd6 100644 --- a/src/indexing/EventIndex.ts +++ b/src/indexing/EventIndex.ts @@ -1,17 +1,9 @@ /* -Copyright 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EventEmitter } from "events"; diff --git a/src/indexing/EventIndexPeg.ts b/src/indexing/EventIndexPeg.ts index 5483310fa..73acfff85 100644 --- a/src/indexing/EventIndexPeg.ts +++ b/src/indexing/EventIndexPeg.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* diff --git a/src/integrations/IntegrationManagerInstance.ts b/src/integrations/IntegrationManagerInstance.ts index 738c4b401..4516922fb 100644 --- a/src/integrations/IntegrationManagerInstance.ts +++ b/src/integrations/IntegrationManagerInstance.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ComponentProps } from "react"; diff --git a/src/integrations/IntegrationManagers.ts b/src/integrations/IntegrationManagers.ts index 5ccf6a6e0..86c1b2db8 100644 --- a/src/integrations/IntegrationManagers.ts +++ b/src/integrations/IntegrationManagers.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/languageHandler.tsx b/src/languageHandler.tsx index 345a5984f..0b0949734 100644 --- a/src/languageHandler.tsx +++ b/src/languageHandler.tsx @@ -1,20 +1,12 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> Copyright 2017 MTRNord and Cooperative EITA Copyright 2017 Vector Creations Ltd. -Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import counterpart from "counterpart"; diff --git a/src/linkify-matrix.ts b/src/linkify-matrix.ts index f7b7775bb..c63241c1e 100644 --- a/src/linkify-matrix.ts +++ b/src/linkify-matrix.ts @@ -1,18 +1,10 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as linkifyjs from "linkifyjs"; diff --git a/src/mjolnir/BanList.ts b/src/mjolnir/BanList.ts index b0b63c081..7e31b652d 100644 --- a/src/mjolnir/BanList.ts +++ b/src/mjolnir/BanList.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // Inspiration largely taken from Mjolnir itself diff --git a/src/mjolnir/ListRule.ts b/src/mjolnir/ListRule.ts index c6595b33b..0261ec2ef 100644 --- a/src/mjolnir/ListRule.ts +++ b/src/mjolnir/ListRule.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // We are using experimental APIs here, so we need to disable the linter diff --git a/src/mjolnir/Mjolnir.ts b/src/mjolnir/Mjolnir.ts index 79aea7477..8c9d93990 100644 --- a/src/mjolnir/Mjolnir.ts +++ b/src/mjolnir/Mjolnir.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, RoomStateEvent, Preset } from "matrix-js-sdk/src/matrix"; diff --git a/src/models/Call.ts b/src/models/Call.ts index 658cb7804..0238d1591 100644 --- a/src/models/Call.ts +++ b/src/models/Call.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { @@ -346,7 +338,7 @@ export class JitsiCall extends Call { public static get(room: Room): JitsiCall | null { // Only supported in video rooms - if (SettingsStore.getValue("feature_video_rooms") && room.isElementVideoRoom()) { + if (room.isElementVideoRoom()) { const apps = WidgetStore.instance.getApps(room.roomId); // The isVideoChannel field differentiates rich Jitsi calls from bare Jitsi widgets const jitsiWidget = apps.find((app) => WidgetType.JITSI.matches(app.type) && app.data?.isVideoChannel); @@ -813,33 +805,24 @@ export class ElementCall extends Call { } public static get(room: Room): ElementCall | null { - // Only supported in the new group call experience or in video rooms. - - if ( - SettingsStore.getValue("feature_group_calls") || - (SettingsStore.getValue("feature_video_rooms") && - SettingsStore.getValue("feature_element_call_video_rooms") && - room.isCallRoom()) - ) { - const apps = WidgetStore.instance.getApps(room.roomId); - const hasEcWidget = apps.some((app) => WidgetType.CALL.matches(app.type)); - const session = room.client.matrixRTC.getRoomSession(room); - - // A call is present if we - // - have a widget: This means the create function was called. - // - or there is a running session where we have not yet created a widget for. - // - or this is a call room. Then we also always want to show a call. - if (hasEcWidget || session.memberships.length !== 0 || room.isCallRoom()) { - // create a widget for the case we are joining a running call and don't have on yet. - const availableOrCreatedWidget = ElementCall.createOrGetCallWidget( - room.roomId, - room.client, - undefined, - undefined, - isVideoRoom(room), - ); - return new ElementCall(session, availableOrCreatedWidget, room.client); - } + const apps = WidgetStore.instance.getApps(room.roomId); + const hasEcWidget = apps.some((app) => WidgetType.CALL.matches(app.type)); + const session = room.client.matrixRTC.getRoomSession(room); + + // A call is present if we + // - have a widget: This means the create function was called. + // - or there is a running session where we have not yet created a widget for. + // - or this is a call room. Then we also always want to show a call. + if (hasEcWidget || session.memberships.length !== 0 || room.isCallRoom()) { + // create a widget for the case we are joining a running call and don't have on yet. + const availableOrCreatedWidget = ElementCall.createOrGetCallWidget( + room.roomId, + room.client, + undefined, + undefined, + isVideoRoom(room), + ); + return new ElementCall(session, availableOrCreatedWidget, room.client); } return null; diff --git a/src/models/LocalRoom.ts b/src/models/LocalRoom.ts index 8c8d812d6..d19ff0a0c 100644 --- a/src/models/LocalRoom.ts +++ b/src/models/LocalRoom.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, Room, PendingEventOrdering } from "matrix-js-sdk/src/matrix"; diff --git a/src/models/RoomUpload.ts b/src/models/RoomUpload.ts index cc1b35315..569f59e01 100644 --- a/src/models/RoomUpload.ts +++ b/src/models/RoomUpload.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IEventRelation, UploadProgress } from "matrix-js-sdk/src/matrix"; diff --git a/src/models/notificationsettings/NotificationSettings.ts b/src/models/notificationsettings/NotificationSettings.ts index 4d396e6e5..533afe2d0 100644 --- a/src/models/notificationsettings/NotificationSettings.ts +++ b/src/models/notificationsettings/NotificationSettings.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RoomNotifState } from "../../RoomNotifs"; diff --git a/src/models/notificationsettings/PushRuleDiff.ts b/src/models/notificationsettings/PushRuleDiff.ts index 24917fd71..82c4a4d4b 100644 --- a/src/models/notificationsettings/PushRuleDiff.ts +++ b/src/models/notificationsettings/PushRuleDiff.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IAnnotatedPushRule, PushRuleAction, PushRuleKind, RuleId } from "matrix-js-sdk/src/matrix"; diff --git a/src/models/notificationsettings/PushRuleMap.ts b/src/models/notificationsettings/PushRuleMap.ts index 1e73a5fe4..bf217d16f 100644 --- a/src/models/notificationsettings/PushRuleMap.ts +++ b/src/models/notificationsettings/PushRuleMap.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IAnnotatedPushRule, IPushRules, PushRuleKind, RuleId } from "matrix-js-sdk/src/matrix"; diff --git a/src/models/notificationsettings/reconcileNotificationSettings.ts b/src/models/notificationsettings/reconcileNotificationSettings.ts index 49b35a657..da052b447 100644 --- a/src/models/notificationsettings/reconcileNotificationSettings.ts +++ b/src/models/notificationsettings/reconcileNotificationSettings.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IPushRules, PushRuleKind, RuleId } from "matrix-js-sdk/src/matrix"; diff --git a/src/models/notificationsettings/toNotificationSettings.ts b/src/models/notificationsettings/toNotificationSettings.ts index 0515f275b..7f7f5798b 100644 --- a/src/models/notificationsettings/toNotificationSettings.ts +++ b/src/models/notificationsettings/toNotificationSettings.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IPushRule, IPushRules, RuleId } from "matrix-js-sdk/src/matrix"; diff --git a/src/modules/AppModule.ts b/src/modules/AppModule.ts index b5ccf5f63..3904efe6f 100644 --- a/src/modules/AppModule.ts +++ b/src/modules/AppModule.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RuntimeModule } from "@matrix-org/react-sdk-module-api/lib/RuntimeModule"; diff --git a/src/modules/ModuleComponents.tsx b/src/modules/ModuleComponents.tsx index c99d2307c..25a5092a2 100644 --- a/src/modules/ModuleComponents.tsx +++ b/src/modules/ModuleComponents.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { TextInputField } from "@matrix-org/react-sdk-module-api/lib/components/TextInputField"; diff --git a/src/modules/ModuleFactory.ts b/src/modules/ModuleFactory.ts index 947c14cb0..42d5c0f4a 100644 --- a/src/modules/ModuleFactory.ts +++ b/src/modules/ModuleFactory.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RuntimeModule } from "@matrix-org/react-sdk-module-api/lib/RuntimeModule"; diff --git a/src/modules/ModuleRunner.ts b/src/modules/ModuleRunner.ts index 0c609f6f6..06a17b43b 100644 --- a/src/modules/ModuleRunner.ts +++ b/src/modules/ModuleRunner.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { safeSet } from "matrix-js-sdk/src/utils"; diff --git a/src/modules/ProxiedModuleApi.ts b/src/modules/ProxiedModuleApi.ts index 697d09a46..34735afe0 100644 --- a/src/modules/ProxiedModuleApi.ts +++ b/src/modules/ProxiedModuleApi.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ModuleApi } from "@matrix-org/react-sdk-module-api/lib/ModuleApi"; diff --git a/src/notifications/ContentRules.ts b/src/notifications/ContentRules.ts index feb848d63..0f0fcc21e 100644 --- a/src/notifications/ContentRules.ts +++ b/src/notifications/ContentRules.ts @@ -1,17 +1,9 @@ /* -Copyright 2016 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IAnnotatedPushRule, IPushRules, PushRuleKind, PushRuleSet } from "matrix-js-sdk/src/matrix"; diff --git a/src/notifications/NotificationUtils.ts b/src/notifications/NotificationUtils.ts index 696c79ded..37f58d839 100644 --- a/src/notifications/NotificationUtils.ts +++ b/src/notifications/NotificationUtils.ts @@ -1,17 +1,9 @@ /* -Copyright 2016 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { PushRuleAction, PushRuleActionName, TweakHighlight, TweakSound } from "matrix-js-sdk/src/matrix"; diff --git a/src/notifications/PushRuleVectorState.ts b/src/notifications/PushRuleVectorState.ts index 30061c1ae..1a6559df6 100644 --- a/src/notifications/PushRuleVectorState.ts +++ b/src/notifications/PushRuleVectorState.ts @@ -1,17 +1,9 @@ /* -Copyright 2016 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IPushRule, PushRuleAction } from "matrix-js-sdk/src/matrix"; diff --git a/src/notifications/StandardActions.ts b/src/notifications/StandardActions.ts index 79a35ce19..17d8454e3 100644 --- a/src/notifications/StandardActions.ts +++ b/src/notifications/StandardActions.ts @@ -1,18 +1,10 @@ /* -Copyright 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { PushRuleAction } from "matrix-js-sdk/src/matrix"; diff --git a/src/notifications/VectorPushRulesDefinitions.ts b/src/notifications/VectorPushRulesDefinitions.ts index 5eb4d6030..4149a8efb 100644 --- a/src/notifications/VectorPushRulesDefinitions.ts +++ b/src/notifications/VectorPushRulesDefinitions.ts @@ -1,17 +1,9 @@ /* -Copyright 2016 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IAnnotatedPushRule, PushRuleAction, RuleId } from "matrix-js-sdk/src/matrix"; diff --git a/src/notifications/index.ts b/src/notifications/index.ts index 96c176303..332c8ef69 100644 --- a/src/notifications/index.ts +++ b/src/notifications/index.ts @@ -1,18 +1,10 @@ /* -Copyright 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export * from "./NotificationUtils"; diff --git a/src/performance/entry-names.ts b/src/performance/entry-names.ts index c70600c02..331930cb1 100644 --- a/src/performance/entry-names.ts +++ b/src/performance/entry-names.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export enum PerformanceEntryNames { diff --git a/src/performance/index.ts b/src/performance/index.ts index 83bdd8828..4d26f02b2 100644 --- a/src/performance/index.ts +++ b/src/performance/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/phonenumber.ts b/src/phonenumber.ts index cc9263014..185287ff6 100644 --- a/src/phonenumber.ts +++ b/src/phonenumber.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ const PHONE_NUMBER_REGEXP = /^[0-9 -.]+$/; diff --git a/src/rageshake/rageshake.ts b/src/rageshake/rageshake.ts index 45a5a40c4..54cd514b9 100644 --- a/src/rageshake/rageshake.ts +++ b/src/rageshake/rageshake.ts @@ -1,19 +1,11 @@ /* -Copyright 2017 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2017 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // This module contains all the code needed to log the console, persist it to diff --git a/src/rageshake/submit-rageshake.ts b/src/rageshake/submit-rageshake.ts index 45293aecc..1444d8bbf 100644 --- a/src/rageshake/submit-rageshake.ts +++ b/src/rageshake/submit-rageshake.ts @@ -1,19 +1,11 @@ /* -Copyright 2017 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2017 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/resizer/distributors/collapse.ts b/src/resizer/distributors/collapse.ts index 6685efea9..172ece19c 100644 --- a/src/resizer/distributors/collapse.ts +++ b/src/resizer/distributors/collapse.ts @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2020 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { BaseDistributor } from "./fixed"; diff --git a/src/resizer/distributors/fixed.ts b/src/resizer/distributors/fixed.ts index 609b0fdbc..06535771f 100644 --- a/src/resizer/distributors/fixed.ts +++ b/src/resizer/distributors/fixed.ts @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2020 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import ResizeItem from "../item"; diff --git a/src/resizer/distributors/percentage.ts b/src/resizer/distributors/percentage.ts index 51dd9b6ec..3c487fcd0 100644 --- a/src/resizer/distributors/percentage.ts +++ b/src/resizer/distributors/percentage.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import Sizer from "../sizer"; diff --git a/src/resizer/index.ts b/src/resizer/index.ts index 313579542..11b810133 100644 --- a/src/resizer/index.ts +++ b/src/resizer/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export { default as FixedDistributor } from "./distributors/fixed"; diff --git a/src/resizer/item.ts b/src/resizer/item.ts index 3372f3ada..e715a1a25 100644 --- a/src/resizer/item.ts +++ b/src/resizer/item.ts @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2020 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import Resizer, { IConfig } from "./resizer"; diff --git a/src/resizer/resizer.ts b/src/resizer/resizer.ts index d78c30b44..1b24ee00e 100644 --- a/src/resizer/resizer.ts +++ b/src/resizer/resizer.ts @@ -1,17 +1,9 @@ /* -Copyright 2018 - 2020 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2018-2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { throttle } from "lodash"; diff --git a/src/resizer/sizer.ts b/src/resizer/sizer.ts index dcf20f928..046e13fd6 100644 --- a/src/resizer/sizer.ts +++ b/src/resizer/sizer.ts @@ -1,17 +1,9 @@ /* -Copyright 2018 - 2020 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2018-2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/sendTimePerformanceMetrics.ts b/src/sendTimePerformanceMetrics.ts index 7d813dc31..d5fc46241 100644 --- a/src/sendTimePerformanceMetrics.ts +++ b/src/sendTimePerformanceMetrics.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IContent, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/sentry.ts b/src/sentry.ts index 266064989..36c640ccd 100644 --- a/src/sentry.ts +++ b/src/sentry.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as Sentry from "@sentry/browser"; diff --git a/src/settings/SettingLevel.ts b/src/settings/SettingLevel.ts index 66d3834ac..88be8f381 100644 --- a/src/settings/SettingLevel.ts +++ b/src/settings/SettingLevel.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 5acdf5b4a..808ea2a9d 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -1,23 +1,17 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2018-2024 The Matrix.org Foundation C.I.C. Copyright 2017 Travis Ralston -Copyright 2018 - 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; +import { UNSTABLE_MSC4133_EXTENDED_PROFILES } from "matrix-js-sdk/src/matrix"; import { _t, _td, TranslationKey } from "../languageHandler"; +import DeviceIsolationModeController from "./controllers/DeviceIsolationModeController.ts"; import { NotificationBodyEnabledController, NotificationsEnabledController, @@ -279,14 +273,6 @@ export const SETTINGS: { [setting: string]: ISetting } = { supportedLevelsAreOrdered: true, default: false, }, - "feature_pinning": { - isFeature: true, - labsGroup: LabGroup.Messaging, - displayName: _td("labs|pinning"), - supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED, - supportedLevelsAreOrdered: true, - default: false, - }, "feature_wysiwyg_composer": { isFeature: true, labsGroup: LabGroup.Messaging, @@ -321,6 +307,16 @@ export const SETTINGS: { [setting: string]: ISetting } = { supportedLevelsAreOrdered: true, default: false, }, + "feature_exclude_insecure_devices": { + isFeature: true, + labsGroup: LabGroup.Encryption, + controller: new DeviceIsolationModeController(), + displayName: _td("labs|exclude_insecure_devices"), + description: _td("labs|exclude_insecure_devices_description"), + supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED, + supportedLevelsAreOrdered: true, + default: false, + }, "useOnlyCurrentProfiles": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, displayName: _td("settings|disable_historical_profile"), @@ -667,6 +663,24 @@ export const SETTINGS: { [setting: string]: ISetting } = { displayName: _td("settings|always_show_message_timestamps"), default: false, }, + "userTimezone": { + supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS, + displayName: _td("settings|preferences|user_timezone"), + default: "", + }, + "userTimezonePublish": { + // This is per-device so you can avoid having devices overwrite each other. + supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS, + displayName: _td("settings|preferences|publish_timezone"), + default: false, + controller: new ServerSupportUnstableFeatureController( + "userTimezonePublish", + defaultWatchManager, + [[UNSTABLE_MSC4133_EXTENDED_PROFILES]], + undefined, + _td("labs|extended_profiles_msc_support"), + ), + }, "autoplayGifs": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, displayName: _td("settings|autoplay_gifs"), @@ -883,6 +897,10 @@ export const SETTINGS: { [setting: string]: ISetting } = { supportedLevels: LEVELS_ACCOUNT_SETTINGS, default: null, }, + "Registration.mobileRegistrationHelper": { + supportedLevels: [SettingLevel.CONFIG], + default: false, + }, "autocompleteDelay": { supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG, default: 200, diff --git a/src/settings/SettingsStore.ts b/src/settings/SettingsStore.ts index a63958f59..45ba4e3db 100644 --- a/src/settings/SettingsStore.ts +++ b/src/settings/SettingsStore.ts @@ -1,18 +1,10 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/settings/UIFeature.ts b/src/settings/UIFeature.ts index a8d3f788e..238e8a233 100644 --- a/src/settings/UIFeature.ts +++ b/src/settings/UIFeature.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // see settings.md for documentation on conventions diff --git a/src/settings/WatchManager.ts b/src/settings/WatchManager.ts index a917d513b..52403136c 100644 --- a/src/settings/WatchManager.ts +++ b/src/settings/WatchManager.ts @@ -1,17 +1,8 @@ /* -Copyright 2019 New Vector Ltd. +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { SettingLevel } from "./SettingLevel"; diff --git a/src/settings/controllers/AnalyticsController.ts b/src/settings/controllers/AnalyticsController.ts index 5c127ed3b..9272753e5 100644 --- a/src/settings/controllers/AnalyticsController.ts +++ b/src/settings/controllers/AnalyticsController.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SettingController from "./SettingController"; diff --git a/src/settings/controllers/DeviceIsolationModeController.ts b/src/settings/controllers/DeviceIsolationModeController.ts new file mode 100644 index 000000000..fe932d0de --- /dev/null +++ b/src/settings/controllers/DeviceIsolationModeController.ts @@ -0,0 +1,39 @@ +/* +Copyright 2024 New Vector Ltd. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. +*/ + +import { AllDevicesIsolationMode, OnlySignedDevicesIsolationMode } from "matrix-js-sdk/src/crypto-api"; +import { MatrixClient } from "matrix-js-sdk/src/matrix"; + +import SettingController from "./SettingController"; +import { MatrixClientPeg } from "../../MatrixClientPeg"; +import { SettingLevel } from "../SettingLevel"; + +/** + * A controller for the "exclude_insecure_devices" setting, which will + * update the crypto stack's device isolation mode on change. + */ +export default class DeviceIsolationModeController extends SettingController { + public onChange(level: SettingLevel, roomId: string, newValue: any): void { + setDeviceIsolationMode(MatrixClientPeg.safeGet(), newValue); + } +} + +/** + * Set the crypto stack's device isolation mode based on the current value of the + * "exclude_insecure_devices" setting. + * + * @param client - MatrixClient to update to the new setting. + * @param settingValue - value of the "exclude_insecure_devices" setting. + */ +export function setDeviceIsolationMode(client: MatrixClient, settingValue: boolean): void { + client.getCrypto()?.setDeviceIsolationMode( + settingValue + ? new OnlySignedDevicesIsolationMode() + : // TODO: As part of https://github.com/element-hq/element-meta/issues/2492, we will change + // `errorOnVerifiedUserProblems` to `true`, but we need to have better UI in place before we can do so. + new AllDevicesIsolationMode(false), + ); +} diff --git a/src/settings/controllers/FontSizeController.ts b/src/settings/controllers/FontSizeController.ts index 83a2db198..d4b23b96c 100644 --- a/src/settings/controllers/FontSizeController.ts +++ b/src/settings/controllers/FontSizeController.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SettingController from "./SettingController"; diff --git a/src/settings/controllers/IncompatibleController.ts b/src/settings/controllers/IncompatibleController.ts index e69848733..3dcce19c8 100644 --- a/src/settings/controllers/IncompatibleController.ts +++ b/src/settings/controllers/IncompatibleController.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SettingController from "./SettingController"; diff --git a/src/settings/controllers/MatrixClientBackedController.ts b/src/settings/controllers/MatrixClientBackedController.ts index 1df6fc8d9..cf4036873 100644 --- a/src/settings/controllers/MatrixClientBackedController.ts +++ b/src/settings/controllers/MatrixClientBackedController.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/settings/controllers/NotificationControllers.ts b/src/settings/controllers/NotificationControllers.ts index 52b78a3a6..306736f40 100644 --- a/src/settings/controllers/NotificationControllers.ts +++ b/src/settings/controllers/NotificationControllers.ts @@ -1,18 +1,10 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/settings/controllers/ReducedMotionController.ts b/src/settings/controllers/ReducedMotionController.ts index c9f293fbd..11207fe30 100644 --- a/src/settings/controllers/ReducedMotionController.ts +++ b/src/settings/controllers/ReducedMotionController.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SettingController from "./SettingController"; diff --git a/src/settings/controllers/ReloadOnChangeController.ts b/src/settings/controllers/ReloadOnChangeController.ts index 4066d2f76..2e1bb15b7 100644 --- a/src/settings/controllers/ReloadOnChangeController.ts +++ b/src/settings/controllers/ReloadOnChangeController.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SettingController from "./SettingController"; diff --git a/src/settings/controllers/ServerSupportUnstableFeatureController.ts b/src/settings/controllers/ServerSupportUnstableFeatureController.ts index b6022afbb..75f20632b 100644 --- a/src/settings/controllers/ServerSupportUnstableFeatureController.ts +++ b/src/settings/controllers/ServerSupportUnstableFeatureController.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/settings/controllers/SettingController.ts b/src/settings/controllers/SettingController.ts index cff7ce660..63922f64a 100644 --- a/src/settings/controllers/SettingController.ts +++ b/src/settings/controllers/SettingController.ts @@ -1,18 +1,10 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { SettingLevel } from "../SettingLevel"; diff --git a/src/settings/controllers/SlidingSyncController.ts b/src/settings/controllers/SlidingSyncController.ts index 7d7ca7812..eccff0ab9 100644 --- a/src/settings/controllers/SlidingSyncController.ts +++ b/src/settings/controllers/SlidingSyncController.ts @@ -1,18 +1,10 @@ /* -Copyright 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. Copyright 2024 Ed Geraghty +Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SettingController from "./SettingController"; diff --git a/src/settings/controllers/SystemFontController.ts b/src/settings/controllers/SystemFontController.ts index b20789dda..d1cc107ca 100644 --- a/src/settings/controllers/SystemFontController.ts +++ b/src/settings/controllers/SystemFontController.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SettingController from "./SettingController"; diff --git a/src/settings/controllers/ThemeController.ts b/src/settings/controllers/ThemeController.ts index 9c7ce6cc7..69f091c43 100644 --- a/src/settings/controllers/ThemeController.ts +++ b/src/settings/controllers/ThemeController.ts @@ -1,18 +1,10 @@ /* -Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SettingController from "./SettingController"; diff --git a/src/settings/controllers/UIFeatureController.ts b/src/settings/controllers/UIFeatureController.ts index 6822d74c6..e6548909d 100644 --- a/src/settings/controllers/UIFeatureController.ts +++ b/src/settings/controllers/UIFeatureController.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SettingController from "./SettingController"; diff --git a/src/settings/enums/ImageSize.ts b/src/settings/enums/ImageSize.ts index 6c0549779..1ce293a53 100644 --- a/src/settings/enums/ImageSize.ts +++ b/src/settings/enums/ImageSize.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // For Large the image gets drawn as big as possible. diff --git a/src/settings/enums/Layout.ts b/src/settings/enums/Layout.ts index 1b64ceab1..9054dd558 100644 --- a/src/settings/enums/Layout.ts +++ b/src/settings/enums/Layout.ts @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner Copyright 2021 Quirin Götz -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* TODO: This should be later reworked into something more generic */ diff --git a/src/settings/enums/UseCase.tsx b/src/settings/enums/UseCase.tsx index be101b097..07b24f902 100644 --- a/src/settings/enums/UseCase.tsx +++ b/src/settings/enums/UseCase.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export enum UseCase { diff --git a/src/settings/handlers/AbstractLocalStorageSettingsHandler.ts b/src/settings/handlers/AbstractLocalStorageSettingsHandler.ts index fb640fe31..70cdedffe 100644 --- a/src/settings/handlers/AbstractLocalStorageSettingsHandler.ts +++ b/src/settings/handlers/AbstractLocalStorageSettingsHandler.ts @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SettingsHandler from "./SettingsHandler"; diff --git a/src/settings/handlers/AccountSettingsHandler.ts b/src/settings/handlers/AccountSettingsHandler.ts index 639bef628..051e6fc7a 100644 --- a/src/settings/handlers/AccountSettingsHandler.ts +++ b/src/settings/handlers/AccountSettingsHandler.ts @@ -1,18 +1,10 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ClientEvent, MatrixClient, MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/settings/handlers/ConfigSettingsHandler.ts b/src/settings/handlers/ConfigSettingsHandler.ts index 24d635528..06e694bc3 100644 --- a/src/settings/handlers/ConfigSettingsHandler.ts +++ b/src/settings/handlers/ConfigSettingsHandler.ts @@ -1,18 +1,10 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { isNullOrUndefined } from "matrix-js-sdk/src/utils"; diff --git a/src/settings/handlers/DefaultSettingsHandler.ts b/src/settings/handlers/DefaultSettingsHandler.ts index fe8dcb36d..758a8c0c0 100644 --- a/src/settings/handlers/DefaultSettingsHandler.ts +++ b/src/settings/handlers/DefaultSettingsHandler.ts @@ -1,18 +1,10 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SettingsHandler from "./SettingsHandler"; diff --git a/src/settings/handlers/DeviceSettingsHandler.ts b/src/settings/handlers/DeviceSettingsHandler.ts index 0423ba72d..0fe5ef741 100644 --- a/src/settings/handlers/DeviceSettingsHandler.ts +++ b/src/settings/handlers/DeviceSettingsHandler.ts @@ -1,19 +1,11 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. Copyright 2019 New Vector Ltd. -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2017 Travis Ralston -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { SettingLevel } from "../SettingLevel"; diff --git a/src/settings/handlers/LocalEchoWrapper.ts b/src/settings/handlers/LocalEchoWrapper.ts index 39724e5bc..93266d358 100644 --- a/src/settings/handlers/LocalEchoWrapper.ts +++ b/src/settings/handlers/LocalEchoWrapper.ts @@ -1,18 +1,10 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SettingsHandler from "./SettingsHandler"; diff --git a/src/settings/handlers/MatrixClientBackedSettingsHandler.ts b/src/settings/handlers/MatrixClientBackedSettingsHandler.ts index 87e18a07b..86b3071a0 100644 --- a/src/settings/handlers/MatrixClientBackedSettingsHandler.ts +++ b/src/settings/handlers/MatrixClientBackedSettingsHandler.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/settings/handlers/PlatformSettingsHandler.ts b/src/settings/handlers/PlatformSettingsHandler.ts index e55c5b5c9..2ea350fdd 100644 --- a/src/settings/handlers/PlatformSettingsHandler.ts +++ b/src/settings/handlers/PlatformSettingsHandler.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SettingsHandler from "./SettingsHandler"; diff --git a/src/settings/handlers/RoomAccountSettingsHandler.ts b/src/settings/handlers/RoomAccountSettingsHandler.ts index 43c485901..7e7242b62 100644 --- a/src/settings/handlers/RoomAccountSettingsHandler.ts +++ b/src/settings/handlers/RoomAccountSettingsHandler.ts @@ -1,18 +1,10 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, MatrixEvent, Room, RoomEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/settings/handlers/RoomDeviceSettingsHandler.ts b/src/settings/handlers/RoomDeviceSettingsHandler.ts index 555bdbca4..6e4324fad 100644 --- a/src/settings/handlers/RoomDeviceSettingsHandler.ts +++ b/src/settings/handlers/RoomDeviceSettingsHandler.ts @@ -1,18 +1,10 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { safeSet } from "matrix-js-sdk/src/utils"; diff --git a/src/settings/handlers/RoomSettingsHandler.ts b/src/settings/handlers/RoomSettingsHandler.ts index 652c323a9..f831cf19e 100644 --- a/src/settings/handlers/RoomSettingsHandler.ts +++ b/src/settings/handlers/RoomSettingsHandler.ts @@ -1,18 +1,10 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, MatrixEvent, RoomState, RoomStateEvent, StateEvents } from "matrix-js-sdk/src/matrix"; diff --git a/src/settings/handlers/SettingsHandler.ts b/src/settings/handlers/SettingsHandler.ts index db0ec7d73..158e45847 100644 --- a/src/settings/handlers/SettingsHandler.ts +++ b/src/settings/handlers/SettingsHandler.ts @@ -1,18 +1,10 @@ /* -Copyright 2017 Travis Ralston +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { WatchManager } from "../WatchManager"; diff --git a/src/settings/watchers/FontWatcher.ts b/src/settings/watchers/FontWatcher.ts index df1a7ba49..0c7e59653 100644 --- a/src/settings/watchers/FontWatcher.ts +++ b/src/settings/watchers/FontWatcher.ts @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import dis from "../../dispatcher/dispatcher"; diff --git a/src/settings/watchers/ThemeWatcher.ts b/src/settings/watchers/ThemeWatcher.ts index 79a63f547..74a3158c6 100644 --- a/src/settings/watchers/ThemeWatcher.ts +++ b/src/settings/watchers/ThemeWatcher.ts @@ -1,18 +1,10 @@ /* -Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/settings/watchers/Watcher.ts b/src/settings/watchers/Watcher.ts index 031c2738f..9a5b37b3d 100644 --- a/src/settings/watchers/Watcher.ts +++ b/src/settings/watchers/Watcher.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export default interface IWatcher { diff --git a/src/shouldHideEvent.ts b/src/shouldHideEvent.ts index 0ee16009e..7948bfb9f 100644 --- a/src/shouldHideEvent.ts +++ b/src/shouldHideEvent.ts @@ -1,17 +1,9 @@ /* - Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. +Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, EventType, RelationType } from "matrix-js-sdk/src/matrix"; diff --git a/src/slash-commands/command.ts b/src/slash-commands/command.ts index 6b0d81e5f..22ab87589 100644 --- a/src/slash-commands/command.ts +++ b/src/slash-commands/command.ts @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. +Copyright 2020-2023 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2020, 2023 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/slash-commands/interface.ts b/src/slash-commands/interface.ts index 8efc2b3ce..43d3cc7e2 100644 --- a/src/slash-commands/interface.ts +++ b/src/slash-commands/interface.ts @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. +Copyright 2020-2023 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2020, 2023 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RoomMessageEventContent } from "matrix-js-sdk/src/types"; diff --git a/src/slash-commands/join.ts b/src/slash-commands/join.ts index e9ade2858..886e17e23 100644 --- a/src/slash-commands/join.ts +++ b/src/slash-commands/join.ts @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd -Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/slash-commands/op.ts b/src/slash-commands/op.ts index aa01d94cd..ff575575b 100644 --- a/src/slash-commands/op.ts +++ b/src/slash-commands/op.ts @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. +Copyright 2020-2023 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2020, 2023 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, Room, RoomMember } from "matrix-js-sdk/src/matrix"; diff --git a/src/slash-commands/utils.ts b/src/slash-commands/utils.ts index 122a90db1..073820364 100644 --- a/src/slash-commands/utils.ts +++ b/src/slash-commands/utils.ts @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd +Copyright 2024 New Vector Ltd. +Copyright 2020-2023 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Copyright 2020, 2023 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EventType, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/AccountPasswordStore.ts b/src/stores/AccountPasswordStore.ts index 7b7b5a85e..85bb7359e 100644 --- a/src/stores/AccountPasswordStore.ts +++ b/src/stores/AccountPasswordStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ const PASSWORD_TIMEOUT = 5 * 60 * 1000; // five minutes diff --git a/src/stores/ActiveWidgetStore.ts b/src/stores/ActiveWidgetStore.ts index 214f2aa67..c3db7888f 100644 --- a/src/stores/ActiveWidgetStore.ts +++ b/src/stores/ActiveWidgetStore.ts @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import EventEmitter from "events"; diff --git a/src/stores/AsyncStore.ts b/src/stores/AsyncStore.ts index 3a1e8c475..ddafb239e 100644 --- a/src/stores/AsyncStore.ts +++ b/src/stores/AsyncStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EventEmitter } from "events"; diff --git a/src/stores/AsyncStoreWithClient.ts b/src/stores/AsyncStoreWithClient.ts index a4c831139..7567eac9a 100644 --- a/src/stores/AsyncStoreWithClient.ts +++ b/src/stores/AsyncStoreWithClient.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/AutoRageshakeStore.ts b/src/stores/AutoRageshakeStore.ts index 7ac004520..284c3e24a 100644 --- a/src/stores/AutoRageshakeStore.ts +++ b/src/stores/AutoRageshakeStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/stores/BreadcrumbsStore.ts b/src/stores/BreadcrumbsStore.ts index 36bb0a78b..9859f2401 100644 --- a/src/stores/BreadcrumbsStore.ts +++ b/src/stores/BreadcrumbsStore.ts @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, RoomEvent, ClientEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/CallStore.ts b/src/stores/CallStore.ts index 4ec2d57e9..115a56ace 100644 --- a/src/stores/CallStore.ts +++ b/src/stores/CallStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/stores/LifecycleStore.ts b/src/stores/LifecycleStore.ts index d000289f3..a918814ab 100644 --- a/src/stores/LifecycleStore.ts +++ b/src/stores/LifecycleStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { SyncState } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/MemberListStore.ts b/src/stores/MemberListStore.ts index f9e1df79a..d6d53b7a0 100644 --- a/src/stores/MemberListStore.ts +++ b/src/stores/MemberListStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, RoomMember } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/ModalWidgetStore.ts b/src/stores/ModalWidgetStore.ts index b561e183f..59437db40 100644 --- a/src/stores/ModalWidgetStore.ts +++ b/src/stores/ModalWidgetStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IModalWidgetOpenRequestData, IModalWidgetReturnData, Widget } from "matrix-widget-api"; diff --git a/src/stores/NonUrgentToastStore.ts b/src/stores/NonUrgentToastStore.ts index a3fb56f09..fc05fb02c 100644 --- a/src/stores/NonUrgentToastStore.ts +++ b/src/stores/NonUrgentToastStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import EventEmitter from "events"; diff --git a/src/stores/OwnBeaconStore.ts b/src/stores/OwnBeaconStore.ts index 55399ef26..f60dae07f 100644 --- a/src/stores/OwnBeaconStore.ts +++ b/src/stores/OwnBeaconStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { debounce } from "lodash"; diff --git a/src/stores/OwnProfileStore.ts b/src/stores/OwnProfileStore.ts index a1eb590f3..be8c72aa2 100644 --- a/src/stores/OwnProfileStore.ts +++ b/src/stores/OwnProfileStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, RoomStateEvent, MatrixError, User, UserEvent, EventType } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/ReadyWatchingStore.ts b/src/stores/ReadyWatchingStore.ts index 19dee7223..a46a09899 100644 --- a/src/stores/ReadyWatchingStore.ts +++ b/src/stores/ReadyWatchingStore.ts @@ -1,17 +1,9 @@ /* - * Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. + * Copyright 2024 New Vector Ltd. + * Copyright 2021, 2022 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { MatrixClient, SyncState } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/ReleaseAnnouncementStore.ts b/src/stores/ReleaseAnnouncementStore.ts index 1fd338898..ba6a79fec 100644 --- a/src/stores/ReleaseAnnouncementStore.ts +++ b/src/stores/ReleaseAnnouncementStore.ts @@ -1,19 +1,9 @@ /* - * + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { TypedEventEmitter } from "matrix-js-sdk/src/matrix"; @@ -27,7 +17,7 @@ import { Features } from "../settings/Settings"; /** * The features are shown in the array order. */ -const FEATURES = ["threadsActivityCentre", "newRoomHeader"] as const; +const FEATURES = ["threadsActivityCentre", "pinningMessageList"] as const; /** * All the features that can be shown in the release announcements. */ diff --git a/src/stores/RoomScrollStateStore.ts b/src/stores/RoomScrollStateStore.ts index b394ed1b5..21ffb03be 100644 --- a/src/stores/RoomScrollStateStore.ts +++ b/src/stores/RoomScrollStateStore.ts @@ -1,17 +1,8 @@ /* -Copyright 2017 New Vector Ltd +Copyright 2017-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export interface ScrollState { diff --git a/src/stores/RoomViewStore.tsx b/src/stores/RoomViewStore.tsx index 29104354d..c5eeaed44 100644 --- a/src/stores/RoomViewStore.tsx +++ b/src/stores/RoomViewStore.tsx @@ -1,19 +1,11 @@ /* -Copyright 2017 Vector Creations Ltd +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. Copyright 2017, 2018 New Vector Ltd -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 +Copyright 2017 Vector Creations Ltd -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/stores/SetupEncryptionStore.ts b/src/stores/SetupEncryptionStore.ts index 62a3412d8..9f7fb9c85 100644 --- a/src/stores/SetupEncryptionStore.ts +++ b/src/stores/SetupEncryptionStore.ts @@ -1,17 +1,9 @@ /* -Copyright 2020, 2024 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020-2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import EventEmitter from "events"; diff --git a/src/stores/ThreepidInviteStore.ts b/src/stores/ThreepidInviteStore.ts index e97cb1437..23c6d450d 100644 --- a/src/stores/ThreepidInviteStore.ts +++ b/src/stores/ThreepidInviteStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import EventEmitter from "events"; diff --git a/src/stores/ToastStore.ts b/src/stores/ToastStore.ts index 138eb9f5f..e2f9a61f3 100644 --- a/src/stores/ToastStore.ts +++ b/src/stores/ToastStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import EventEmitter from "events"; diff --git a/src/stores/TypingStore.ts b/src/stores/TypingStore.ts index 8346d12a7..f836bda04 100644 --- a/src/stores/TypingStore.ts +++ b/src/stores/TypingStore.ts @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { SdkContextClass } from "../contexts/SDKContext"; diff --git a/src/stores/UIStore.ts b/src/stores/UIStore.ts index b1cdbae95..c058cda8a 100644 --- a/src/stores/UIStore.ts +++ b/src/stores/UIStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import EventEmitter from "events"; diff --git a/src/stores/UserProfilesStore.ts b/src/stores/UserProfilesStore.ts index 54623af11..cc122498d 100644 --- a/src/stores/UserProfilesStore.ts +++ b/src/stores/UserProfilesStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/stores/VoiceRecordingStore.ts b/src/stores/VoiceRecordingStore.ts index ebfd17996..7cbb8ac12 100644 --- a/src/stores/VoiceRecordingStore.ts +++ b/src/stores/VoiceRecordingStore.ts @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Optional } from "matrix-events-sdk"; diff --git a/src/stores/WidgetEchoStore.ts b/src/stores/WidgetEchoStore.ts index db5c9512f..255ce1932 100644 --- a/src/stores/WidgetEchoStore.ts +++ b/src/stores/WidgetEchoStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2018-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import EventEmitter from "events"; diff --git a/src/stores/WidgetStore.ts b/src/stores/WidgetStore.ts index 04c1c0c84..cfb92360a 100644 --- a/src/stores/WidgetStore.ts +++ b/src/stores/WidgetStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, RoomStateEvent, MatrixEvent, ClientEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/local-echo/EchoChamber.ts b/src/stores/local-echo/EchoChamber.ts index 9331e0c33..11292df9e 100644 --- a/src/stores/local-echo/EchoChamber.ts +++ b/src/stores/local-echo/EchoChamber.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/local-echo/EchoContext.ts b/src/stores/local-echo/EchoContext.ts index c368bfb8a..a51b5022a 100644 --- a/src/stores/local-echo/EchoContext.ts +++ b/src/stores/local-echo/EchoContext.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EchoTransaction, RunFn, TransactionStatus } from "./EchoTransaction"; diff --git a/src/stores/local-echo/EchoStore.ts b/src/stores/local-echo/EchoStore.ts index 74be64d12..956eacb92 100644 --- a/src/stores/local-echo/EchoStore.ts +++ b/src/stores/local-echo/EchoStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/local-echo/EchoTransaction.ts b/src/stores/local-echo/EchoTransaction.ts index bc5418eb2..0293c0d54 100644 --- a/src/stores/local-echo/EchoTransaction.ts +++ b/src/stores/local-echo/EchoTransaction.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Whenable } from "../../utils/Whenable"; diff --git a/src/stores/local-echo/GenericEchoChamber.ts b/src/stores/local-echo/GenericEchoChamber.ts index 1fa01d0f2..e287561fe 100644 --- a/src/stores/local-echo/GenericEchoChamber.ts +++ b/src/stores/local-echo/GenericEchoChamber.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/local-echo/RoomEchoChamber.ts b/src/stores/local-echo/RoomEchoChamber.ts index 1412a47cb..9298d5ffe 100644 --- a/src/stores/local-echo/RoomEchoChamber.ts +++ b/src/stores/local-echo/RoomEchoChamber.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, ClientEvent, MatrixClient, EventType } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/local-echo/RoomEchoContext.ts b/src/stores/local-echo/RoomEchoContext.ts index 5e176e405..20eb0cf65 100644 --- a/src/stores/local-echo/RoomEchoContext.ts +++ b/src/stores/local-echo/RoomEchoContext.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/notifications/ListNotificationState.ts b/src/stores/notifications/ListNotificationState.ts index 04dbf6ed8..77bd174f0 100644 --- a/src/stores/notifications/ListNotificationState.ts +++ b/src/stores/notifications/ListNotificationState.ts @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/notifications/NotificationLevel.ts b/src/stores/notifications/NotificationLevel.ts index 1d1e5843b..7b370ef65 100644 --- a/src/stores/notifications/NotificationLevel.ts +++ b/src/stores/notifications/NotificationLevel.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { _t } from "../../languageHandler"; diff --git a/src/stores/notifications/NotificationState.ts b/src/stores/notifications/NotificationState.ts index 79c0409e3..6f4044d57 100644 --- a/src/stores/notifications/NotificationState.ts +++ b/src/stores/notifications/NotificationState.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { TypedEventEmitter } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/notifications/RoomNotificationState.ts b/src/stores/notifications/RoomNotificationState.ts index 80ffbd03f..3a66a051a 100644 --- a/src/stores/notifications/RoomNotificationState.ts +++ b/src/stores/notifications/RoomNotificationState.ts @@ -1,17 +1,9 @@ /* -Copyright 2020, 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEventEvent, RoomEvent, ClientEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/notifications/RoomNotificationStateStore.ts b/src/stores/notifications/RoomNotificationStateStore.ts index 502d2dcce..87fb276c1 100644 --- a/src/stores/notifications/RoomNotificationStateStore.ts +++ b/src/stores/notifications/RoomNotificationStateStore.ts @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, ClientEvent, SyncState } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/notifications/SpaceNotificationState.ts b/src/stores/notifications/SpaceNotificationState.ts index e5054bf59..ead72d15b 100644 --- a/src/stores/notifications/SpaceNotificationState.ts +++ b/src/stores/notifications/SpaceNotificationState.ts @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/notifications/StaticNotificationState.ts b/src/stores/notifications/StaticNotificationState.ts index 7ad33cbd4..b554d0483 100644 --- a/src/stores/notifications/StaticNotificationState.ts +++ b/src/stores/notifications/StaticNotificationState.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { NotificationLevel } from "./NotificationLevel"; diff --git a/src/stores/notifications/SummarizedNotificationState.ts b/src/stores/notifications/SummarizedNotificationState.ts index d03176728..e859fd607 100644 --- a/src/stores/notifications/SummarizedNotificationState.ts +++ b/src/stores/notifications/SummarizedNotificationState.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { NotificationLevel } from "./NotificationLevel"; diff --git a/src/stores/oidc/OidcClientStore.ts b/src/stores/oidc/OidcClientStore.ts index ffe697739..e0cc87023 100644 --- a/src/stores/oidc/OidcClientStore.ts +++ b/src/stores/oidc/OidcClientStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, discoverAndValidateOIDCIssuerWellKnown } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/right-panel/RightPanelStore.ts b/src/stores/right-panel/RightPanelStore.ts index 69ac46806..43a36e91b 100644 --- a/src/stores/right-panel/RightPanelStore.ts +++ b/src/stores/right-panel/RightPanelStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; @@ -236,23 +228,6 @@ export default class RightPanelStore extends ReadyWatchingStore { } } - /** - * If the right panel is open, it is closed. - * If the right panel is closed, it is opened with `phase`. - * - * This is different from showOrHidePhase which only closes the panel - * if the panel was already showing the phase passed as argument. - * @see showOrHidePhase - * @param phase The right panel phase. - */ - public showOrHidePanel(phase: RightPanelPhases): void { - if (!this.isOpen) { - this.setCard({ phase }); - } else { - this.togglePanel(null); - } - } - /** * Helper to show a right panel phase. * If the UI is already showing that phase, the right panel will be hidden. diff --git a/src/stores/right-panel/RightPanelStoreIPanelState.ts b/src/stores/right-panel/RightPanelStoreIPanelState.ts index eeb986295..deffe045e 100644 --- a/src/stores/right-panel/RightPanelStoreIPanelState.ts +++ b/src/stores/right-panel/RightPanelStoreIPanelState.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, Room, RoomMember, User } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/right-panel/RightPanelStorePhases.ts b/src/stores/right-panel/RightPanelStorePhases.ts index 4cae67683..60b9e50ba 100644 --- a/src/stores/right-panel/RightPanelStorePhases.ts +++ b/src/stores/right-panel/RightPanelStorePhases.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { _t } from "../../languageHandler"; diff --git a/src/stores/right-panel/action-handlers/View3pidInvite.ts b/src/stores/right-panel/action-handlers/View3pidInvite.ts index e1d516de7..e2aa191ac 100644 --- a/src/stores/right-panel/action-handlers/View3pidInvite.ts +++ b/src/stores/right-panel/action-handlers/View3pidInvite.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ActionPayload } from "../../../dispatcher/payloads"; diff --git a/src/stores/right-panel/action-handlers/index.ts b/src/stores/right-panel/action-handlers/index.ts index e5521522c..287d3a932 100644 --- a/src/stores/right-panel/action-handlers/index.ts +++ b/src/stores/right-panel/action-handlers/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export * from "./View3pidInvite"; diff --git a/src/stores/room-list/Interface.ts b/src/stores/room-list/Interface.ts index 79582eeca..bba230f7d 100644 --- a/src/stores/room-list/Interface.ts +++ b/src/stores/room-list/Interface.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts index afc93f3b0..ff60309e0 100644 --- a/src/stores/room-list/ListLayout.ts +++ b/src/stores/room-list/ListLayout.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { TagID } from "./models"; diff --git a/src/stores/room-list/MessagePreviewStore.ts b/src/stores/room-list/MessagePreviewStore.ts index a3c44084d..e0e06ec98 100644 --- a/src/stores/room-list/MessagePreviewStore.ts +++ b/src/stores/room-list/MessagePreviewStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, RelationType, MatrixEvent, Thread, M_POLL_START, RoomEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/RoomListLayoutStore.ts b/src/stores/room-list/RoomListLayoutStore.ts index ce8bcf836..ea8586055 100644 --- a/src/stores/room-list/RoomListLayoutStore.ts +++ b/src/stores/room-list/RoomListLayoutStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/stores/room-list/RoomListStore.ts b/src/stores/room-list/RoomListStore.ts index 7dcb28c32..53377e0a0 100644 --- a/src/stores/room-list/RoomListStore.ts +++ b/src/stores/room-list/RoomListStore.ts @@ -1,17 +1,9 @@ /* -Copyright 2018 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2018-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, Room, RoomState, EventType } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/SlidingRoomListStore.ts b/src/stores/room-list/SlidingRoomListStore.ts index 5218881c2..26d329162 100644 --- a/src/stores/room-list/SlidingRoomListStore.ts +++ b/src/stores/room-list/SlidingRoomListStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/SpaceWatcher.ts b/src/stores/room-list/SpaceWatcher.ts index aa640c409..c3fa57f70 100644 --- a/src/stores/room-list/SpaceWatcher.ts +++ b/src/stores/room-list/SpaceWatcher.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RoomListStore as Interface } from "./Interface"; diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts index 6e28eb1a4..c3450d70c 100644 --- a/src/stores/room-list/algorithms/Algorithm.ts +++ b/src/stores/room-list/algorithms/Algorithm.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { JoinRule, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts index 09cb1d16d..829251a24 100644 --- a/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/ImportanceAlgorithm.ts @@ -1,18 +1,10 @@ /* -Copyright 2018, 2019 New Vector Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2018, 2019 New Vector Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts index 23768a243..e6d743605 100644 --- a/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/NaturalAlgorithm.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/algorithms/list-ordering/OrderingAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/OrderingAlgorithm.ts index 1b6472a01..67ee1ca08 100644 --- a/src/stores/room-list/algorithms/list-ordering/OrderingAlgorithm.ts +++ b/src/stores/room-list/algorithms/list-ordering/OrderingAlgorithm.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/algorithms/list-ordering/index.ts b/src/stores/room-list/algorithms/list-ordering/index.ts index c002dac42..7bd8441d9 100644 --- a/src/stores/room-list/algorithms/list-ordering/index.ts +++ b/src/stores/room-list/algorithms/list-ordering/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ImportanceAlgorithm } from "./ImportanceAlgorithm"; diff --git a/src/stores/room-list/algorithms/models.ts b/src/stores/room-list/algorithms/models.ts index 33584d8c9..9c14e29c3 100644 --- a/src/stores/room-list/algorithms/models.ts +++ b/src/stores/room-list/algorithms/models.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/algorithms/tag-sorting/AlphabeticAlgorithm.ts b/src/stores/room-list/algorithms/tag-sorting/AlphabeticAlgorithm.ts index 4421c23c6..17fecee26 100644 --- a/src/stores/room-list/algorithms/tag-sorting/AlphabeticAlgorithm.ts +++ b/src/stores/room-list/algorithms/tag-sorting/AlphabeticAlgorithm.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/algorithms/tag-sorting/IAlgorithm.ts b/src/stores/room-list/algorithms/tag-sorting/IAlgorithm.ts index 587519dbe..4aec90392 100644 --- a/src/stores/room-list/algorithms/tag-sorting/IAlgorithm.ts +++ b/src/stores/room-list/algorithms/tag-sorting/IAlgorithm.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/algorithms/tag-sorting/ManualAlgorithm.ts b/src/stores/room-list/algorithms/tag-sorting/ManualAlgorithm.ts index 2fa2f543f..41a4422e0 100644 --- a/src/stores/room-list/algorithms/tag-sorting/ManualAlgorithm.ts +++ b/src/stores/room-list/algorithms/tag-sorting/ManualAlgorithm.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/algorithms/tag-sorting/RecentAlgorithm.ts b/src/stores/room-list/algorithms/tag-sorting/RecentAlgorithm.ts index 5b239a694..d30703d28 100644 --- a/src/stores/room-list/algorithms/tag-sorting/RecentAlgorithm.ts +++ b/src/stores/room-list/algorithms/tag-sorting/RecentAlgorithm.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, MatrixEvent, EventType } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/algorithms/tag-sorting/index.ts b/src/stores/room-list/algorithms/tag-sorting/index.ts index 23c70a12a..2536dbb41 100644 --- a/src/stores/room-list/algorithms/tag-sorting/index.ts +++ b/src/stores/room-list/algorithms/tag-sorting/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/filters/IFilterCondition.ts b/src/stores/room-list/filters/IFilterCondition.ts index 4684cb9b8..9600ed73f 100644 --- a/src/stores/room-list/filters/IFilterCondition.ts +++ b/src/stores/room-list/filters/IFilterCondition.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/filters/SpaceFilterCondition.ts b/src/stores/room-list/filters/SpaceFilterCondition.ts index f24828613..8f652a35f 100644 --- a/src/stores/room-list/filters/SpaceFilterCondition.ts +++ b/src/stores/room-list/filters/SpaceFilterCondition.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EventEmitter } from "events"; diff --git a/src/stores/room-list/filters/VisibilityProvider.ts b/src/stores/room-list/filters/VisibilityProvider.ts index b263db218..bf8c515fc 100644 --- a/src/stores/room-list/filters/VisibilityProvider.ts +++ b/src/stores/room-list/filters/VisibilityProvider.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2020 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/models.ts b/src/stores/room-list/models.ts index d8b048884..50cecda66 100644 --- a/src/stores/room-list/models.ts +++ b/src/stores/room-list/models.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export enum DefaultTagID { diff --git a/src/stores/room-list/previews/IPreview.ts b/src/stores/room-list/previews/IPreview.ts index dcb10d68b..b737044f6 100644 --- a/src/stores/room-list/previews/IPreview.ts +++ b/src/stores/room-list/previews/IPreview.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/previews/LegacyCallAnswerEventPreview.ts b/src/stores/room-list/previews/LegacyCallAnswerEventPreview.ts index 1e5708c82..54c46e554 100644 --- a/src/stores/room-list/previews/LegacyCallAnswerEventPreview.ts +++ b/src/stores/room-list/previews/LegacyCallAnswerEventPreview.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/previews/LegacyCallHangupEvent.ts b/src/stores/room-list/previews/LegacyCallHangupEvent.ts index 0ab5fadcd..b213160b6 100644 --- a/src/stores/room-list/previews/LegacyCallHangupEvent.ts +++ b/src/stores/room-list/previews/LegacyCallHangupEvent.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/previews/LegacyCallInviteEventPreview.ts b/src/stores/room-list/previews/LegacyCallInviteEventPreview.ts index 756101026..1b9f33b5b 100644 --- a/src/stores/room-list/previews/LegacyCallInviteEventPreview.ts +++ b/src/stores/room-list/previews/LegacyCallInviteEventPreview.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/previews/MessageEventPreview.ts b/src/stores/room-list/previews/MessageEventPreview.ts index 50a9b7888..2873320cf 100644 --- a/src/stores/room-list/previews/MessageEventPreview.ts +++ b/src/stores/room-list/previews/MessageEventPreview.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, MsgType, RelationType } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/previews/PollStartEventPreview.ts b/src/stores/room-list/previews/PollStartEventPreview.ts index 728256101..bb005f4a9 100644 --- a/src/stores/room-list/previews/PollStartEventPreview.ts +++ b/src/stores/room-list/previews/PollStartEventPreview.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, PollStartEventContent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/previews/ReactionEventPreview.ts b/src/stores/room-list/previews/ReactionEventPreview.ts index d625d5fb3..0aa0cdcd4 100644 --- a/src/stores/room-list/previews/ReactionEventPreview.ts +++ b/src/stores/room-list/previews/ReactionEventPreview.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/previews/StickerEventPreview.ts b/src/stores/room-list/previews/StickerEventPreview.ts index 94b12344b..33bf1e6f6 100644 --- a/src/stores/room-list/previews/StickerEventPreview.ts +++ b/src/stores/room-list/previews/StickerEventPreview.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/previews/VoiceBroadcastPreview.ts b/src/stores/room-list/previews/VoiceBroadcastPreview.ts index e0030b2ee..94116692a 100644 --- a/src/stores/room-list/previews/VoiceBroadcastPreview.ts +++ b/src/stores/room-list/previews/VoiceBroadcastPreview.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/previews/utils.ts b/src/stores/room-list/previews/utils.ts index 8e7462aff..7857ad75a 100644 --- a/src/stores/room-list/previews/utils.ts +++ b/src/stores/room-list/previews/utils.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/room-list/utils/roomMute.ts b/src/stores/room-list/utils/roomMute.ts index d5b1c3520..9269cd146 100644 --- a/src/stores/room-list/utils/roomMute.ts +++ b/src/stores/room-list/utils/roomMute.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, EventType, IPushRules } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/spaces/SpaceStore.ts b/src/stores/spaces/SpaceStore.ts index 966b564d6..90358f331 100644 --- a/src/stores/spaces/SpaceStore.ts +++ b/src/stores/spaces/SpaceStore.ts @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ListIteratee, Many, sortBy } from "lodash"; diff --git a/src/stores/spaces/SpaceTreeLevelLayoutStore.ts b/src/stores/spaces/SpaceTreeLevelLayoutStore.ts index ced6ea5a7..59385a92e 100644 --- a/src/stores/spaces/SpaceTreeLevelLayoutStore.ts +++ b/src/stores/spaces/SpaceTreeLevelLayoutStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ const getSpaceCollapsedKey = (roomId: string, parents?: Set): string => { diff --git a/src/stores/spaces/flattenSpaceHierarchy.ts b/src/stores/spaces/flattenSpaceHierarchy.ts index 758681a60..2a3356a7c 100644 --- a/src/stores/spaces/flattenSpaceHierarchy.ts +++ b/src/stores/spaces/flattenSpaceHierarchy.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { SpaceKey } from "."; diff --git a/src/stores/spaces/index.ts b/src/stores/spaces/index.ts index c1d9e8160..b63e8e7dc 100644 --- a/src/stores/spaces/index.ts +++ b/src/stores/spaces/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, HierarchyRoom } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/widgets/ElementWidgetActions.ts b/src/stores/widgets/ElementWidgetActions.ts index 593f18184..ac1cee00e 100644 --- a/src/stores/widgets/ElementWidgetActions.ts +++ b/src/stores/widgets/ElementWidgetActions.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2020-2022 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { IWidgetApiRequest } from "matrix-widget-api"; diff --git a/src/stores/widgets/ElementWidgetCapabilities.ts b/src/stores/widgets/ElementWidgetCapabilities.ts index fd6653294..c5db7f777 100644 --- a/src/stores/widgets/ElementWidgetCapabilities.ts +++ b/src/stores/widgets/ElementWidgetCapabilities.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2020 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ export enum ElementWidgetCapabilities { diff --git a/src/stores/widgets/StopGapWidget.ts b/src/stores/widgets/StopGapWidget.ts index b08190cd9..e5c46e6a6 100644 --- a/src/stores/widgets/StopGapWidget.ts +++ b/src/stores/widgets/StopGapWidget.ts @@ -1,17 +1,9 @@ /* - * Copyright 2020 - 2022 The Matrix.org Foundation C.I.C. + * Copyright 2024 New Vector Ltd. + * Copyright 2020-2022 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { Room, MatrixEvent, MatrixEventEvent, MatrixClient, ClientEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/widgets/StopGapWidgetDriver.ts b/src/stores/widgets/StopGapWidgetDriver.ts index 6bb3e887d..88e79d97f 100644 --- a/src/stores/widgets/StopGapWidgetDriver.ts +++ b/src/stores/widgets/StopGapWidgetDriver.ts @@ -1,17 +1,9 @@ /* - * Copyright 2020 - 2023 The Matrix.org Foundation C.I.C. + * Copyright 2024 New Vector Ltd. + * Copyright 2020-2023 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { @@ -73,6 +65,7 @@ import { navigateToPermalink } from "../../utils/permalinks/navigator"; import { SdkContextClass } from "../../contexts/SDKContext"; import { ModuleRunner } from "../../modules/ModuleRunner"; import SettingsStore from "../../settings/SettingsStore"; +import { Media } from "../../customisations/Media"; // TODO: Purge this from the universe @@ -182,7 +175,7 @@ export class StopGapWidgetDriver extends WidgetDriver { WidgetEventCapability.forStateEvent(EventDirection.Receive, EventType.RoomCreate).raw, ); - const sendRecvRoomEvents = ["io.element.call.encryption_keys"]; + const sendRecvRoomEvents = ["io.element.call.encryption_keys", EventType.Reaction, EventType.RoomRedaction]; for (const eventType of sendRecvRoomEvents) { this.allowedCapabilities.add(WidgetEventCapability.forRoomEvent(EventDirection.Send, eventType).raw); this.allowedCapabilities.add(WidgetEventCapability.forRoomEvent(EventDirection.Receive, eventType).raw); @@ -679,4 +672,18 @@ export class StopGapWidgetDriver extends WidgetDriver { return { contentUri: uploadResult.content_uri }; } + + /** + * Download a file from the media repository on the homeserver. + * + * @param contentUri - the MXC URI of the file to download + * @returns an object with: file - response contents as Blob + */ + public async downloadFile(contentUri: string): Promise<{ file: XMLHttpRequestBodyInit }> { + const client = MatrixClientPeg.safeGet(); + const media = new Media({ mxc: contentUri }, client); + const response = await media.downloadSource(); + const blob = await response.blob(); + return { file: blob }; + } } diff --git a/src/stores/widgets/WidgetLayoutStore.ts b/src/stores/widgets/WidgetLayoutStore.ts index 6b5766ebc..cefbee0f6 100644 --- a/src/stores/widgets/WidgetLayoutStore.ts +++ b/src/stores/widgets/WidgetLayoutStore.ts @@ -1,17 +1,9 @@ /* - * Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. + * Copyright 2024 New Vector Ltd. + * Copyright 2021, 2022 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { Room, RoomStateEvent, MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/stores/widgets/WidgetMessagingStore.ts b/src/stores/widgets/WidgetMessagingStore.ts index b269a6f75..0388aeacb 100644 --- a/src/stores/widgets/WidgetMessagingStore.ts +++ b/src/stores/widgets/WidgetMessagingStore.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2020 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { ClientWidgetApi, Widget } from "matrix-widget-api"; diff --git a/src/stores/widgets/WidgetPermissionStore.ts b/src/stores/widgets/WidgetPermissionStore.ts index b6ea52c16..ecae4f9c0 100644 --- a/src/stores/widgets/WidgetPermissionStore.ts +++ b/src/stores/widgets/WidgetPermissionStore.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2020 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { Widget, WidgetKind } from "matrix-widget-api"; diff --git a/src/stores/widgets/types.ts b/src/stores/widgets/types.ts index 36d5d8647..5627731c7 100644 --- a/src/stores/widgets/types.ts +++ b/src/stores/widgets/types.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export interface IStoredLayout { diff --git a/src/theme.ts b/src/theme.ts index 9cff3f95b..c0fb08715 100644 --- a/src/theme.ts +++ b/src/theme.ts @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/toasts/AnalyticsToast.tsx b/src/toasts/AnalyticsToast.tsx index b1eadd963..c9cd218b4 100644 --- a/src/toasts/AnalyticsToast.tsx +++ b/src/toasts/AnalyticsToast.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/toasts/BulkUnverifiedSessionsToast.ts b/src/toasts/BulkUnverifiedSessionsToast.ts index 878ce7b30..944ca9b72 100644 --- a/src/toasts/BulkUnverifiedSessionsToast.ts +++ b/src/toasts/BulkUnverifiedSessionsToast.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { _t } from "../languageHandler"; diff --git a/src/toasts/DesktopNotificationsToast.ts b/src/toasts/DesktopNotificationsToast.ts index 676d79842..ee801bdad 100644 --- a/src/toasts/DesktopNotificationsToast.ts +++ b/src/toasts/DesktopNotificationsToast.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { _t } from "../languageHandler"; diff --git a/src/toasts/IncomingCallToast.tsx b/src/toasts/IncomingCallToast.tsx index d42042c1c..03b8f0c22 100644 --- a/src/toasts/IncomingCallToast.tsx +++ b/src/toasts/IncomingCallToast.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useCallback, useEffect, useState } from "react"; diff --git a/src/toasts/IncomingLegacyCallToast.tsx b/src/toasts/IncomingLegacyCallToast.tsx index 8b5109626..2610477b0 100644 --- a/src/toasts/IncomingLegacyCallToast.tsx +++ b/src/toasts/IncomingLegacyCallToast.tsx @@ -1,20 +1,12 @@ /* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd -Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner +Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd +Copyright 2015, 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/toasts/MobileGuideToast.ts b/src/toasts/MobileGuideToast.ts index 5d4ecd2bb..5b8a617ac 100644 --- a/src/toasts/MobileGuideToast.ts +++ b/src/toasts/MobileGuideToast.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { _t } from "../languageHandler"; diff --git a/src/toasts/ServerLimitToast.tsx b/src/toasts/ServerLimitToast.tsx index a2ea19217..f2ce2fb05 100644 --- a/src/toasts/ServerLimitToast.tsx +++ b/src/toasts/ServerLimitToast.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/toasts/SetupEncryptionToast.ts b/src/toasts/SetupEncryptionToast.ts index 900962df3..58de6ae86 100644 --- a/src/toasts/SetupEncryptionToast.ts +++ b/src/toasts/SetupEncryptionToast.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import Modal from "../Modal"; diff --git a/src/toasts/UnverifiedSessionToast.tsx b/src/toasts/UnverifiedSessionToast.tsx index a934ae9bd..b7eb963de 100644 --- a/src/toasts/UnverifiedSessionToast.tsx +++ b/src/toasts/UnverifiedSessionToast.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/toasts/UpdateToast.tsx b/src/toasts/UpdateToast.tsx index 5e08fb56a..a0ee6b808 100644 --- a/src/toasts/UpdateToast.tsx +++ b/src/toasts/UpdateToast.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/usercontent/index.ts b/src/usercontent/index.ts index db710358c..666254d2a 100644 --- a/src/usercontent/index.ts +++ b/src/usercontent/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ let hasCalled = false; diff --git a/src/utils/AnimationUtils.ts b/src/utils/AnimationUtils.ts index f81e2e4c4..31bd9d184 100644 --- a/src/utils/AnimationUtils.ts +++ b/src/utils/AnimationUtils.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { clamp } from "lodash"; diff --git a/src/utils/AutoDiscoveryUtils.tsx b/src/utils/AutoDiscoveryUtils.tsx index fb25870c3..61e2f84f4 100644 --- a/src/utils/AutoDiscoveryUtils.tsx +++ b/src/utils/AutoDiscoveryUtils.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/utils/BrowserWorkarounds.ts b/src/utils/BrowserWorkarounds.ts index d241af373..77127183d 100644 --- a/src/utils/BrowserWorkarounds.ts +++ b/src/utils/BrowserWorkarounds.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MouseEvent } from "react"; diff --git a/src/utils/DMRoomMap.ts b/src/utils/DMRoomMap.ts index cdabb50ec..0b595b54d 100644 --- a/src/utils/DMRoomMap.ts +++ b/src/utils/DMRoomMap.ts @@ -1,17 +1,9 @@ /* -Copyright 2016, 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2019 , 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { uniq } from "lodash"; diff --git a/src/utils/DecryptFile.ts b/src/utils/DecryptFile.ts index c72f57589..acf5f551e 100644 --- a/src/utils/DecryptFile.ts +++ b/src/utils/DecryptFile.ts @@ -1,17 +1,9 @@ /* -Copyright 2016, 2018, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2018 , 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // Pull in the encryption lib so that we can decrypt attachments. diff --git a/src/utils/DialogOpener.ts b/src/utils/DialogOpener.ts index 1252fd65a..721f8d5c9 100644 --- a/src/utils/DialogOpener.ts +++ b/src/utils/DialogOpener.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classnames from "classnames"; diff --git a/src/utils/DirectoryUtils.ts b/src/utils/DirectoryUtils.ts index 5ecc97a24..f074dc346 100644 --- a/src/utils/DirectoryUtils.ts +++ b/src/utils/DirectoryUtils.ts @@ -1,17 +1,9 @@ /* -Copyright 2018, 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2018-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IProtocol } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/EditorStateTransfer.ts b/src/utils/EditorStateTransfer.ts index 35d51b0eb..908da8b8a 100644 --- a/src/utils/EditorStateTransfer.ts +++ b/src/utils/EditorStateTransfer.ts @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/ErrorUtils.tsx b/src/utils/ErrorUtils.tsx index fdd420cb2..4bda496a0 100644 --- a/src/utils/ErrorUtils.tsx +++ b/src/utils/ErrorUtils.tsx @@ -1,17 +1,9 @@ /* -Copyright 2018 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2018-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/utils/EventRenderingUtils.ts b/src/utils/EventRenderingUtils.ts index 8fad898be..099bf768d 100644 --- a/src/utils/EventRenderingUtils.ts +++ b/src/utils/EventRenderingUtils.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/utils/EventUtils.ts b/src/utils/EventUtils.ts index 373bcf49a..52a9652a6 100644 --- a/src/utils/EventUtils.ts +++ b/src/utils/EventUtils.ts @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { @@ -286,10 +278,6 @@ export function hasThreadSummary(event: MatrixEvent): boolean { return event.isThreadRoot && !!event.getThread()?.length && !!event.getThread()!.replyToEvent; } -export function canPinEvent(event: MatrixEvent): boolean { - return !M_BEACON_INFO.matches(event.getType()); -} - export const highlightEvent = (roomId: string, eventId: string): void => { defaultDispatcher.dispatch({ action: Action.ViewRoom, diff --git a/src/utils/Feedback.ts b/src/utils/Feedback.ts index 3d0c212ee..ac2193497 100644 --- a/src/utils/Feedback.ts +++ b/src/utils/Feedback.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SdkConfig from "../SdkConfig"; diff --git a/src/utils/FileDownloader.ts b/src/utils/FileDownloader.ts index 39a9a5cd0..19a159642 100644 --- a/src/utils/FileDownloader.ts +++ b/src/utils/FileDownloader.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export type GetIframeFn = () => HTMLIFrameElement | null; diff --git a/src/utils/FileUtils.ts b/src/utils/FileUtils.ts index 75511756f..194cb31d2 100644 --- a/src/utils/FileUtils.ts +++ b/src/utils/FileUtils.ts @@ -1,18 +1,10 @@ /* -Copyright 2015 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner +Copyright 2015-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/utils/FixedRollingArray.ts b/src/utils/FixedRollingArray.ts index 376120532..aef4c3f3e 100644 --- a/src/utils/FixedRollingArray.ts +++ b/src/utils/FixedRollingArray.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { arrayFastClone, arraySeed } from "./arrays"; diff --git a/src/utils/FontManager.ts b/src/utils/FontManager.ts index 7190646f6..e74aa7833 100644 --- a/src/utils/FontManager.ts +++ b/src/utils/FontManager.ts @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* diff --git a/src/utils/FormattingUtils.ts b/src/utils/FormattingUtils.ts index 90e983ad1..d16ced944 100644 --- a/src/utils/FormattingUtils.ts +++ b/src/utils/FormattingUtils.ts @@ -1,18 +1,10 @@ /* -Copyright 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. +Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ReactElement, ReactNode } from "react"; diff --git a/src/utils/IDestroyable.ts b/src/utils/IDestroyable.ts index f58fffb29..6d9a8466f 100644 --- a/src/utils/IDestroyable.ts +++ b/src/utils/IDestroyable.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export interface IDestroyable { diff --git a/src/utils/IdentityServerUtils.ts b/src/utils/IdentityServerUtils.ts index c163d9209..6fb2a100e 100644 --- a/src/utils/IdentityServerUtils.ts +++ b/src/utils/IdentityServerUtils.ts @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { SERVICE_TYPES, HTTPError, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/Image.ts b/src/utils/Image.ts index 7bba81346..cb3b65169 100644 --- a/src/utils/Image.ts +++ b/src/utils/Image.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2022 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { arrayHasDiff } from "./arrays"; diff --git a/src/utils/JSON.ts b/src/utils/JSON.ts index fb00d7cd1..815e5c0cb 100644 --- a/src/utils/JSON.ts +++ b/src/utils/JSON.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ type StringifyReplacer = (this: any, key: string, value: any) => any; diff --git a/src/utils/KeyVerificationStateObserver.ts b/src/utils/KeyVerificationStateObserver.ts index 24ffd9a86..3dfc4f3a5 100644 --- a/src/utils/KeyVerificationStateObserver.ts +++ b/src/utils/KeyVerificationStateObserver.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/LazyValue.ts b/src/utils/LazyValue.ts index 2497a771d..5f2d97c0e 100644 --- a/src/utils/LazyValue.ts +++ b/src/utils/LazyValue.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/utils/LruCache.ts b/src/utils/LruCache.ts index af30818d4..d4ef27e6b 100644 --- a/src/utils/LruCache.ts +++ b/src/utils/LruCache.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/utils/MarkedExecution.ts b/src/utils/MarkedExecution.ts index 722f9e704..e20b66c97 100644 --- a/src/utils/MarkedExecution.ts +++ b/src/utils/MarkedExecution.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/utils/MatrixGlob.ts b/src/utils/MatrixGlob.ts index 0bf07fecd..415014729 100644 --- a/src/utils/MatrixGlob.ts +++ b/src/utils/MatrixGlob.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import globToRegexp from "glob-to-regexp"; diff --git a/src/utils/MediaEventHelper.ts b/src/utils/MediaEventHelper.ts index b9ceae9db..ecb1250e2 100644 --- a/src/utils/MediaEventHelper.ts +++ b/src/utils/MediaEventHelper.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, EventType, MsgType } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/MegolmExportEncryption.ts b/src/utils/MegolmExportEncryption.ts index fc0958c17..fab3c7f71 100644 --- a/src/utils/MegolmExportEncryption.ts +++ b/src/utils/MegolmExportEncryption.ts @@ -1,18 +1,10 @@ /* -Copyright 2017 Vector Creations Ltd +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. +Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/utils/MessageDiffUtils.tsx b/src/utils/MessageDiffUtils.tsx index 6cc6a59e7..ff30b12ca 100644 --- a/src/utils/MessageDiffUtils.tsx +++ b/src/utils/MessageDiffUtils.tsx @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021, 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 , 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/utils/Mouse.ts b/src/utils/Mouse.ts index a611b5967..a2716c68d 100644 --- a/src/utils/Mouse.ts +++ b/src/utils/Mouse.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/utils/MultiInviter.ts b/src/utils/MultiInviter.ts index 73d6b3e16..70914d030 100644 --- a/src/utils/MultiInviter.ts +++ b/src/utils/MultiInviter.ts @@ -1,17 +1,9 @@ /* -Copyright 2016 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2016-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixError, MatrixClient, EventType } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/NativeEventUtils.ts b/src/utils/NativeEventUtils.ts index 3ed637c74..768e1baa5 100644 --- a/src/utils/NativeEventUtils.ts +++ b/src/utils/NativeEventUtils.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/utils/PasswordScorer.ts b/src/utils/PasswordScorer.ts index ed69be527..7e68ccfa4 100644 --- a/src/utils/PasswordScorer.ts +++ b/src/utils/PasswordScorer.ts @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { zxcvbn, zxcvbnOptions, ZxcvbnResult, TranslationKeys } from "@zxcvbn-ts/core"; diff --git a/src/utils/PhasedRolloutFeature.ts b/src/utils/PhasedRolloutFeature.ts index c30539038..bf2c8ed81 100644 --- a/src/utils/PhasedRolloutFeature.ts +++ b/src/utils/PhasedRolloutFeature.ts @@ -1,17 +1,8 @@ /* -Copyright 2024 New Vector Ltd +Copyright 2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { xxHash32 } from "js-xxhash"; diff --git a/src/utils/PinningUtils.ts b/src/utils/PinningUtils.ts index f9750a3ed..806e59b01 100644 --- a/src/utils/PinningUtils.ts +++ b/src/utils/PinningUtils.ts @@ -1,41 +1,160 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Travis Ralston -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ -import { MatrixEvent, EventType, M_POLL_START } from "matrix-js-sdk/src/matrix"; +import { MatrixEvent, EventType, M_POLL_START, MatrixClient, EventTimeline, Room } from "matrix-js-sdk/src/matrix"; + +import { isContentActionable } from "./EventUtils"; +import { ReadPinsEventId } from "../components/views/right_panel/types"; export default class PinningUtils { /** * Event types that may be pinned. */ - public static pinnableEventTypes: (EventType | string)[] = [ + public static readonly PINNABLE_EVENT_TYPES: (EventType | string)[] = [ EventType.RoomMessage, M_POLL_START.name, M_POLL_START.altName, ]; /** - * Determines if the given event may be pinned. + * Determines if the given event can be pinned. + * This is a simple check to see if the event is of a type that can be pinned. * @param {MatrixEvent} event The event to check. * @return {boolean} True if the event may be pinned, false otherwise. */ public static isPinnable(event: MatrixEvent): boolean { - if (!event) return false; - if (!this.pinnableEventTypes.includes(event.getType())) return false; if (event.isRedacted()) return false; + return PinningUtils.isUnpinnable(event); + } + + /** + * Determines if the given event may be unpinned. + * @param {MatrixEvent} event The event to check. + * @return {boolean} True if the event may be unpinned, false otherwise. + */ + public static isUnpinnable(event: MatrixEvent): boolean { + if (!event) return false; + if (event.isRedacted()) return true; + return this.PINNABLE_EVENT_TYPES.includes(event.getType()); + } + + /** + * Determines if the given event is pinned. + * @param matrixClient + * @param mxEvent + */ + public static isPinned(matrixClient: MatrixClient, mxEvent: MatrixEvent): boolean { + const room = matrixClient.getRoom(mxEvent.getRoomId()); + if (!room) return false; + + const pinnedEvent = room + .getLiveTimeline() + .getState(EventTimeline.FORWARDS) + ?.getStateEvents(EventType.RoomPinnedEvents, ""); + if (!pinnedEvent) return false; + const content = pinnedEvent.getContent(); + return content.pinned && Array.isArray(content.pinned) && content.pinned.includes(mxEvent.getId()); + } + + /** + * Determines if the given event may be pinned or unpinned by the current user + * It doesn't check if the event is pinnable or unpinnable. + * @param matrixClient + * @param mxEvent + * @private + */ + private static canPinOrUnpin(matrixClient: MatrixClient, mxEvent: MatrixEvent): boolean { + if (!isContentActionable(mxEvent)) return false; + + const room = matrixClient.getRoom(mxEvent.getRoomId()); + if (!room) return false; + + return PinningUtils.userHasPinOrUnpinPermission(matrixClient, room); + } - return true; + /** + * Determines if the given event may be pinned by the current user. + * This checks if the user has the necessary permissions to pin or unpin the event, and if the event is pinnable. + * @param matrixClient + * @param mxEvent + */ + public static canPin(matrixClient: MatrixClient, mxEvent: MatrixEvent): boolean { + return PinningUtils.canPinOrUnpin(matrixClient, mxEvent) && PinningUtils.isPinnable(mxEvent); + } + + /** + * Determines if the given event may be unpinned by the current user. + * This checks if the user has the necessary permissions to pin or unpin the event, and if the event is unpinnable. + * @param matrixClient + * @param mxEvent + */ + public static canUnpin(matrixClient: MatrixClient, mxEvent: MatrixEvent): boolean { + return PinningUtils.canPinOrUnpin(matrixClient, mxEvent) && PinningUtils.isUnpinnable(mxEvent); + } + + /** + * Determines if the current user has permission to pin or unpin events in the given room. + * @param matrixClient + * @param room + */ + public static userHasPinOrUnpinPermission(matrixClient: MatrixClient, room: Room): boolean { + return Boolean( + room + .getLiveTimeline() + .getState(EventTimeline.FORWARDS) + ?.mayClientSendStateEvent(EventType.RoomPinnedEvents, matrixClient), + ); + } + + /** + * Pin or unpin the given event. + * @param matrixClient + * @param mxEvent + */ + public static async pinOrUnpinEvent(matrixClient: MatrixClient, mxEvent: MatrixEvent): Promise { + const room = matrixClient.getRoom(mxEvent.getRoomId()); + if (!room) return; + + const eventId = mxEvent.getId(); + if (!eventId) return; + + // Get the current pinned events of the room + const pinnedIds: Array = + room + .getLiveTimeline() + .getState(EventTimeline.FORWARDS) + ?.getStateEvents(EventType.RoomPinnedEvents, "") + ?.getContent().pinned || []; + + let roomAccountDataPromise: Promise<{} | void> = Promise.resolve(); + // If the event is already pinned, unpin it + if (pinnedIds.includes(eventId)) { + pinnedIds.splice(pinnedIds.indexOf(eventId), 1); + } else { + // Otherwise, pin it + pinnedIds.push(eventId); + // We don't want to wait for the roomAccountDataPromise to resolve before sending the state event + roomAccountDataPromise = matrixClient.setRoomAccountData(room.roomId, ReadPinsEventId, { + event_ids: [...(room.getAccountData(ReadPinsEventId)?.getContent()?.event_ids || []), eventId], + }); + } + await Promise.all([ + matrixClient.sendStateEvent(room.roomId, EventType.RoomPinnedEvents, { pinned: pinnedIds }, ""), + roomAccountDataPromise, + ]); + } + + /** + * Unpin all events in the given room. + * @param matrixClient + * @param roomId + */ + public static async unpinAllEvents(matrixClient: MatrixClient, roomId: string): Promise { + await matrixClient.sendStateEvent(roomId, EventType.RoomPinnedEvents, { pinned: [] }, ""); } } diff --git a/src/utils/PreferredRoomVersions.ts b/src/utils/PreferredRoomVersions.ts index 9d1e10417..d6b367700 100644 --- a/src/utils/PreferredRoomVersions.ts +++ b/src/utils/PreferredRoomVersions.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/utils/ReactUtils.tsx b/src/utils/ReactUtils.tsx index ac2564383..ee7469945 100644 --- a/src/utils/ReactUtils.tsx +++ b/src/utils/ReactUtils.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/utils/Reply.ts b/src/utils/Reply.ts index 3ecd89396..e693d16a4 100644 --- a/src/utils/Reply.ts +++ b/src/utils/Reply.ts @@ -1,18 +1,10 @@ /* - * Copyright 2021 Šimon Brandner + * Copyright 2024 New Vector Ltd. * Copyright 2023 The Matrix.org Foundation C.I.C. + * Copyright 2021 Šimon Brandner * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/utils/ResizeNotifier.ts b/src/utils/ResizeNotifier.ts index b544994ee..339c90b7e 100644 --- a/src/utils/ResizeNotifier.ts +++ b/src/utils/ResizeNotifier.ts @@ -1,17 +1,9 @@ /* -Copyright 2019 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/utils/RoomUpgrade.ts b/src/utils/RoomUpgrade.ts index 3696aa34c..18b136b70 100644 --- a/src/utils/RoomUpgrade.ts +++ b/src/utils/RoomUpgrade.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, EventType, ClientEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/SearchInput.ts b/src/utils/SearchInput.ts index 04b6d1bc4..a186ed3e2 100644 --- a/src/utils/SearchInput.ts +++ b/src/utils/SearchInput.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Boluwatife Omosowon -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { parsePermalink } from "./permalinks/Permalinks"; diff --git a/src/utils/SessionLock.ts b/src/utils/SessionLock.ts index 2c6872094..6a1c65584 100644 --- a/src/utils/SessionLock.ts +++ b/src/utils/SessionLock.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/utils/ShieldUtils.ts b/src/utils/ShieldUtils.ts index 5003083ee..2b50a93f4 100644 --- a/src/utils/ShieldUtils.ts +++ b/src/utils/ShieldUtils.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ClientStoppedError, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/Singleflight.ts b/src/utils/Singleflight.ts index 125d64344..153ced0cb 100644 --- a/src/utils/Singleflight.ts +++ b/src/utils/Singleflight.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EnhancedMap } from "./maps"; diff --git a/src/utils/SnakedObject.ts b/src/utils/SnakedObject.ts index 65e127eab..d5487a7b0 100644 --- a/src/utils/SnakedObject.ts +++ b/src/utils/SnakedObject.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export function snakeToCamel(s: string): string { diff --git a/src/utils/SortMembers.ts b/src/utils/SortMembers.ts index 413f7971b..f22c6e923 100644 --- a/src/utils/SortMembers.ts +++ b/src/utils/SortMembers.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { groupBy, mapValues, maxBy, minBy, sumBy, takeRight } from "lodash"; diff --git a/src/utils/StorageAccess.ts b/src/utils/StorageAccess.ts index 94d3a2d1c..ee5ddbc61 100644 --- a/src/utils/StorageAccess.ts +++ b/src/utils/StorageAccess.ts @@ -1,17 +1,9 @@ /* -Copyright 2019-2021, 2024 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 , 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/utils/StorageManager.ts b/src/utils/StorageManager.ts index 0cee3d9ef..d903283ac 100644 --- a/src/utils/StorageManager.ts +++ b/src/utils/StorageManager.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { LocalStorageCryptoStore, IndexedDBStore, IndexedDBCryptoStore } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/Timer.ts b/src/utils/Timer.ts index 8e1a875e7..7db0476f7 100644 --- a/src/utils/Timer.ts +++ b/src/utils/Timer.ts @@ -1,17 +1,9 @@ /* -Copyright 2018, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2018-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IDeferred, defer } from "matrix-js-sdk/src/utils"; diff --git a/src/utils/UrlUtils.ts b/src/utils/UrlUtils.ts index 13a993580..f76855f6e 100644 --- a/src/utils/UrlUtils.ts +++ b/src/utils/UrlUtils.ts @@ -1,17 +1,9 @@ /* -Copyright 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/utils/UserInteractiveAuth.ts b/src/utils/UserInteractiveAuth.ts index 04d48db29..96efc82f4 100644 --- a/src/utils/UserInteractiveAuth.ts +++ b/src/utils/UserInteractiveAuth.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { AuthDict } from "matrix-js-sdk/src/interactive-auth"; diff --git a/src/utils/ValidatedServerConfig.ts b/src/utils/ValidatedServerConfig.ts index cf49ebadd..c5ab3d914 100644 --- a/src/utils/ValidatedServerConfig.ts +++ b/src/utils/ValidatedServerConfig.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { OidcClientConfig } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/WellKnownUtils.ts b/src/utils/WellKnownUtils.ts index 94669ff3d..26bf6c287 100644 --- a/src/utils/WellKnownUtils.ts +++ b/src/utils/WellKnownUtils.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IClientWellKnown, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/Whenable.ts b/src/utils/Whenable.ts index 2e154fca6..51e4bfff4 100644 --- a/src/utils/Whenable.ts +++ b/src/utils/Whenable.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/utils/WidgetUtils.ts b/src/utils/WidgetUtils.ts index 40712f633..0ff3a89aa 100644 --- a/src/utils/WidgetUtils.ts +++ b/src/utils/WidgetUtils.ts @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2017-2020 The Matrix.org Foundation C.I.C. Copyright 2019 Travis Ralston -Copyright 2017 - 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useCallback, useEffect, useState } from "react"; diff --git a/src/utils/arrays.ts b/src/utils/arrays.ts index 5f7c301d5..99c69b989 100644 --- a/src/utils/arrays.ts +++ b/src/utils/arrays.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { percentageOf, percentageWithin } from "./numbers"; diff --git a/src/utils/beacon/bounds.ts b/src/utils/beacon/bounds.ts index 829f16d3c..7ce20182e 100644 --- a/src/utils/beacon/bounds.ts +++ b/src/utils/beacon/bounds.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Beacon } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/beacon/duration.ts b/src/utils/beacon/duration.ts index 9ccbdc7b6..2d5e4b522 100644 --- a/src/utils/beacon/duration.ts +++ b/src/utils/beacon/duration.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Beacon, ContentHelpers } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/beacon/geolocation.ts b/src/utils/beacon/geolocation.ts index 3b2d95bbd..f9d81c13c 100644 --- a/src/utils/beacon/geolocation.ts +++ b/src/utils/beacon/geolocation.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/utils/beacon/getShareableLocation.ts b/src/utils/beacon/getShareableLocation.ts index e6652187a..01162d739 100644 --- a/src/utils/beacon/getShareableLocation.ts +++ b/src/utils/beacon/getShareableLocation.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, MatrixEvent, getBeaconInfoIdentifier } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/beacon/index.ts b/src/utils/beacon/index.ts index 34be8c9f5..7d9563999 100644 --- a/src/utils/beacon/index.ts +++ b/src/utils/beacon/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export * from "./duration"; diff --git a/src/utils/beacon/timeline.ts b/src/utils/beacon/timeline.ts index 2c8d1e106..af8def8ac 100644 --- a/src/utils/beacon/timeline.ts +++ b/src/utils/beacon/timeline.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, M_BEACON_INFO } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/beacon/useBeacon.ts b/src/utils/beacon/useBeacon.ts index c664376a5..a6d6ea922 100644 --- a/src/utils/beacon/useBeacon.ts +++ b/src/utils/beacon/useBeacon.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useContext, useEffect, useState } from "react"; diff --git a/src/utils/beacon/useLiveBeacons.ts b/src/utils/beacon/useLiveBeacons.ts index 2e7884129..f465fd76d 100644 --- a/src/utils/beacon/useLiveBeacons.ts +++ b/src/utils/beacon/useLiveBeacons.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Beacon, Room, RoomStateEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/beacon/useOwnLiveBeacons.ts b/src/utils/beacon/useOwnLiveBeacons.ts index f20e446ae..ace906a27 100644 --- a/src/utils/beacon/useOwnLiveBeacons.ts +++ b/src/utils/beacon/useOwnLiveBeacons.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useEffect, useState } from "react"; diff --git a/src/utils/blobs.ts b/src/utils/blobs.ts index e1afe212a..112bbfbcb 100644 --- a/src/utils/blobs.ts +++ b/src/utils/blobs.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // WARNING: We have to be very careful about what mime-types we allow into blobs, diff --git a/src/utils/colour.ts b/src/utils/colour.ts index 8262718a3..a96b68e12 100644 --- a/src/utils/colour.ts +++ b/src/utils/colour.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { split } from "lodash"; diff --git a/src/utils/connection.ts b/src/utils/connection.ts index 584510a5b..c11d1def6 100644 --- a/src/utils/connection.ts +++ b/src/utils/connection.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ClientEvent, ClientEventHandlerMap, SyncState } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/createMatrixClient.ts b/src/utils/createMatrixClient.ts index cdc961642..6a4ef785f 100644 --- a/src/utils/createMatrixClient.ts +++ b/src/utils/createMatrixClient.ts @@ -1,17 +1,9 @@ /* -Copyright 2017 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2017-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, diff --git a/src/utils/createVoiceMessageContent.ts b/src/utils/createVoiceMessageContent.ts index 90c8cabe9..f7b638fbc 100644 --- a/src/utils/createVoiceMessageContent.ts +++ b/src/utils/createVoiceMessageContent.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MsgType } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/crypto/deviceInfo.ts b/src/utils/crypto/deviceInfo.ts index fb7486d29..4392f7c58 100644 --- a/src/utils/crypto/deviceInfo.ts +++ b/src/utils/crypto/deviceInfo.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Device, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/crypto/index.ts b/src/utils/crypto/index.ts index 5040a2f26..f1b5c6107 100644 --- a/src/utils/crypto/index.ts +++ b/src/utils/crypto/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** The `algorithm` property used in `m.room.encrypted` state events for encrypted rooms. diff --git a/src/utils/crypto/shouldForceDisableEncryption.ts b/src/utils/crypto/shouldForceDisableEncryption.ts index 6981aca62..8a59d9313 100644 --- a/src/utils/crypto/shouldForceDisableEncryption.ts +++ b/src/utils/crypto/shouldForceDisableEncryption.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/crypto/shouldSkipSetupEncryption.ts b/src/utils/crypto/shouldSkipSetupEncryption.ts index 6dfcda7e7..51d7a9303 100644 --- a/src/utils/crypto/shouldSkipSetupEncryption.ts +++ b/src/utils/crypto/shouldSkipSetupEncryption.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/device/clientInformation.ts b/src/utils/device/clientInformation.ts index d3423ab3c..500bfdd55 100644 --- a/src/utils/device/clientInformation.ts +++ b/src/utils/device/clientInformation.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/device/dehydration.ts b/src/utils/device/dehydration.ts index 38b7019fe..f18c4c5c7 100644 --- a/src/utils/device/dehydration.ts +++ b/src/utils/device/dehydration.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/utils/device/isDeviceVerified.ts b/src/utils/device/isDeviceVerified.ts index a139069fe..1205225e7 100644 --- a/src/utils/device/isDeviceVerified.ts +++ b/src/utils/device/isDeviceVerified.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/device/parseUserAgent.ts b/src/utils/device/parseUserAgent.ts index 2d36b1209..6dda013d0 100644 --- a/src/utils/device/parseUserAgent.ts +++ b/src/utils/device/parseUserAgent.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import UAParser from "ua-parser-js"; diff --git a/src/utils/device/snoozeBulkUnverifiedDeviceReminder.ts b/src/utils/device/snoozeBulkUnverifiedDeviceReminder.ts index f483e03ee..1d18bed83 100644 --- a/src/utils/device/snoozeBulkUnverifiedDeviceReminder.ts +++ b/src/utils/device/snoozeBulkUnverifiedDeviceReminder.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/utils/direct-messages.ts b/src/utils/direct-messages.ts index 13c028652..eee02f965 100644 --- a/src/utils/direct-messages.ts +++ b/src/utils/direct-messages.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ClientEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/dm/createDmLocalRoom.ts b/src/utils/dm/createDmLocalRoom.ts index c6bff15af..6d6cf0712 100644 --- a/src/utils/dm/createDmLocalRoom.ts +++ b/src/utils/dm/createDmLocalRoom.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EventType, KNOWN_SAFE_ROOM_VERSION, MatrixClient, MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/dm/filterValidMDirect.ts b/src/utils/dm/filterValidMDirect.ts index a0cfabae0..33fe92256 100644 --- a/src/utils/dm/filterValidMDirect.ts +++ b/src/utils/dm/filterValidMDirect.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ interface FilterValidMDirectResult { diff --git a/src/utils/dm/findDMForUser.ts b/src/utils/dm/findDMForUser.ts index 55b5f0093..0bdb23354 100644 --- a/src/utils/dm/findDMForUser.ts +++ b/src/utils/dm/findDMForUser.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/dm/findDMRoom.ts b/src/utils/dm/findDMRoom.ts index 09e7a6341..466f8f245 100644 --- a/src/utils/dm/findDMRoom.ts +++ b/src/utils/dm/findDMRoom.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/dm/startDm.ts b/src/utils/dm/startDm.ts index b69f449ef..bb72925c4 100644 --- a/src/utils/dm/startDm.ts +++ b/src/utils/dm/startDm.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IInvite3PID, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/enums.ts b/src/utils/enums.ts index d3ca318c2..0abc10da4 100644 --- a/src/utils/enums.ts +++ b/src/utils/enums.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/utils/event/getSenderName.ts b/src/utils/event/getSenderName.ts index f569e1183..bf87c71bd 100644 --- a/src/utils/event/getSenderName.ts +++ b/src/utils/event/getSenderName.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/exportUtils/Exporter.ts b/src/utils/exportUtils/Exporter.ts index 57b19e618..ed85ba8d6 100644 --- a/src/utils/exportUtils/Exporter.ts +++ b/src/utils/exportUtils/Exporter.ts @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Direction, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/exportUtils/HtmlExport.tsx b/src/utils/exportUtils/HtmlExport.tsx index 67cdf8b57..724652851 100644 --- a/src/utils/exportUtils/HtmlExport.tsx +++ b/src/utils/exportUtils/HtmlExport.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -106,7 +98,7 @@ export default class HTMLExporter extends Exporter { exportDate, }, { - roomName: () => {safeRoomName}, + roomName: () => {safeRoomName}, exporterDetails: () => ( {exporterName ? ( <> - {escapeHtml(exporterName)}I {" (" + safeExporter + ")"} + {escapeHtml(exporterName)}I {" (" + safeExporter + ")"} ) : ( - {safeExporter} + {safeExporter} )} ), diff --git a/src/utils/exportUtils/JSONExport.ts b/src/utils/exportUtils/JSONExport.ts index 8805f95d6..cae450f74 100644 --- a/src/utils/exportUtils/JSONExport.ts +++ b/src/utils/exportUtils/JSONExport.ts @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, IEvent, MatrixEvent, EventType } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/exportUtils/PlainTextExport.ts b/src/utils/exportUtils/PlainTextExport.ts index 4c4471340..e36c57dec 100644 --- a/src/utils/exportUtils/PlainTextExport.ts +++ b/src/utils/exportUtils/PlainTextExport.ts @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, IContent, MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/exportUtils/exportCSS.ts b/src/utils/exportUtils/exportCSS.ts index 15716ad54..dc21141d8 100644 --- a/src/utils/exportUtils/exportCSS.ts +++ b/src/utils/exportUtils/exportCSS.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Rule, StyleSheet } from "css-tree"; diff --git a/src/utils/exportUtils/exportCustomCSS.css b/src/utils/exportUtils/exportCustomCSS.css index bd0de6426..3d034d7df 100644 --- a/src/utils/exportUtils/exportCustomCSS.css +++ b/src/utils/exportUtils/exportCustomCSS.css @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /* diff --git a/src/utils/exportUtils/exportJS.js b/src/utils/exportUtils/exportJS.js index f4d5df322..61807b559 100644 --- a/src/utils/exportUtils/exportJS.js +++ b/src/utils/exportUtils/exportJS.js @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // This file is raw-imported (imported as plain text) for the export bundle, which is why this is in JS diff --git a/src/utils/exportUtils/exportUtils.ts b/src/utils/exportUtils/exportUtils.ts index 7fc7fe800..caff440ca 100644 --- a/src/utils/exportUtils/exportUtils.ts +++ b/src/utils/exportUtils/exportUtils.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { _t } from "../../languageHandler"; diff --git a/src/utils/humanize.ts b/src/utils/humanize.ts index 52477469e..d1fcfa07e 100644 --- a/src/utils/humanize.ts +++ b/src/utils/humanize.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { _t } from "../languageHandler"; diff --git a/src/utils/i18n-helpers.ts b/src/utils/i18n-helpers.ts index 81576040f..d02ecc061 100644 --- a/src/utils/i18n-helpers.ts +++ b/src/utils/i18n-helpers.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/image-media.ts b/src/utils/image-media.ts index 096fddbcb..2524572f6 100644 --- a/src/utils/image-media.ts +++ b/src/utils/image-media.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EncryptedFile } from "matrix-js-sdk/src/types"; diff --git a/src/utils/iterables.ts b/src/utils/iterables.ts index 9ee29448d..d6091f3f5 100644 --- a/src/utils/iterables.ts +++ b/src/utils/iterables.ts @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2020 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { arrayDiff, arrayIntersection } from "./arrays"; diff --git a/src/utils/leave-behaviour.ts b/src/utils/leave-behaviour.ts index c1f7d895a..016887b5c 100644 --- a/src/utils/leave-behaviour.ts +++ b/src/utils/leave-behaviour.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { sleep } from "matrix-js-sdk/src/utils"; diff --git a/src/utils/local-room.ts b/src/utils/local-room.ts index fa5a34b59..e4e922688 100644 --- a/src/utils/local-room.ts +++ b/src/utils/local-room.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/utils/localRoom/isLocalRoom.ts b/src/utils/localRoom/isLocalRoom.ts index c38ffa08e..e73ba51ed 100644 --- a/src/utils/localRoom/isLocalRoom.ts +++ b/src/utils/localRoom/isLocalRoom.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/localRoom/isRoomReady.ts b/src/utils/localRoom/isRoomReady.ts index 32d7106b8..e31f6ae4f 100644 --- a/src/utils/localRoom/isRoomReady.ts +++ b/src/utils/localRoom/isRoomReady.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { EventType, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/location/LocationShareErrors.ts b/src/utils/location/LocationShareErrors.ts index 99757028d..477c5e1b0 100644 --- a/src/utils/location/LocationShareErrors.ts +++ b/src/utils/location/LocationShareErrors.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { _t } from "../../languageHandler"; diff --git a/src/utils/location/findMapStyleUrl.ts b/src/utils/location/findMapStyleUrl.ts index 48bd644e5..9e5a19d8a 100644 --- a/src/utils/location/findMapStyleUrl.ts +++ b/src/utils/location/findMapStyleUrl.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/utils/location/index.ts b/src/utils/location/index.ts index 8a107451c..cf71850b8 100644 --- a/src/utils/location/index.ts +++ b/src/utils/location/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export * from "./findMapStyleUrl"; diff --git a/src/utils/location/isSelfLocation.ts b/src/utils/location/isSelfLocation.ts index 479e60d6c..fbc795722 100644 --- a/src/utils/location/isSelfLocation.ts +++ b/src/utils/location/isSelfLocation.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ILocationContent, LocationAssetType, M_ASSET } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/location/links.ts b/src/utils/location/links.ts index cafae1ae1..0d10dc96e 100644 --- a/src/utils/location/links.ts +++ b/src/utils/location/links.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, M_LOCATION } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/location/locationEventGeoUri.ts b/src/utils/location/locationEventGeoUri.ts index a04df2d6a..1de85defa 100644 --- a/src/utils/location/locationEventGeoUri.ts +++ b/src/utils/location/locationEventGeoUri.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, M_LOCATION } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/location/map.ts b/src/utils/location/map.ts index 707d703be..22d11c2e3 100644 --- a/src/utils/location/map.ts +++ b/src/utils/location/map.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import * as maplibregl from "maplibre-gl"; diff --git a/src/utils/location/parseGeoUri.ts b/src/utils/location/parseGeoUri.ts index d891f1929..5187d970c 100644 --- a/src/utils/location/parseGeoUri.ts +++ b/src/utils/location/parseGeoUri.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export const parseGeoUri = (uri: string): GeolocationCoordinates | undefined => { @@ -40,7 +32,7 @@ export const parseGeoUri = (uri: string): GeolocationCoordinates | undefined => return; } - return { + const geoCoords = { latitude: latitude!, longitude: longitude!, altitude: parse(coords[2]), @@ -49,4 +41,9 @@ export const parseGeoUri = (uri: string): GeolocationCoordinates | undefined => heading: null, speed: null, }; + + return { + toJSON: () => geoCoords, + ...geoCoords, + }; }; diff --git a/src/utils/location/positionFailureMessage.ts b/src/utils/location/positionFailureMessage.ts index 810f45059..44b88f48a 100644 --- a/src/utils/location/positionFailureMessage.ts +++ b/src/utils/location/positionFailureMessage.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { _t } from "../../languageHandler"; diff --git a/src/utils/location/useMap.ts b/src/utils/location/useMap.ts index 98ec53ffd..308aedc20 100644 --- a/src/utils/location/useMap.ts +++ b/src/utils/location/useMap.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useEffect, useState } from "react"; diff --git a/src/utils/login.ts b/src/utils/login.ts index 2688e0e15..31898e1b0 100644 --- a/src/utils/login.ts +++ b/src/utils/login.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type MatrixChat from "../components/structures/MatrixChat"; diff --git a/src/utils/maps.ts b/src/utils/maps.ts index 7ca1c0195..ea6d4fb37 100644 --- a/src/utils/maps.ts +++ b/src/utils/maps.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { arrayDiff, arrayIntersection } from "./arrays"; diff --git a/src/utils/media/requestMediaPermissions.tsx b/src/utils/media/requestMediaPermissions.tsx index fca558f82..10a2fc0ca 100644 --- a/src/utils/media/requestMediaPermissions.tsx +++ b/src/utils/media/requestMediaPermissions.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/utils/membership.ts b/src/utils/membership.ts index 2ff99fa36..27d281a76 100644 --- a/src/utils/membership.ts +++ b/src/utils/membership.ts @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, RoomMember, RoomState, RoomStateEvent, MatrixEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/notifications.ts b/src/utils/notifications.ts index 46e61fc98..a131c3e55 100644 --- a/src/utils/notifications.ts +++ b/src/utils/notifications.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/utils/numbers.ts b/src/utils/numbers.ts index e2a89833f..80d964b5a 100644 --- a/src/utils/numbers.ts +++ b/src/utils/numbers.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/utils/objects.ts b/src/utils/objects.ts index f505b71a4..65ce8d34f 100644 --- a/src/utils/objects.ts +++ b/src/utils/objects.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { arrayDiff, arrayUnion, arrayIntersection } from "./arrays"; diff --git a/src/utils/oidc/TokenRefresher.ts b/src/utils/oidc/TokenRefresher.ts index 1297a2cb6..a41d3669a 100644 --- a/src/utils/oidc/TokenRefresher.ts +++ b/src/utils/oidc/TokenRefresher.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { OidcTokenRefresher, AccessTokens } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/oidc/authorize.ts b/src/utils/oidc/authorize.ts index 345fb4296..7dcdc6e6c 100644 --- a/src/utils/oidc/authorize.ts +++ b/src/utils/oidc/authorize.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { completeAuthorizationCodeGrant, generateOidcAuthorizationUrl } from "matrix-js-sdk/src/oidc/authorize"; diff --git a/src/utils/oidc/error.ts b/src/utils/oidc/error.ts index 7b44c5c82..41c6fd4cc 100644 --- a/src/utils/oidc/error.ts +++ b/src/utils/oidc/error.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ReactNode } from "react"; diff --git a/src/utils/oidc/getOidcLogoutUrl.ts b/src/utils/oidc/getOidcLogoutUrl.ts index a18e5b2b6..be632b815 100644 --- a/src/utils/oidc/getOidcLogoutUrl.ts +++ b/src/utils/oidc/getOidcLogoutUrl.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/utils/oidc/isUserRegistrationSupported.ts b/src/utils/oidc/isUserRegistrationSupported.ts index 229a9d767..4633f2a96 100644 --- a/src/utils/oidc/isUserRegistrationSupported.ts +++ b/src/utils/oidc/isUserRegistrationSupported.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { OidcClientConfig } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/oidc/persistOidcSettings.ts b/src/utils/oidc/persistOidcSettings.ts index 2918e68ac..d508d0192 100644 --- a/src/utils/oidc/persistOidcSettings.ts +++ b/src/utils/oidc/persistOidcSettings.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IdTokenClaims } from "oidc-client-ts"; diff --git a/src/utils/oidc/registerClient.ts b/src/utils/oidc/registerClient.ts index f554e62e4..7d64969bd 100644 --- a/src/utils/oidc/registerClient.ts +++ b/src/utils/oidc/registerClient.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/utils/pages.ts b/src/utils/pages.ts index 63458c0da..83ed40895 100644 --- a/src/utils/pages.ts +++ b/src/utils/pages.ts @@ -1,17 +1,9 @@ /* -Copyright 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/utils/permalinks/ElementPermalinkConstructor.ts b/src/utils/permalinks/ElementPermalinkConstructor.ts index b75673dc1..7240a0add 100644 --- a/src/utils/permalinks/ElementPermalinkConstructor.ts +++ b/src/utils/permalinks/ElementPermalinkConstructor.ts @@ -1,17 +1,9 @@ /* -Copyright 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import PermalinkConstructor, { PermalinkParts } from "./PermalinkConstructor"; diff --git a/src/utils/permalinks/MatrixSchemePermalinkConstructor.ts b/src/utils/permalinks/MatrixSchemePermalinkConstructor.ts index 827dfc1d0..beefc4f4f 100644 --- a/src/utils/permalinks/MatrixSchemePermalinkConstructor.ts +++ b/src/utils/permalinks/MatrixSchemePermalinkConstructor.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import PermalinkConstructor, { PermalinkParts } from "./PermalinkConstructor"; diff --git a/src/utils/permalinks/MatrixToPermalinkConstructor.ts b/src/utils/permalinks/MatrixToPermalinkConstructor.ts index a40f5106c..d5b51abfb 100644 --- a/src/utils/permalinks/MatrixToPermalinkConstructor.ts +++ b/src/utils/permalinks/MatrixToPermalinkConstructor.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import PermalinkConstructor, { PermalinkParts } from "./PermalinkConstructor"; diff --git a/src/utils/permalinks/PermalinkConstructor.ts b/src/utils/permalinks/PermalinkConstructor.ts index 4248b9788..9868b4e0d 100644 --- a/src/utils/permalinks/PermalinkConstructor.ts +++ b/src/utils/permalinks/PermalinkConstructor.ts @@ -1,17 +1,9 @@ /* -Copyright 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/utils/permalinks/Permalinks.ts b/src/utils/permalinks/Permalinks.ts index 1c2526b49..32b72c80d 100644 --- a/src/utils/permalinks/Permalinks.ts +++ b/src/utils/permalinks/Permalinks.ts @@ -1,17 +1,9 @@ /* -Copyright 2019, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import isIp from "is-ip"; diff --git a/src/utils/permalinks/navigator.ts b/src/utils/permalinks/navigator.ts index 640bdabcb..711bf9a1b 100644 --- a/src/utils/permalinks/navigator.ts +++ b/src/utils/permalinks/navigator.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { tryTransformPermalinkToLocalHref } from "./Permalinks"; diff --git a/src/utils/pillify.tsx b/src/utils/pillify.tsx index 38ac08d6e..c1aa09c24 100644 --- a/src/utils/pillify.tsx +++ b/src/utils/pillify.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/utils/presence.ts b/src/utils/presence.ts index 0164b17bf..0930739bd 100644 --- a/src/utils/presence.ts +++ b/src/utils/presence.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/promise.ts b/src/utils/promise.ts index 2d4c3dc01..58dfdc8cd 100644 --- a/src/utils/promise.ts +++ b/src/utils/promise.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // Returns a promise which resolves when the input promise resolves with its value @@ -48,3 +40,18 @@ export async function retry( } throw lastErr; } + +/** + * Batch promises into groups of a given size. + * Execute the promises in parallel, but wait for all promises in a batch to resolve before moving to the next batch. + * @param funcs - The promises to batch + * @param batchSize - The number of promises to execute in parallel + */ +export async function batch(funcs: Array<() => Promise>, batchSize: number): Promise { + const results: T[] = []; + for (let i = 0; i < funcs.length; i += batchSize) { + const batch = funcs.slice(i, i + batchSize); + results.push(...(await Promise.all(batch.map((f) => f())))); + } + return results; +} diff --git a/src/utils/pushRules/monitorSyncedPushRules.ts b/src/utils/pushRules/monitorSyncedPushRules.ts index 2b8948434..346e96431 100644 --- a/src/utils/pushRules/monitorSyncedPushRules.ts +++ b/src/utils/pushRules/monitorSyncedPushRules.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, MatrixEvent, EventType, RuleId, IAnnotatedPushRule } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/pushRules/updatePushRuleActions.ts b/src/utils/pushRules/updatePushRuleActions.ts index 71d704fa6..5e305a52c 100644 --- a/src/utils/pushRules/updatePushRuleActions.ts +++ b/src/utils/pushRules/updatePushRuleActions.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, IPushRule, PushRuleAction, PushRuleKind } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/read-receipts.ts b/src/utils/read-receipts.ts index 04b6ead20..2a52b0bb7 100644 --- a/src/utils/read-receipts.ts +++ b/src/utils/read-receipts.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/room/canInviteTo.ts b/src/utils/room/canInviteTo.ts index bd306d930..89ce47a35 100644 --- a/src/utils/room/canInviteTo.ts +++ b/src/utils/room/canInviteTo.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { JoinRule, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/room/getFunctionalMembers.ts b/src/utils/room/getFunctionalMembers.ts index 4c839b037..018e78542 100644 --- a/src/utils/room/getFunctionalMembers.ts +++ b/src/utils/room/getFunctionalMembers.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, UNSTABLE_ELEMENT_FUNCTIONAL_USERS } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/room/getJoinedNonFunctionalMembers.ts b/src/utils/room/getJoinedNonFunctionalMembers.ts index a12284e72..855a87a2d 100644 --- a/src/utils/room/getJoinedNonFunctionalMembers.ts +++ b/src/utils/room/getJoinedNonFunctionalMembers.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, RoomMember } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/room/inviteToRoom.ts b/src/utils/room/inviteToRoom.ts index b8fb1214f..10c84e9a9 100644 --- a/src/utils/room/inviteToRoom.ts +++ b/src/utils/room/inviteToRoom.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/room/placeCall.ts b/src/utils/room/placeCall.ts index 16cb921fc..d3d8a7ab8 100644 --- a/src/utils/room/placeCall.ts +++ b/src/utils/room/placeCall.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { CallType } from "matrix-js-sdk/src/webrtc/call"; diff --git a/src/utils/room/shouldEncryptRoomWithSingle3rdPartyInvite.ts b/src/utils/room/shouldEncryptRoomWithSingle3rdPartyInvite.ts index c142c3341..444bd0a30 100644 --- a/src/utils/room/shouldEncryptRoomWithSingle3rdPartyInvite.ts +++ b/src/utils/room/shouldEncryptRoomWithSingle3rdPartyInvite.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/room/tagRoom.ts b/src/utils/room/tagRoom.ts index f358b288a..8b8f99e99 100644 --- a/src/utils/room/tagRoom.ts +++ b/src/utils/room/tagRoom.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/rooms.ts b/src/utils/rooms.ts index 1aa2150d9..96495735b 100644 --- a/src/utils/rooms.ts +++ b/src/utils/rooms.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/sets.ts b/src/utils/sets.ts index 68c226de3..d6b28a9e4 100644 --- a/src/utils/sets.ts +++ b/src/utils/sets.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { arrayDiff, Diff } from "./arrays"; diff --git a/src/utils/space.tsx b/src/utils/space.tsx index 4222ab14f..a1bf1b5bb 100644 --- a/src/utils/space.tsx +++ b/src/utils/space.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/utils/stringOrderField.ts b/src/utils/stringOrderField.ts index fb0be13ed..e50501344 100644 --- a/src/utils/stringOrderField.ts +++ b/src/utils/stringOrderField.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { alphabetPad, baseToString, stringToBase, DEFAULT_ALPHABET } from "matrix-js-sdk/src/utils"; diff --git a/src/utils/strings.ts b/src/utils/strings.ts index 8f7446e49..e7c99adbb 100644 --- a/src/utils/strings.ts +++ b/src/utils/strings.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** * Copy plaintext to user's clipboard diff --git a/src/utils/threepids.ts b/src/utils/threepids.ts index f77840329..a53bce6bc 100644 --- a/src/utils/threepids.ts +++ b/src/utils/threepids.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/src/utils/tokens/pickling.ts b/src/utils/tokens/pickling.ts index f1739145a..9857ca01b 100644 --- a/src/utils/tokens/pickling.ts +++ b/src/utils/tokens/pickling.ts @@ -1,20 +1,12 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2020-2024 The Matrix.org Foundation C.I.C. +Copyright 2018 New Vector Ltd Copyright 2016 Aviral Dasgupta Copyright 2016 OpenMarket Ltd -Copyright 2018 New Vector Ltd -Copyright 2020, 2024 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // Note: we don't import the base64 utils from `matrix-js-sdk/src/matrix` because this file diff --git a/src/utils/tokens/tokens.ts b/src/utils/tokens/tokens.ts index f526775e6..febd7f23f 100644 --- a/src/utils/tokens/tokens.ts +++ b/src/utils/tokens/tokens.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { decryptAES, encryptAES, IEncryptedPayload } from "matrix-js-sdk/src/crypto/aes"; @@ -24,13 +16,13 @@ import * as StorageAccess from "../StorageAccess"; */ /* - * Keys used when storing the tokens in indexeddb or localstorage + * Names used when storing the tokens in indexeddb or localstorage */ export const ACCESS_TOKEN_STORAGE_KEY = "mx_access_token"; export const REFRESH_TOKEN_STORAGE_KEY = "mx_refresh_token"; /* - * Used as initialization vector during encryption in persistTokenInStorage - * And decryption in restoreFromLocalStorage + * Names of the tokens. Used as part of the calculation to derive AES keys during encryption in persistTokenInStorage, + * and decryption in restoreSessionFromStorage. */ export const ACCESS_TOKEN_IV = "access_token"; export const REFRESH_TOKEN_IV = "refresh_token"; @@ -68,50 +60,63 @@ async function pickleKeyToAesKey(pickleKey: string): Promise { ); } -const isEncryptedPayload = (token?: IEncryptedPayload | string | undefined): token is IEncryptedPayload => { - return !!token && typeof token !== "string"; -}; /** * Try to decrypt a token retrieved from storage - * Where token is not encrypted (plain text) returns the plain text token - * Where token is encrypted, attempts decryption. Returns successfully decrypted token, else undefined. - * @param pickleKey pickle key used during encryption of token, or undefined - * @param token - * @param tokenIv initialization vector used during encryption of token eg ACCESS_TOKEN_IV - * @returns the decrypted token, or the plain text token. Returns undefined when token cannot be decrypted + * + * Where token is not encrypted (plain text) returns the plain text token. + * + * Where token is encrypted, attempts decryption. Returns successfully decrypted token, or throws if + * decryption failed. + * + * @param pickleKey Pickle key: used to derive the encryption key, or undefined if the token is not encrypted. + * Must be the same as provided to {@link persistTokenInStorage}. + * @param token token to be decrypted. + * @param tokenName Name of the token. Used in logging, but also used as an input when generating the actual AES key, + * so the same value must be provided to {@link persistTokenInStorage}. + * + * @returns the decrypted token, or the plain text token. */ export async function tryDecryptToken( pickleKey: string | undefined, - token: IEncryptedPayload | string | undefined, - tokenIv: string, -): Promise { - if (pickleKey && isEncryptedPayload(token)) { - const encrKey = await pickleKeyToAesKey(pickleKey); - const decryptedToken = await decryptAES(token, encrKey, tokenIv); - encrKey.fill(0); - return decryptedToken; - } - // if the token wasn't encrypted (plain string) just return it back + token: IEncryptedPayload | string, + tokenName: string, +): Promise { if (typeof token === "string") { + // Looks like an unencrypted token return token; } - // otherwise return undefined + + // Otherwise, it must be an encrypted token. + if (!pickleKey) { + throw new Error(`Error decrypting secret ${tokenName}: no pickle key found.`); + } + + const encrKey = await pickleKeyToAesKey(pickleKey); + const decryptedToken = await decryptAES(token, encrKey, tokenName); + encrKey.fill(0); + return decryptedToken; } /** * Persist a token in storage - * When pickle key is present, will attempt to encrypt the token - * Stores in idb, falling back to localStorage * - * @param storageKey key used to store the token - * @param initializationVector Initialization vector for encrypting the token. Only used when `pickleKey` is present - * @param token the token to store, when undefined any existing token at the storageKey is removed from storage - * @param pickleKey optional pickle key used to encrypt token - * @param hasTokenStorageKey Localstorage key for an item which stores whether we expect to have a token in indexeddb, eg "mx_has_access_token". + * When pickle key is present, will attempt to encrypt the token. If encryption fails (typically because + * WebCrypto is unavailable), the key will be stored unencrypted. + * + * Stores in IndexedDB, falling back to localStorage. + * + * @param storageKey key used to store the token. Note: not an encryption key; rather a localstorage or indexeddb key. + * @param tokenName Name of the token. Used in logging, but also used as an input when generating the actual AES key, + * so the same value must be provided to {@link tryDecryptToken} when decrypting. + * @param token the token to store. When undefined, any existing token at the `storageKey` is removed from storage. + * @param pickleKey Pickle key: used to derive the key used to encrypt token. If `undefined`, the token will be stored + * unencrypted. + * @param hasTokenStorageKey Localstorage key for an item which stores whether we expect to have a token in indexeddb, + * eg "mx_has_access_token". */ export async function persistTokenInStorage( storageKey: string, - initializationVector: string, + tokenName: string, token: string | undefined, pickleKey: string | undefined, hasTokenStorageKey: string, @@ -130,12 +135,12 @@ export async function persistTokenInStorage( try { // try to encrypt the access token using the pickle key const encrKey = await pickleKeyToAesKey(pickleKey); - encryptedToken = await encryptAES(token, encrKey, initializationVector); + encryptedToken = await encryptAES(token, encrKey, tokenName); encrKey.fill(0); } catch (e) { // This is likely due to the browser not having WebCrypto or somesuch. // Warn about it, but fall back to storing the unencrypted token. - logger.warn(`Could not encrypt token for ${storageKey}`, e); + logger.warn(`Could not encrypt token for ${tokenName}`, e); } } try { @@ -167,9 +172,11 @@ export async function persistTokenInStorage( } /** - * Wraps persistTokenInStorage with accessToken storage keys - * @param token the token to store, when undefined any existing accessToken is removed from storage - * @param pickleKey optional pickle key used to encrypt token + * Wraps {@link persistTokenInStorage} with accessToken storage keys + * + * @param token - The token to store. When undefined, any existing accessToken is removed from storage. + * @param pickleKey - Pickle key: used to derive the key used to encrypt token. If `undefined`, the token will be stored + * unencrypted. */ export async function persistAccessTokenInStorage( token: string | undefined, @@ -185,9 +192,11 @@ export async function persistAccessTokenInStorage( } /** - * Wraps persistTokenInStorage with refreshToken storage keys - * @param token the token to store, when undefined any existing refreshToken is removed from storage - * @param pickleKey optional pickle key used to encrypt token + * Wraps {@link persistTokenInStorage} with refreshToken storage keys. + * + * @param token - The token to store. When undefined, any existing refreshToken is removed from storage. + * @param pickleKey - Pickle key: used to derive the key used to encrypt token. If `undefined`, the token will be stored + * unencrypted. */ export async function persistRefreshTokenInStorage( token: string | undefined, diff --git a/src/utils/tooltipify.tsx b/src/utils/tooltipify.tsx index e3280f7fe..92dff5279 100644 --- a/src/utils/tooltipify.tsx +++ b/src/utils/tooltipify.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/utils/units.ts b/src/utils/units.ts index 12e996382..d2ceb262b 100644 --- a/src/utils/units.ts +++ b/src/utils/units.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export function toPx(pixelValue: number): string { diff --git a/src/utils/useId.ts b/src/utils/useId.ts index 975921d94..6f7cf7959 100644 --- a/src/utils/useId.ts +++ b/src/utils/useId.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/utils/validate/index.ts b/src/utils/validate/index.ts index 8a690b9d4..946bb7957 100644 --- a/src/utils/validate/index.ts +++ b/src/utils/validate/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export * from "./numberInRange"; diff --git a/src/utils/validate/numberInRange.ts b/src/utils/validate/numberInRange.ts index 26e476125..cbdabad54 100644 --- a/src/utils/validate/numberInRange.ts +++ b/src/utils/validate/numberInRange.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/utils/video-rooms.ts b/src/utils/video-rooms.ts index eae0ca0cd..a0003d59d 100644 --- a/src/utils/video-rooms.ts +++ b/src/utils/video-rooms.ts @@ -1,41 +1,14 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import type { Room } from "matrix-js-sdk/src/matrix"; -import SettingsStore from "../settings/SettingsStore"; -import { useFeatureEnabled } from "../hooks/useSettings"; - -function checkIsVideoRoom(room: Room, elementCallVideoRoomsEnabled: boolean): boolean { - return room.isElementVideoRoom() || (elementCallVideoRoomsEnabled && room.isCallRoom()); -} - -export const isVideoRoom = (room: Room): boolean => - checkIsVideoRoom(room, SettingsStore.getValue("feature_element_call_video_rooms")); /** - * Returns whether the given room is a video room based on the current feature flags. - * @param room The room to check. - * @param skipVideoRoomsEnabledCheck If true, the check for the video rooms feature flag is skipped, - * useful for suggesting to the user to enable the labs flag. + * Determines whether the given room is a video room. */ -export const useIsVideoRoom = (room?: Room, skipVideoRoomsEnabledCheck = false): boolean => { - const videoRoomsEnabled = useFeatureEnabled("feature_video_rooms"); - const elementCallVideoRoomsEnabled = useFeatureEnabled("feature_element_call_video_rooms"); // react to updates as isVideoRoom reads the value itself - - if (!room) return false; - if (!videoRoomsEnabled && !skipVideoRoomsEnabledCheck) return false; - return checkIsVideoRoom(room, elementCallVideoRoomsEnabled); -}; +export const isVideoRoom = (room: Room): boolean => room.isElementVideoRoom() || room.isCallRoom(); diff --git a/src/verification.ts b/src/verification.ts index 64a9cf261..5b6d011ba 100644 --- a/src/verification.ts +++ b/src/verification.ts @@ -1,17 +1,9 @@ /* -Copyright 2019, 2020, 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2019, 2020 , 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { User, MatrixClient, RoomMember } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/audio/VoiceBroadcastRecorder.ts b/src/voice-broadcast/audio/VoiceBroadcastRecorder.ts index 55788af9a..f2685d03c 100644 --- a/src/voice-broadcast/audio/VoiceBroadcastRecorder.ts +++ b/src/voice-broadcast/audio/VoiceBroadcastRecorder.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { isEqual } from "lodash"; diff --git a/src/voice-broadcast/components/VoiceBroadcastBody.tsx b/src/voice-broadcast/components/VoiceBroadcastBody.tsx index 5433154bd..916ee9f90 100644 --- a/src/voice-broadcast/components/VoiceBroadcastBody.tsx +++ b/src/voice-broadcast/components/VoiceBroadcastBody.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useContext, useEffect, useState } from "react"; diff --git a/src/voice-broadcast/components/atoms/LiveBadge.tsx b/src/voice-broadcast/components/atoms/LiveBadge.tsx index 200220bcf..2591fee43 100644 --- a/src/voice-broadcast/components/atoms/LiveBadge.tsx +++ b/src/voice-broadcast/components/atoms/LiveBadge.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/voice-broadcast/components/atoms/SeekButton.tsx b/src/voice-broadcast/components/atoms/SeekButton.tsx index 0abb98659..5ee082648 100644 --- a/src/voice-broadcast/components/atoms/SeekButton.tsx +++ b/src/voice-broadcast/components/atoms/SeekButton.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/voice-broadcast/components/atoms/VoiceBroadcastControl.tsx b/src/voice-broadcast/components/atoms/VoiceBroadcastControl.tsx index 78864ea66..177b8fd73 100644 --- a/src/voice-broadcast/components/atoms/VoiceBroadcastControl.tsx +++ b/src/voice-broadcast/components/atoms/VoiceBroadcastControl.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import classNames from "classnames"; diff --git a/src/voice-broadcast/components/atoms/VoiceBroadcastError.tsx b/src/voice-broadcast/components/atoms/VoiceBroadcastError.tsx index 9c312ac9e..acca95b07 100644 --- a/src/voice-broadcast/components/atoms/VoiceBroadcastError.tsx +++ b/src/voice-broadcast/components/atoms/VoiceBroadcastError.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/voice-broadcast/components/atoms/VoiceBroadcastHeader.tsx b/src/voice-broadcast/components/atoms/VoiceBroadcastHeader.tsx index 34a2a81a2..19bd32877 100644 --- a/src/voice-broadcast/components/atoms/VoiceBroadcastHeader.tsx +++ b/src/voice-broadcast/components/atoms/VoiceBroadcastHeader.tsx @@ -1,14 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/voice-broadcast/components/atoms/VoiceBroadcastPlaybackControl.tsx b/src/voice-broadcast/components/atoms/VoiceBroadcastPlaybackControl.tsx index d9285d4af..339135604 100644 --- a/src/voice-broadcast/components/atoms/VoiceBroadcastPlaybackControl.tsx +++ b/src/voice-broadcast/components/atoms/VoiceBroadcastPlaybackControl.tsx @@ -1,17 +1,9 @@ /* -Copyright 2022-2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement } from "react"; diff --git a/src/voice-broadcast/components/atoms/VoiceBroadcastRecordingConnectionError.tsx b/src/voice-broadcast/components/atoms/VoiceBroadcastRecordingConnectionError.tsx index 9072fbe92..4c7d26110 100644 --- a/src/voice-broadcast/components/atoms/VoiceBroadcastRecordingConnectionError.tsx +++ b/src/voice-broadcast/components/atoms/VoiceBroadcastRecordingConnectionError.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/voice-broadcast/components/atoms/VoiceBroadcastRoomSubtitle.tsx b/src/voice-broadcast/components/atoms/VoiceBroadcastRoomSubtitle.tsx index b50cc108d..20b737978 100644 --- a/src/voice-broadcast/components/atoms/VoiceBroadcastRoomSubtitle.tsx +++ b/src/voice-broadcast/components/atoms/VoiceBroadcastRoomSubtitle.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/voice-broadcast/components/molecules/ConfirmListenBroadcastStopCurrent.tsx b/src/voice-broadcast/components/molecules/ConfirmListenBroadcastStopCurrent.tsx index 854b831c7..3dadfeba6 100644 --- a/src/voice-broadcast/components/molecules/ConfirmListenBroadcastStopCurrent.tsx +++ b/src/voice-broadcast/components/molecules/ConfirmListenBroadcastStopCurrent.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/voice-broadcast/components/molecules/VoiceBroadcastPlaybackBody.tsx b/src/voice-broadcast/components/molecules/VoiceBroadcastPlaybackBody.tsx index 2ab9de8f7..913b14496 100644 --- a/src/voice-broadcast/components/molecules/VoiceBroadcastPlaybackBody.tsx +++ b/src/voice-broadcast/components/molecules/VoiceBroadcastPlaybackBody.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement } from "react"; diff --git a/src/voice-broadcast/components/molecules/VoiceBroadcastPreRecordingPip.tsx b/src/voice-broadcast/components/molecules/VoiceBroadcastPreRecordingPip.tsx index 1a572a872..ac742e0fd 100644 --- a/src/voice-broadcast/components/molecules/VoiceBroadcastPreRecordingPip.tsx +++ b/src/voice-broadcast/components/molecules/VoiceBroadcastPreRecordingPip.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useRef, useState } from "react"; diff --git a/src/voice-broadcast/components/molecules/VoiceBroadcastRecordingBody.tsx b/src/voice-broadcast/components/molecules/VoiceBroadcastRecordingBody.tsx index 44ee95f37..15547792d 100644 --- a/src/voice-broadcast/components/molecules/VoiceBroadcastRecordingBody.tsx +++ b/src/voice-broadcast/components/molecules/VoiceBroadcastRecordingBody.tsx @@ -1,14 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/voice-broadcast/components/molecules/VoiceBroadcastRecordingPip.tsx b/src/voice-broadcast/components/molecules/VoiceBroadcastRecordingPip.tsx index 46ca3f931..046e25ea5 100644 --- a/src/voice-broadcast/components/molecules/VoiceBroadcastRecordingPip.tsx +++ b/src/voice-broadcast/components/molecules/VoiceBroadcastRecordingPip.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { useRef, useState } from "react"; diff --git a/src/voice-broadcast/components/molecules/VoiceBroadcastSmallPlaybackBody.tsx b/src/voice-broadcast/components/molecules/VoiceBroadcastSmallPlaybackBody.tsx index 921e1eb17..c2bc3ff2e 100644 --- a/src/voice-broadcast/components/molecules/VoiceBroadcastSmallPlaybackBody.tsx +++ b/src/voice-broadcast/components/molecules/VoiceBroadcastSmallPlaybackBody.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/voice-broadcast/hooks/useCurrentVoiceBroadcastPlayback.ts b/src/voice-broadcast/hooks/useCurrentVoiceBroadcastPlayback.ts index c0b02d09c..3ff4081a9 100644 --- a/src/voice-broadcast/hooks/useCurrentVoiceBroadcastPlayback.ts +++ b/src/voice-broadcast/hooks/useCurrentVoiceBroadcastPlayback.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useTypedEventEmitterState } from "../../hooks/useEventEmitter"; diff --git a/src/voice-broadcast/hooks/useCurrentVoiceBroadcastPreRecording.ts b/src/voice-broadcast/hooks/useCurrentVoiceBroadcastPreRecording.ts index 5027daad5..bb14e3864 100644 --- a/src/voice-broadcast/hooks/useCurrentVoiceBroadcastPreRecording.ts +++ b/src/voice-broadcast/hooks/useCurrentVoiceBroadcastPreRecording.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useTypedEventEmitterState } from "../../hooks/useEventEmitter"; diff --git a/src/voice-broadcast/hooks/useCurrentVoiceBroadcastRecording.ts b/src/voice-broadcast/hooks/useCurrentVoiceBroadcastRecording.ts index 18283bcf0..1d4abe3f1 100644 --- a/src/voice-broadcast/hooks/useCurrentVoiceBroadcastRecording.ts +++ b/src/voice-broadcast/hooks/useCurrentVoiceBroadcastRecording.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { VoiceBroadcastRecording, VoiceBroadcastRecordingsStore, VoiceBroadcastRecordingsStoreEvent } from ".."; diff --git a/src/voice-broadcast/hooks/useHasRoomLiveVoiceBroadcast.ts b/src/voice-broadcast/hooks/useHasRoomLiveVoiceBroadcast.ts index 7d4bf6f79..a298f4dc8 100644 --- a/src/voice-broadcast/hooks/useHasRoomLiveVoiceBroadcast.ts +++ b/src/voice-broadcast/hooks/useHasRoomLiveVoiceBroadcast.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { useContext, useEffect, useMemo, useState } from "react"; diff --git a/src/voice-broadcast/hooks/useVoiceBroadcastPlayback.ts b/src/voice-broadcast/hooks/useVoiceBroadcastPlayback.ts index ae924e5f1..eb50b0de0 100644 --- a/src/voice-broadcast/hooks/useVoiceBroadcastPlayback.ts +++ b/src/voice-broadcast/hooks/useVoiceBroadcastPlayback.ts @@ -1,17 +1,9 @@ /* -Copyright 2022-2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, RoomMember } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/hooks/useVoiceBroadcastRecording.tsx b/src/voice-broadcast/hooks/useVoiceBroadcastRecording.tsx index 88d77dfcb..fa3c635bc 100644 --- a/src/voice-broadcast/hooks/useVoiceBroadcastRecording.tsx +++ b/src/voice-broadcast/hooks/useVoiceBroadcastRecording.tsx @@ -1,17 +1,9 @@ /* -Copyright 2022-2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room, RoomMember } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/index.ts b/src/voice-broadcast/index.ts index 3baabc35d..712c25fdc 100644 --- a/src/voice-broadcast/index.ts +++ b/src/voice-broadcast/index.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ /** diff --git a/src/voice-broadcast/models/VoiceBroadcastPlayback.ts b/src/voice-broadcast/models/VoiceBroadcastPlayback.ts index d70f067cf..ce6215312 100644 --- a/src/voice-broadcast/models/VoiceBroadcastPlayback.ts +++ b/src/voice-broadcast/models/VoiceBroadcastPlayback.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/src/voice-broadcast/models/VoiceBroadcastPreRecording.ts b/src/voice-broadcast/models/VoiceBroadcastPreRecording.ts index e1fe24680..0cf47c6f2 100644 --- a/src/voice-broadcast/models/VoiceBroadcastPreRecording.ts +++ b/src/voice-broadcast/models/VoiceBroadcastPreRecording.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, Room, RoomMember, TypedEventEmitter } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/models/VoiceBroadcastRecording.ts b/src/voice-broadcast/models/VoiceBroadcastRecording.ts index da45a50f8..ebf8ee697 100644 --- a/src/voice-broadcast/models/VoiceBroadcastRecording.ts +++ b/src/voice-broadcast/models/VoiceBroadcastRecording.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/voice-broadcast/stores/VoiceBroadcastPlaybacksStore.ts b/src/voice-broadcast/stores/VoiceBroadcastPlaybacksStore.ts index 874a0db45..69b8c21d9 100644 --- a/src/voice-broadcast/stores/VoiceBroadcastPlaybacksStore.ts +++ b/src/voice-broadcast/stores/VoiceBroadcastPlaybacksStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, MatrixEvent, TypedEventEmitter } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/stores/VoiceBroadcastPreRecordingStore.ts b/src/voice-broadcast/stores/VoiceBroadcastPreRecordingStore.ts index ce7ab8802..355293068 100644 --- a/src/voice-broadcast/stores/VoiceBroadcastPreRecordingStore.ts +++ b/src/voice-broadcast/stores/VoiceBroadcastPreRecordingStore.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { TypedEventEmitter } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/stores/VoiceBroadcastRecordingsStore.ts b/src/voice-broadcast/stores/VoiceBroadcastRecordingsStore.ts index 13bbb9ca3..ff0f67b91 100644 --- a/src/voice-broadcast/stores/VoiceBroadcastRecordingsStore.ts +++ b/src/voice-broadcast/stores/VoiceBroadcastRecordingsStore.ts @@ -1,17 +1,9 @@ /* -Copyright 2022-2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, MatrixEvent, TypedEventEmitter } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/types.ts b/src/voice-broadcast/types.ts index a54e5513c..8191a0be1 100644 --- a/src/voice-broadcast/types.ts +++ b/src/voice-broadcast/types.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { RelationType } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/VoiceBroadcastChunkEvents.ts b/src/voice-broadcast/utils/VoiceBroadcastChunkEvents.ts index dad2a0355..039749cf8 100644 --- a/src/voice-broadcast/utils/VoiceBroadcastChunkEvents.ts +++ b/src/voice-broadcast/utils/VoiceBroadcastChunkEvents.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/VoiceBroadcastResumer.ts b/src/voice-broadcast/utils/VoiceBroadcastResumer.ts index facd423d4..963b6ef3a 100644 --- a/src/voice-broadcast/utils/VoiceBroadcastResumer.ts +++ b/src/voice-broadcast/utils/VoiceBroadcastResumer.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ClientEvent, MatrixClient, MatrixEvent, RelationType, Room, SyncState } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/checkVoiceBroadcastPreConditions.tsx b/src/voice-broadcast/utils/checkVoiceBroadcastPreConditions.tsx index 3beae3785..ae96bc0b1 100644 --- a/src/voice-broadcast/utils/checkVoiceBroadcastPreConditions.tsx +++ b/src/voice-broadcast/utils/checkVoiceBroadcastPreConditions.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/voice-broadcast/utils/cleanUpBroadcasts.ts b/src/voice-broadcast/utils/cleanUpBroadcasts.ts index f04e9eecf..50133274b 100644 --- a/src/voice-broadcast/utils/cleanUpBroadcasts.ts +++ b/src/voice-broadcast/utils/cleanUpBroadcasts.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { SdkContextClass } from "../../contexts/SDKContext"; diff --git a/src/voice-broadcast/utils/determineVoiceBroadcastLiveness.ts b/src/voice-broadcast/utils/determineVoiceBroadcastLiveness.ts index 4f13ba2d4..8d9660c57 100644 --- a/src/voice-broadcast/utils/determineVoiceBroadcastLiveness.ts +++ b/src/voice-broadcast/utils/determineVoiceBroadcastLiveness.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { VoiceBroadcastInfoState, VoiceBroadcastLiveness } from ".."; diff --git a/src/voice-broadcast/utils/doClearCurrentVoiceBroadcastPlaybackIfStopped.ts b/src/voice-broadcast/utils/doClearCurrentVoiceBroadcastPlaybackIfStopped.ts index 8d88a32e7..ef0e1e7ae 100644 --- a/src/voice-broadcast/utils/doClearCurrentVoiceBroadcastPlaybackIfStopped.ts +++ b/src/voice-broadcast/utils/doClearCurrentVoiceBroadcastPlaybackIfStopped.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { VoiceBroadcastPlaybacksStore, VoiceBroadcastPlaybackState } from ".."; diff --git a/src/voice-broadcast/utils/doMaybeSetCurrentVoiceBroadcastPlayback.ts b/src/voice-broadcast/utils/doMaybeSetCurrentVoiceBroadcastPlayback.ts index c6eda4132..2ec4ab185 100644 --- a/src/voice-broadcast/utils/doMaybeSetCurrentVoiceBroadcastPlayback.ts +++ b/src/voice-broadcast/utils/doMaybeSetCurrentVoiceBroadcastPlayback.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/findRoomLiveVoiceBroadcastFromUserAndDevice.ts b/src/voice-broadcast/utils/findRoomLiveVoiceBroadcastFromUserAndDevice.ts index 61d54a766..fbd02d44f 100644 --- a/src/voice-broadcast/utils/findRoomLiveVoiceBroadcastFromUserAndDevice.ts +++ b/src/voice-broadcast/utils/findRoomLiveVoiceBroadcastFromUserAndDevice.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/getChunkLength.ts b/src/voice-broadcast/utils/getChunkLength.ts index 0e417f65e..b3fe2f557 100644 --- a/src/voice-broadcast/utils/getChunkLength.ts +++ b/src/voice-broadcast/utils/getChunkLength.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SdkConfig, { DEFAULTS } from "../../SdkConfig"; diff --git a/src/voice-broadcast/utils/getMaxBroadcastLength.ts b/src/voice-broadcast/utils/getMaxBroadcastLength.ts index 2ac930f80..e5df83ef0 100644 --- a/src/voice-broadcast/utils/getMaxBroadcastLength.ts +++ b/src/voice-broadcast/utils/getMaxBroadcastLength.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SdkConfig, { DEFAULTS } from "../../SdkConfig"; diff --git a/src/voice-broadcast/utils/hasRoomLiveVoiceBroadcast.ts b/src/voice-broadcast/utils/hasRoomLiveVoiceBroadcast.ts index eb50cf4e6..939eb1a0c 100644 --- a/src/voice-broadcast/utils/hasRoomLiveVoiceBroadcast.ts +++ b/src/voice-broadcast/utils/hasRoomLiveVoiceBroadcast.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/isRelatedToVoiceBroadcast.ts b/src/voice-broadcast/utils/isRelatedToVoiceBroadcast.ts index c27c27033..eca8f890e 100644 --- a/src/voice-broadcast/utils/isRelatedToVoiceBroadcast.ts +++ b/src/voice-broadcast/utils/isRelatedToVoiceBroadcast.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, MatrixEvent, RelationType } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/isVoiceBroadcastStartedEvent.ts b/src/voice-broadcast/utils/isVoiceBroadcastStartedEvent.ts index 08e3bcec3..fffe45850 100644 --- a/src/voice-broadcast/utils/isVoiceBroadcastStartedEvent.ts +++ b/src/voice-broadcast/utils/isVoiceBroadcastStartedEvent.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/pauseNonLiveBroadcastFromOtherRoom.ts b/src/voice-broadcast/utils/pauseNonLiveBroadcastFromOtherRoom.ts index 3af24a0c3..e854ba9ba 100644 --- a/src/voice-broadcast/utils/pauseNonLiveBroadcastFromOtherRoom.ts +++ b/src/voice-broadcast/utils/pauseNonLiveBroadcastFromOtherRoom.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/retrieveStartedInfoEvent.ts b/src/voice-broadcast/utils/retrieveStartedInfoEvent.ts index 969e9fc57..77bcf83f8 100644 --- a/src/voice-broadcast/utils/retrieveStartedInfoEvent.ts +++ b/src/voice-broadcast/utils/retrieveStartedInfoEvent.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/setUpVoiceBroadcastPreRecording.ts b/src/voice-broadcast/utils/setUpVoiceBroadcastPreRecording.ts index bb1875a38..c50607c58 100644 --- a/src/voice-broadcast/utils/setUpVoiceBroadcastPreRecording.ts +++ b/src/voice-broadcast/utils/setUpVoiceBroadcastPreRecording.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, Room } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/shouldDisplayAsVoiceBroadcastRecordingTile.ts b/src/voice-broadcast/utils/shouldDisplayAsVoiceBroadcastRecordingTile.ts index 6beecd11c..d729d9e1c 100644 --- a/src/voice-broadcast/utils/shouldDisplayAsVoiceBroadcastRecordingTile.ts +++ b/src/voice-broadcast/utils/shouldDisplayAsVoiceBroadcastRecordingTile.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/shouldDisplayAsVoiceBroadcastStoppedText.ts b/src/voice-broadcast/utils/shouldDisplayAsVoiceBroadcastStoppedText.ts index 22d6e79c3..2179aff3b 100644 --- a/src/voice-broadcast/utils/shouldDisplayAsVoiceBroadcastStoppedText.ts +++ b/src/voice-broadcast/utils/shouldDisplayAsVoiceBroadcastStoppedText.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/shouldDisplayAsVoiceBroadcastTile.ts b/src/voice-broadcast/utils/shouldDisplayAsVoiceBroadcastTile.ts index 85c31ed05..9a51b33c9 100644 --- a/src/voice-broadcast/utils/shouldDisplayAsVoiceBroadcastTile.ts +++ b/src/voice-broadcast/utils/shouldDisplayAsVoiceBroadcastTile.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/showCantStartACallDialog.tsx b/src/voice-broadcast/utils/showCantStartACallDialog.tsx index 48f3c2b2e..eeeb86ee0 100644 --- a/src/voice-broadcast/utils/showCantStartACallDialog.tsx +++ b/src/voice-broadcast/utils/showCantStartACallDialog.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/src/voice-broadcast/utils/startNewVoiceBroadcastRecording.ts b/src/voice-broadcast/utils/startNewVoiceBroadcastRecording.ts index 27ab93b3a..f0c5a9193 100644 --- a/src/voice-broadcast/utils/startNewVoiceBroadcastRecording.ts +++ b/src/voice-broadcast/utils/startNewVoiceBroadcastRecording.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { ISendEventResponse, MatrixClient, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/voice-broadcast/utils/textForVoiceBroadcastStoppedEvent.tsx b/src/voice-broadcast/utils/textForVoiceBroadcastStoppedEvent.tsx index 81fb8d67a..bc2aa412a 100644 --- a/src/voice-broadcast/utils/textForVoiceBroadcastStoppedEvent.tsx +++ b/src/voice-broadcast/utils/textForVoiceBroadcastStoppedEvent.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactNode } from "react"; diff --git a/src/voice-broadcast/utils/textForVoiceBroadcastStoppedEventWithoutLink.ts b/src/voice-broadcast/utils/textForVoiceBroadcastStoppedEventWithoutLink.ts index 909cd8c25..13d7f47c4 100644 --- a/src/voice-broadcast/utils/textForVoiceBroadcastStoppedEventWithoutLink.ts +++ b/src/voice-broadcast/utils/textForVoiceBroadcastStoppedEventWithoutLink.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent } from "matrix-js-sdk/src/matrix"; diff --git a/src/widgets/CapabilityText.tsx b/src/widgets/CapabilityText.tsx index 090d738b1..28ba11757 100644 --- a/src/widgets/CapabilityText.tsx +++ b/src/widgets/CapabilityText.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { @@ -162,14 +154,14 @@ export class CapabilityText { if (room) { return ( - {room.name} + {room.name} ); } else { return ( - + {roomId} - + ); } }, @@ -217,7 +209,7 @@ export class CapabilityText { eventType: eventCap.eventType, }, { - b: (sub) => {sub}, + b: (sub) => {sub}, }, ), byline: CapabilityText.bylineFor(eventCap), @@ -230,7 +222,7 @@ export class CapabilityText { eventType: eventCap.eventType, }, { - b: (sub) => {sub}, + b: (sub) => {sub}, }, ), byline: CapabilityText.bylineFor(eventCap), @@ -246,7 +238,7 @@ export class CapabilityText { eventType: eventCap.eventType, }, { - b: (sub) => {sub}, + b: (sub) => {sub}, }, ), byline: CapabilityText.bylineFor(eventCap), @@ -259,7 +251,7 @@ export class CapabilityText { eventType: eventCap.eventType, }, { - b: (sub) => {sub}, + b: (sub) => {sub}, }, ), byline: CapabilityText.bylineFor(eventCap), @@ -274,7 +266,7 @@ export class CapabilityText { "widget|capability|capability", { capability }, { - b: (sub) => {sub}, + b: (sub) => {sub}, }, ), }; @@ -398,7 +390,7 @@ export class CapabilityText { msgtype: eventCap.keyStr, }, { - b: (sub) => {sub}, + b: (sub) => {sub}, }, ); } else { @@ -408,7 +400,7 @@ export class CapabilityText { msgtype: eventCap.keyStr, }, { - b: (sub) => {sub}, + b: (sub) => {sub}, }, ); } @@ -420,7 +412,7 @@ export class CapabilityText { msgtype: eventCap.keyStr, }, { - b: (sub) => {sub}, + b: (sub) => {sub}, }, ); } else { @@ -430,7 +422,7 @@ export class CapabilityText { msgtype: eventCap.keyStr, }, { - b: (sub) => {sub}, + b: (sub) => {sub}, }, ); } diff --git a/src/widgets/Jitsi.ts b/src/widgets/Jitsi.ts index ca602ec15..fe2ad9258 100644 --- a/src/widgets/Jitsi.ts +++ b/src/widgets/Jitsi.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/widgets/ManagedHybrid.ts b/src/widgets/ManagedHybrid.ts index 6617933d9..a904bbab0 100644 --- a/src/widgets/ManagedHybrid.ts +++ b/src/widgets/ManagedHybrid.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IWidget } from "matrix-widget-api"; diff --git a/src/widgets/WidgetType.ts b/src/widgets/WidgetType.ts index e6f8c7805..58b836a13 100644 --- a/src/widgets/WidgetType.ts +++ b/src/widgets/WidgetType.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ // TODO: Move to matrix-widget-api diff --git a/src/workers/blurhash.worker.ts b/src/workers/blurhash.worker.ts index 183ffefc4..00656ca81 100644 --- a/src/workers/blurhash.worker.ts +++ b/src/workers/blurhash.worker.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { encode } from "blurhash"; diff --git a/src/workers/blurhashWorkerFactory.ts b/src/workers/blurhashWorkerFactory.ts index 17e3af2fb..ab16ecb3f 100644 --- a/src/workers/blurhashWorkerFactory.ts +++ b/src/workers/blurhashWorkerFactory.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export default function factory(options?: WorkerOptions | undefined): Worker { diff --git a/src/workers/indexeddb.worker.ts b/src/workers/indexeddb.worker.ts index a05add1c7..5b71a08ef 100644 --- a/src/workers/indexeddb.worker.ts +++ b/src/workers/indexeddb.worker.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2017 Vector Creations Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { IndexedDBStoreWorker } from "matrix-js-sdk/src/indexeddb-worker"; diff --git a/src/workers/indexeddbWorkerFactory.ts b/src/workers/indexeddbWorkerFactory.ts index 46de5cfe3..1d78d9fb3 100644 --- a/src/workers/indexeddbWorkerFactory.ts +++ b/src/workers/indexeddbWorkerFactory.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export default function factory(options?: WorkerOptions | undefined): Worker { diff --git a/src/workers/playback.worker.ts b/src/workers/playback.worker.ts index 6288013f6..45789ffba 100644 --- a/src/workers/playback.worker.ts +++ b/src/workers/playback.worker.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { WorkerPayload } from "./worker"; diff --git a/src/workers/playbackWorkerFactory.ts b/src/workers/playbackWorkerFactory.ts index 091b426ef..4d1aedddc 100644 --- a/src/workers/playbackWorkerFactory.ts +++ b/src/workers/playbackWorkerFactory.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export default function factory(options?: WorkerOptions | undefined): Worker { diff --git a/src/workers/worker.ts b/src/workers/worker.ts index b62fb8872..fa2a45c85 100644 --- a/src/workers/worker.ts +++ b/src/workers/worker.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export interface WorkerPayload { diff --git a/test/@types/common.ts b/test/@types/common.ts index 2df182a94..865a34fd4 100644 --- a/test/@types/common.ts +++ b/test/@types/common.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ export type PublicInterface = { diff --git a/test/Avatar-test.ts b/test/Avatar-test.ts index b08147d2e..649f0d234 100644 --- a/test/Avatar-test.ts +++ b/test/Avatar-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked } from "jest-mock"; diff --git a/test/ContentMessages-test.ts b/test/ContentMessages-test.ts index 231ddc1b2..d2e5bc95f 100644 --- a/test/ContentMessages-test.ts +++ b/test/ContentMessages-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked } from "jest-mock"; diff --git a/test/DecryptionFailureTracker-test.ts b/test/DecryptionFailureTracker-test.ts index d465d9b2a..31a2ac318 100644 --- a/test/DecryptionFailureTracker-test.ts +++ b/test/DecryptionFailureTracker-test.ts @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked, Mocked, MockedObject } from "jest-mock"; diff --git a/test/DeviceListener-test.ts b/test/DeviceListener-test.ts index 4a2df70e6..8d1315175 100644 --- a/test/DeviceListener-test.ts +++ b/test/DeviceListener-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Mocked, mocked } from "jest-mock"; diff --git a/test/HtmlUtils-test.tsx b/test/HtmlUtils-test.tsx index 0de866d45..6184a9f20 100644 --- a/test/HtmlUtils-test.tsx +++ b/test/HtmlUtils-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement } from "react"; diff --git a/test/Image-test.ts b/test/Image-test.ts index 6352cf8a1..02690d2e7 100644 --- a/test/Image-test.ts +++ b/test/Image-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import fs from "fs"; diff --git a/test/KeyBindingsManager-test.ts b/test/KeyBindingsManager-test.ts index 1724307fb..8f34a9ed6 100644 --- a/test/KeyBindingsManager-test.ts +++ b/test/KeyBindingsManager-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Clemens Zeidler -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { isKeyComboMatch, KeyCombo } from "../src/KeyBindingsManager"; diff --git a/test/LegacyCallHandler-test.ts b/test/LegacyCallHandler-test.ts index c310db55a..7ba0ce27b 100644 --- a/test/LegacyCallHandler-test.ts +++ b/test/LegacyCallHandler-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/test/Lifecycle-test.ts b/test/Lifecycle-test.ts index f9146630f..04c7408b6 100644 --- a/test/Lifecycle-test.ts +++ b/test/Lifecycle-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Crypto } from "@peculiar/webcrypto"; @@ -23,7 +15,7 @@ import { mocked, MockedObject } from "jest-mock"; import fetchMock from "fetch-mock-jest"; import StorageEvictedDialog from "../src/components/views/dialogs/StorageEvictedDialog"; -import { logout, restoreFromLocalStorage, setLoggedIn } from "../src/Lifecycle"; +import { logout, restoreSessionFromStorage, setLoggedIn } from "../src/Lifecycle"; import { MatrixClientPeg } from "../src/MatrixClientPeg"; import Modal from "../src/Modal"; import * as StorageAccess from "../src/utils/StorageAccess"; @@ -145,7 +137,12 @@ describe("Lifecycle", () => { mockStore[tableKey] = table; }, ); - jest.spyOn(StorageAccess, "idbDelete").mockClear().mockResolvedValue(undefined); + jest.spyOn(StorageAccess, "idbDelete") + .mockClear() + .mockImplementation(async (tableKey: string, key: string | string[]) => { + const table = mockStore[tableKey]; + delete table?.[key as string]; + }); }; const homeserverUrl = "https://server.org"; @@ -180,7 +177,7 @@ describe("Lifecycle", () => { mac: expect.any(String), }; - describe("restoreFromLocalStorage()", () => { + describe("restoreSessionFromStorage()", () => { beforeEach(() => { initLocalStorageMock(); initSessionStorageMock(); @@ -204,18 +201,18 @@ describe("Lifecycle", () => { // @ts-ignore dirty mocking global.localStorage = undefined; - expect(await restoreFromLocalStorage()).toEqual(false); + expect(await restoreSessionFromStorage()).toEqual(false); }); it("should return false when no session data is found in local storage", async () => { - expect(await restoreFromLocalStorage()).toEqual(false); + expect(await restoreSessionFromStorage()).toEqual(false); expect(logger.log).toHaveBeenCalledWith("No previous session found."); }); it("should abort login when we expect to find an access token but don't", async () => { initLocalStorageMock({ mx_has_access_token: "true" }); - await expect(() => restoreFromLocalStorage()).rejects.toThrow(); + await expect(() => restoreSessionFromStorage()).rejects.toThrow(); expect(Modal.createDialog).toHaveBeenCalledWith(StorageEvictedDialog); expect(mockClient.clearStores).toHaveBeenCalled(); }); @@ -228,12 +225,12 @@ describe("Lifecycle", () => { }); it("should ignore guest accounts when ignoreGuest is true", async () => { - expect(await restoreFromLocalStorage({ ignoreGuest: true })).toEqual(false); + expect(await restoreSessionFromStorage({ ignoreGuest: true })).toEqual(false); expect(logger.log).toHaveBeenCalledWith(`Ignoring stored guest account: ${userId}`); }); it("should restore guest accounts when ignoreGuest is false", async () => { - expect(await restoreFromLocalStorage({ ignoreGuest: false })).toEqual(true); + expect(await restoreSessionFromStorage({ ignoreGuest: false })).toEqual(true); expect(MatrixClientPeg.replaceUsingCreds).toHaveBeenCalledWith( expect.objectContaining({ @@ -253,7 +250,7 @@ describe("Lifecycle", () => { }); it("should persist credentials", async () => { - expect(await restoreFromLocalStorage()).toEqual(true); + expect(await restoreSessionFromStorage()).toEqual(true); expect(localStorage.setItem).toHaveBeenCalledWith("mx_user_id", userId); expect(localStorage.setItem).toHaveBeenCalledWith("mx_has_access_token", "true"); @@ -267,7 +264,7 @@ describe("Lifecycle", () => { it("should persist access token when idb is not available", async () => { jest.spyOn(StorageAccess, "idbSave").mockRejectedValue("oups"); - expect(await restoreFromLocalStorage()).toEqual(true); + expect(await restoreSessionFromStorage()).toEqual(true); expect(StorageAccess.idbSave).toHaveBeenCalledWith("account", "mx_access_token", accessToken); // put accessToken in localstorage as fallback @@ -275,7 +272,7 @@ describe("Lifecycle", () => { }); it("should create and start new matrix client with credentials", async () => { - expect(await restoreFromLocalStorage()).toEqual(true); + expect(await restoreSessionFromStorage()).toEqual(true); expect(MatrixClientPeg.replaceUsingCreds).toHaveBeenCalledWith( { @@ -295,13 +292,13 @@ describe("Lifecycle", () => { }); it("should remove fresh login flag from session storage", async () => { - expect(await restoreFromLocalStorage()).toEqual(true); + expect(await restoreSessionFromStorage()).toEqual(true); expect(sessionStorage.removeItem).toHaveBeenCalledWith("mx_fresh_login"); }); it("should start matrix client", async () => { - expect(await restoreFromLocalStorage()).toEqual(true); + expect(await restoreSessionFromStorage()).toEqual(true); expect(MatrixClientPeg.start).toHaveBeenCalled(); }); @@ -316,7 +313,7 @@ describe("Lifecycle", () => { }); it("should persist credentials", async () => { - expect(await restoreFromLocalStorage()).toEqual(true); + expect(await restoreSessionFromStorage()).toEqual(true); // refresh token from storage is re-persisted expect(localStorage.setItem).toHaveBeenCalledWith("mx_has_refresh_token", "true"); @@ -324,7 +321,7 @@ describe("Lifecycle", () => { }); it("should create new matrix client with credentials", async () => { - expect(await restoreFromLocalStorage()).toEqual(true); + expect(await restoreSessionFromStorage()).toEqual(true); expect(MatrixClientPeg.replaceUsingCreds).toHaveBeenCalledWith( { @@ -362,7 +359,7 @@ describe("Lifecycle", () => { }); it("should persist credentials", async () => { - expect(await restoreFromLocalStorage()).toEqual(true); + expect(await restoreSessionFromStorage()).toEqual(true); expect(localStorage.setItem).toHaveBeenCalledWith("mx_has_access_token", "true"); @@ -384,7 +381,7 @@ describe("Lifecycle", () => { }, ); - expect(await restoreFromLocalStorage()).toEqual(true); + expect(await restoreSessionFromStorage()).toEqual(true); expect(StorageAccess.idbSave).toHaveBeenCalledWith( "account", @@ -403,7 +400,7 @@ describe("Lifecycle", () => { }); // Perform the restore - expect(await restoreFromLocalStorage()).toEqual(true); + expect(await restoreSessionFromStorage()).toEqual(true); // Ensure that the expected calls were made expect(MatrixClientPeg.replaceUsingCreds).toHaveBeenCalledWith( @@ -430,7 +427,7 @@ describe("Lifecycle", () => { }); it("should persist credentials", async () => { - expect(await restoreFromLocalStorage()).toEqual(true); + expect(await restoreSessionFromStorage()).toEqual(true); // refresh token from storage is re-persisted expect(localStorage.setItem).toHaveBeenCalledWith("mx_has_refresh_token", "true"); @@ -442,7 +439,7 @@ describe("Lifecycle", () => { }); it("should create new matrix client with credentials", async () => { - expect(await restoreFromLocalStorage()).toEqual(true); + expect(await restoreSessionFromStorage()).toEqual(true); expect(MatrixClientPeg.replaceUsingCreds).toHaveBeenCalledWith( { @@ -492,7 +489,7 @@ describe("Lifecycle", () => { it("should create and start new matrix client with credentials", async () => { // Perform the restore - expect(await restoreFromLocalStorage()).toEqual(true); + expect(await restoreSessionFromStorage()).toEqual(true); // Ensure that the expected calls were made expect(MatrixClientPeg.replaceUsingCreds).toHaveBeenCalledWith( @@ -519,7 +516,24 @@ describe("Lifecycle", () => { initIdbMock(idbStorageSession); mockClient.isVersionSupported.mockRejectedValue(new Error("Oh, noes, the server is down!")); - expect(await restoreFromLocalStorage()).toEqual(true); + expect(await restoreSessionFromStorage()).toEqual(true); + }); + + it("should throw if the token was persisted with a pickle key but there is no pickle key available now", async () => { + initLocalStorageMock(localStorageSession); + initIdbMock({}); + + // Create a pickle key, and store it, encrypted, in IDB. + const pickleKey = (await PlatformPeg.get()!.createPickleKey(credentials.userId, credentials.deviceId))!; + localStorage.setItem("mx_has_pickle_key", "true"); + await persistAccessTokenInStorage(credentials.accessToken, pickleKey); + + // Now destroy the pickle key + await PlatformPeg.get()!.destroyPickleKey(credentials.userId, credentials.deviceId); + + await expect(restoreSessionFromStorage()).rejects.toThrow( + "Error decrypting secret access_token: no pickle key found.", + ); }); }); }); diff --git a/test/Markdown-test.ts b/test/Markdown-test.ts index 7e04c6128..474c8275b 100644 --- a/test/Markdown-test.ts +++ b/test/Markdown-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import Markdown from "../src/Markdown"; diff --git a/test/MatrixClientPeg-test.ts b/test/MatrixClientPeg-test.ts index e5585f8cc..9ece98e13 100644 --- a/test/MatrixClientPeg-test.ts +++ b/test/MatrixClientPeg-test.ts @@ -1,26 +1,14 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; import fetchMockJest from "fetch-mock-jest"; import EventEmitter from "events"; -import { - ProvideCryptoSetupExtensions, - SecretStorageKeyDescription, -} from "@matrix-org/react-sdk-module-api/lib/lifecycles/CryptoSetupExtensions"; import { advanceDateAndTime, stubClient } from "./test-utils"; import { IMatrixClientPeg, MatrixClientPeg as peg } from "../src/MatrixClientPeg"; @@ -29,7 +17,6 @@ import Modal from "../src/Modal"; import PlatformPeg from "../src/PlatformPeg"; import { SettingLevel } from "../src/settings/SettingLevel"; import { Features } from "../src/settings/Settings"; -import { ModuleRunner } from "../src/modules/ModuleRunner"; jest.useFakeTimers(); @@ -82,78 +69,6 @@ describe("MatrixClientPeg", () => { expect(peg.userRegisteredWithinLastHours(24)).toBe(false); }); - describe(".start extensions", () => { - let testPeg: IMatrixClientPeg; - - beforeEach(() => { - // instantiate a MatrixClientPegClass instance, with a new MatrixClient - testPeg = new PegClass(); - fetchMockJest.get("http://example.com/_matrix/client/versions", {}); - }); - - describe("cryptoSetup extension", () => { - it("should call default cryptoSetup.getDehydrationKeyCallback", async () => { - const mockCryptoSetup = { - SHOW_ENCRYPTION_SETUP_UI: true, - examineLoginResponse: jest.fn(), - persistCredentials: jest.fn(), - getSecretStorageKey: jest.fn(), - createSecretStorageKey: jest.fn(), - catchAccessSecretStorageError: jest.fn(), - setupEncryptionNeeded: jest.fn(), - getDehydrationKeyCallback: jest.fn().mockReturnValue(null), - } as ProvideCryptoSetupExtensions; - - // Ensure we have an instance before we set up spies - const instance = ModuleRunner.instance; - jest.spyOn(instance.extensions, "cryptoSetup", "get").mockReturnValue(mockCryptoSetup); - - testPeg.replaceUsingCreds({ - accessToken: "SEKRET", - homeserverUrl: "http://example.com", - userId: "@user:example.com", - deviceId: "TEST_DEVICE_ID", - }); - - expect(mockCryptoSetup.getDehydrationKeyCallback).toHaveBeenCalledTimes(1); - }); - - it("should call overridden cryptoSetup.getDehydrationKeyCallback", async () => { - const mockDehydrationKeyCallback = () => Uint8Array.from([0x11, 0x22, 0x33]); - - const mockCryptoSetup = { - SHOW_ENCRYPTION_SETUP_UI: true, - examineLoginResponse: jest.fn(), - persistCredentials: jest.fn(), - getSecretStorageKey: jest.fn(), - createSecretStorageKey: jest.fn(), - catchAccessSecretStorageError: jest.fn(), - setupEncryptionNeeded: jest.fn(), - getDehydrationKeyCallback: jest.fn().mockReturnValue(mockDehydrationKeyCallback), - } as ProvideCryptoSetupExtensions; - - // Ensure we have an instance before we set up spies - const instance = ModuleRunner.instance; - jest.spyOn(instance.extensions, "cryptoSetup", "get").mockReturnValue(mockCryptoSetup); - - testPeg.replaceUsingCreds({ - accessToken: "SEKRET", - homeserverUrl: "http://example.com", - userId: "@user:example.com", - deviceId: "TEST_DEVICE_ID", - }); - expect(mockCryptoSetup.getDehydrationKeyCallback).toHaveBeenCalledTimes(1); - - const client = testPeg.get(); - const dehydrationKey = await client?.cryptoCallbacks.getDehydrationKey!( - {} as SecretStorageKeyDescription, - (key: Uint8Array) => true, - ); - expect(dehydrationKey).toEqual(Uint8Array.from([0x11, 0x22, 0x33])); - }); - }); - }); - describe(".start", () => { let testPeg: IMatrixClientPeg; diff --git a/test/MediaDeviceHandler-test.ts b/test/MediaDeviceHandler-test.ts index 76a38df80..da31b79c7 100644 --- a/test/MediaDeviceHandler-test.ts +++ b/test/MediaDeviceHandler-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked } from "jest-mock"; diff --git a/test/Modal-test.ts b/test/Modal-test.ts index 611444674..a90681eed 100644 --- a/test/Modal-test.ts +++ b/test/Modal-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import Modal from "../src/Modal"; diff --git a/test/Notifier-test.ts b/test/Notifier-test.ts index 7390415e5..08a070104 100644 --- a/test/Notifier-test.ts +++ b/test/Notifier-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked, MockedObject } from "jest-mock"; import { @@ -431,15 +423,7 @@ describe("Notifier", () => { return callEvent; }; - const setGroupCallsEnabled = (val: boolean) => { - jest.spyOn(SettingsStore, "getValue").mockImplementation((name: string) => { - if (name === "feature_group_calls") return val; - }); - }; - - it("should show toast when group calls are supported", () => { - setGroupCallsEnabled(true); - + it("shows group call toast", () => { const notifyEvent = emitCallNotifyEvent(); expect(ToastStore.sharedInstance().addOrReplaceToast).toHaveBeenCalledWith( @@ -453,16 +437,7 @@ describe("Notifier", () => { ); }); - it("should not show toast when group calls are not supported", () => { - setGroupCallsEnabled(false); - - emitCallNotifyEvent(); - - expect(ToastStore.sharedInstance().addOrReplaceToast).not.toHaveBeenCalled(); - }); - it("should not show toast when group call is already connected", () => { - setGroupCallsEnabled(true); const spyCallMemberships = jest.spyOn(MatrixRTCSession, "callMembershipsForRoom").mockReturnValue([ new CallMembership( mkEvent({ @@ -491,8 +466,6 @@ describe("Notifier", () => { }); it("should not show toast when calling with non-group call event", () => { - setGroupCallsEnabled(true); - emitCallNotifyEvent("event_type"); expect(ToastStore.sharedInstance().addOrReplaceToast).not.toHaveBeenCalled(); diff --git a/test/PosthogAnalytics-test.ts b/test/PosthogAnalytics-test.ts index 31822e1c0..19ffa942a 100644 --- a/test/PosthogAnalytics-test.ts +++ b/test/PosthogAnalytics-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked } from "jest-mock"; diff --git a/test/PreferredRoomVersions-test.ts b/test/PreferredRoomVersions-test.ts index 33dc30e8b..b98c037b5 100644 --- a/test/PreferredRoomVersions-test.ts +++ b/test/PreferredRoomVersions-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { doesRoomVersionSupport, PreferredRoomVersions } from "../src/utils/PreferredRoomVersions"; diff --git a/test/Reply-test.ts b/test/Reply-test.ts index b7ae3c9ee..6ed28a355 100644 --- a/test/Reply-test.ts +++ b/test/Reply-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { diff --git a/test/RoomNotifs-test.ts b/test/RoomNotifs-test.ts index 3526acf4b..f2ce3adf6 100644 --- a/test/RoomNotifs-test.ts +++ b/test/RoomNotifs-test.ts @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked } from "jest-mock"; diff --git a/test/Rooms-test.ts b/test/Rooms-test.ts index b29d57704..ef7dca3ae 100644 --- a/test/Rooms-test.ts +++ b/test/Rooms-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked } from "jest-mock"; diff --git a/test/ScalarAuthClient-test.ts b/test/ScalarAuthClient-test.ts index aa4213c14..001a7fc96 100644 --- a/test/ScalarAuthClient-test.ts +++ b/test/ScalarAuthClient-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked } from "jest-mock"; diff --git a/test/SdkConfig-test.ts b/test/SdkConfig-test.ts index aba0e9646..257be02fa 100644 --- a/test/SdkConfig-test.ts +++ b/test/SdkConfig-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import SdkConfig, { DEFAULTS } from "../src/SdkConfig"; diff --git a/test/SecurityManager-test.ts b/test/SecurityManager-test.ts index 13d5f2f63..792f0f93a 100644 --- a/test/SecurityManager-test.ts +++ b/test/SecurityManager-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked } from "jest-mock"; diff --git a/test/SlashCommands-test.tsx b/test/SlashCommands-test.tsx index 6ef56aa7f..95ba391c3 100644 --- a/test/SlashCommands-test.tsx +++ b/test/SlashCommands-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, Room, RoomMember } from "matrix-js-sdk/src/matrix"; diff --git a/test/SlidingSyncManager-test.ts b/test/SlidingSyncManager-test.ts index 9cb30c5b6..3625bf2a1 100644 --- a/test/SlidingSyncManager-test.ts +++ b/test/SlidingSyncManager-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { SlidingSync } from "matrix-js-sdk/src/sliding-sync"; diff --git a/test/SupportedBrowser-test.ts b/test/SupportedBrowser-test.ts index f5cccf221..3ed1096cf 100644 --- a/test/SupportedBrowser-test.ts +++ b/test/SupportedBrowser-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { logger } from "matrix-js-sdk/src/logger"; @@ -72,8 +64,8 @@ describe("SupportedBrowser", () => { it.each([ // Safari 17.5 on macOS Sonoma "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15", - // Firefox 127 on macOS Sonoma - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:127.0) Gecko/20100101 Firefox/127.0", + // Firefox 128 on macOS Sonoma + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:128.0) Gecko/20100101 Firefox/128.0", // Edge 126 on Windows "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/126.0.2592.113", // Edge 126 on macOS diff --git a/test/Terms-test.tsx b/test/Terms-test.tsx index 772bb5da3..d81b784dd 100644 --- a/test/Terms-test.tsx +++ b/test/Terms-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixEvent, EventType, SERVICE_TYPES } from "matrix-js-sdk/src/matrix"; diff --git a/test/TestSdkContext.ts b/test/TestSdkContext.ts index 154881db5..bde5bffc9 100644 --- a/test/TestSdkContext.ts +++ b/test/TestSdkContext.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { SdkContextClass } from "../src/contexts/SDKContext"; diff --git a/test/TextForEvent-test.ts b/test/TextForEvent-test.ts index ce5c4a97f..66f4345a8 100644 --- a/test/TextForEvent-test.ts +++ b/test/TextForEvent-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { @@ -73,11 +65,6 @@ describe("TextForEvent", () => { }); describe("TextForPinnedEvent", () => { - beforeAll(() => { - // enable feature_pinning setting - (SettingsStore.getValue as jest.Mock).mockImplementation((feature) => feature === "feature_pinning"); - }); - it("mentions message when a single message was pinned, with no previously pinned messages", () => { const event = mockPinnedEvent(["message-1"]); const plainText = textForEvent(event, mockClient); diff --git a/test/TimezoneHandler-test.ts b/test/TimezoneHandler-test.ts new file mode 100644 index 000000000..7668d2c53 --- /dev/null +++ b/test/TimezoneHandler-test.ts @@ -0,0 +1,23 @@ +/* +Copyright 2024 New Vector Ltd. +Copyright 2022 The Matrix.org Foundation C.I.C. +Copyright 2017 Vector Creations Ltd +Copyright 2015, 2016 OpenMarket Ltd + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. +*/ + +import * as tzh from "../src/TimezoneHandler"; + +describe("TimezoneHandler", () => { + it("should support setting a user timezone", async () => { + const tz = "Europe/Paris"; + await tzh.setUserTimezone(tz); + expect(tzh.getUserTimezone()).toEqual(tz); + }); + it("Return undefined with an empty TZ", async () => { + await tzh.setUserTimezone(""); + expect(tzh.getUserTimezone()).toEqual(undefined); + }); +}); diff --git a/test/Unread-test.ts b/test/Unread-test.ts index 8d4f319a3..faefd9068 100644 --- a/test/Unread-test.ts +++ b/test/Unread-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked } from "jest-mock"; diff --git a/test/UserActivity-test.ts b/test/UserActivity-test.ts index 702414d03..2980a5fc6 100644 --- a/test/UserActivity-test.ts +++ b/test/UserActivity-test.ts @@ -1,17 +1,8 @@ /* -Copyright 2019, 2021 New Vector Ltd +Copyright 2019-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import EventEmitter from "events"; diff --git a/test/WorkerManager-test.ts b/test/WorkerManager-test.ts index 8d02c0619..11e8edacd 100644 --- a/test/WorkerManager-test.ts +++ b/test/WorkerManager-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { WorkerManager } from "../src/WorkerManager"; diff --git a/test/accessibility/KeyboardShortcutUtils-test.ts b/test/accessibility/KeyboardShortcutUtils-test.ts index 2a78f7c1b..f4a9649fc 100644 --- a/test/accessibility/KeyboardShortcutUtils-test.ts +++ b/test/accessibility/KeyboardShortcutUtils-test.ts @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 Šimon Brandner Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mockPlatformPeg, unmockPlatformPeg } from "../test-utils"; diff --git a/test/accessibility/LandmarkNavigation-test.tsx b/test/accessibility/LandmarkNavigation-test.tsx index 65d5315b3..4955e45f4 100644 --- a/test/accessibility/LandmarkNavigation-test.tsx +++ b/test/accessibility/LandmarkNavigation-test.tsx @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import { render, screen, waitFor } from "@testing-library/react"; diff --git a/test/accessibility/RovingTabIndex-test.tsx b/test/accessibility/RovingTabIndex-test.tsx index eac87a3cf..f96c3266d 100644 --- a/test/accessibility/RovingTabIndex-test.tsx +++ b/test/accessibility/RovingTabIndex-test.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020 - 2021 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020, 2021 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { HTMLAttributes } from "react"; diff --git a/test/actions/handlers/viewUserDeviceSettings-test.ts b/test/actions/handlers/viewUserDeviceSettings-test.ts index d3cdab5fc..6efa24d9b 100644 --- a/test/actions/handlers/viewUserDeviceSettings-test.ts +++ b/test/actions/handlers/viewUserDeviceSettings-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { viewUserDeviceSettings } from "../../../src/actions/handlers/viewUserDeviceSettings"; diff --git a/test/audio/Playback-test.ts b/test/audio/Playback-test.ts index d1eb1e58d..5bc1ac0f1 100644 --- a/test/audio/Playback-test.ts +++ b/test/audio/Playback-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked } from "jest-mock"; diff --git a/test/audio/VoiceMessageRecording-test.ts b/test/audio/VoiceMessageRecording-test.ts index 22cd3d44e..f9706fdfe 100644 --- a/test/audio/VoiceMessageRecording-test.ts +++ b/test/audio/VoiceMessageRecording-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked } from "jest-mock"; diff --git a/test/audio/VoiceRecording-test.ts b/test/audio/VoiceRecording-test.ts index 8c0f8fb59..e4fa29707 100644 --- a/test/audio/VoiceRecording-test.ts +++ b/test/audio/VoiceRecording-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked } from "jest-mock"; diff --git a/test/autocomplete/EmojiProvider-test.ts b/test/autocomplete/EmojiProvider-test.ts index a18951ce7..38783fb8d 100644 --- a/test/autocomplete/EmojiProvider-test.ts +++ b/test/autocomplete/EmojiProvider-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 Ryan Browne -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import EmojiProvider from "../../src/autocomplete/EmojiProvider"; diff --git a/test/autocomplete/QueryMatcher-test.ts b/test/autocomplete/QueryMatcher-test.ts index 6e32b6643..3aeb3422d 100644 --- a/test/autocomplete/QueryMatcher-test.ts +++ b/test/autocomplete/QueryMatcher-test.ts @@ -1,17 +1,8 @@ /* -Copyright 2018 New Vector Ltd +Copyright 2018-2024 New Vector Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import QueryMatcher from "../../src/autocomplete/QueryMatcher"; diff --git a/test/autocomplete/RoomProvider-test.ts b/test/autocomplete/RoomProvider-test.ts index 69c4af8bd..9a9a6cda2 100644 --- a/test/autocomplete/RoomProvider-test.ts +++ b/test/autocomplete/RoomProvider-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked } from "jest-mock"; diff --git a/test/autocomplete/SpaceProvider-test.ts b/test/autocomplete/SpaceProvider-test.ts index 59f93369a..8dc694817 100644 --- a/test/autocomplete/SpaceProvider-test.ts +++ b/test/autocomplete/SpaceProvider-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { mocked } from "jest-mock"; diff --git a/test/components/structures/AutocompleteInput-test.tsx b/test/components/structures/AutocompleteInput-test.tsx index 48c7d0560..95add8f44 100644 --- a/test/components/structures/AutocompleteInput-test.tsx +++ b/test/components/structures/AutocompleteInput-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/ContextMenu-test.ts b/test/components/structures/ContextMenu-test.ts index a60238d56..33dd42fa0 100644 --- a/test/components/structures/ContextMenu-test.ts +++ b/test/components/structures/ContextMenu-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { toLeftOf, toLeftOrRightOf, toRightOf } from "../../../src/components/structures/ContextMenu"; diff --git a/test/components/structures/FilePanel-test.tsx b/test/components/structures/FilePanel-test.tsx index 2b53c9c86..60f2c8851 100644 --- a/test/components/structures/FilePanel-test.tsx +++ b/test/components/structures/FilePanel-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/LargeLoader-test.tsx b/test/components/structures/LargeLoader-test.tsx index 539c8282a..4292ab800 100644 --- a/test/components/structures/LargeLoader-test.tsx +++ b/test/components/structures/LargeLoader-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/LeftPanel-test.tsx b/test/components/structures/LeftPanel-test.tsx index 1c990aa23..4ac4ac15e 100644 --- a/test/components/structures/LeftPanel-test.tsx +++ b/test/components/structures/LeftPanel-test.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Mikhail Aheichyk Copyright 2023 Nordeck IT + Consulting GmbH. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/LegacyCallEventGrouper-test.ts b/test/components/structures/LegacyCallEventGrouper-test.ts index ce6675c3b..158976107 100644 --- a/test/components/structures/LegacyCallEventGrouper-test.ts +++ b/test/components/structures/LegacyCallEventGrouper-test.ts @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Šimon Brandner -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { MatrixClient, MatrixEvent, EventType } from "matrix-js-sdk/src/matrix"; diff --git a/test/components/structures/LoggedInView-test.tsx b/test/components/structures/LoggedInView-test.tsx index da21ac7c9..c08812e46 100644 --- a/test/components/structures/LoggedInView-test.tsx +++ b/test/components/structures/LoggedInView-test.tsx @@ -1,17 +1,9 @@ /* -Copyright 2015 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2015-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -32,6 +24,7 @@ import SettingsStore from "../../../src/settings/SettingsStore"; import { SettingLevel } from "../../../src/settings/SettingLevel"; import { Action } from "../../../src/dispatcher/actions"; import Modal from "../../../src/Modal"; +import { SETTINGS } from "../../../src/settings/Settings"; describe("", () => { const userId = "@alice:domain.org"; @@ -45,6 +38,9 @@ describe("", () => { setPushRuleEnabled: jest.fn(), setPushRuleActions: jest.fn(), getCrypto: jest.fn().mockReturnValue(undefined), + setExtendedProfileProperty: jest.fn().mockResolvedValue(undefined), + deleteExtendedProfileProperty: jest.fn().mockResolvedValue(undefined), + doesServerSupportExtendedProfiles: jest.fn().mockResolvedValue(true), }); const mediaHandler = new MediaHandler(mockClient); const mockSdkContext = new TestSdkContext(); @@ -417,4 +413,48 @@ describe("", () => { await userEvent.keyboard("{Control>}{Alt>}h{/Control}"); expect(defaultDispatcher.dispatch).not.toHaveBeenCalledWith({ action: Action.ViewHomePage }); }); + + describe("timezone updates", () => { + const userTimezone = "Europe/London"; + const originalController = SETTINGS["userTimezonePublish"].controller; + + beforeEach(async () => { + SETTINGS["userTimezonePublish"].controller = undefined; + await SettingsStore.setValue("userTimezonePublish", null, SettingLevel.DEVICE, false); + await SettingsStore.setValue("userTimezone", null, SettingLevel.DEVICE, userTimezone); + }); + + afterEach(() => { + SETTINGS["userTimezonePublish"].controller = originalController; + }); + + it("does not update the timezone when userTimezonePublish is off", async () => { + getComponent(); + await SettingsStore.setValue("userTimezonePublish", null, SettingLevel.DEVICE, false); + expect(mockClient.deleteExtendedProfileProperty).toHaveBeenCalledWith("us.cloke.msc4175.tz"); + expect(mockClient.setExtendedProfileProperty).not.toHaveBeenCalled(); + }); + it("should set the user timezone when userTimezonePublish is enabled", async () => { + getComponent(); + await SettingsStore.setValue("userTimezonePublish", null, SettingLevel.DEVICE, true); + expect(mockClient.setExtendedProfileProperty).toHaveBeenCalledWith("us.cloke.msc4175.tz", userTimezone); + }); + + it("should set the user timezone when the timezone is changed", async () => { + const newTimezone = "Europe/Paris"; + getComponent(); + await SettingsStore.setValue("userTimezonePublish", null, SettingLevel.DEVICE, true); + expect(mockClient.setExtendedProfileProperty).toHaveBeenCalledWith("us.cloke.msc4175.tz", userTimezone); + await SettingsStore.setValue("userTimezone", null, SettingLevel.DEVICE, newTimezone); + expect(mockClient.setExtendedProfileProperty).toHaveBeenCalledWith("us.cloke.msc4175.tz", newTimezone); + }); + + it("should clear the timezone when the publish feature is turned off", async () => { + getComponent(); + await SettingsStore.setValue("userTimezonePublish", null, SettingLevel.DEVICE, true); + expect(mockClient.setExtendedProfileProperty).toHaveBeenCalledWith("us.cloke.msc4175.tz", userTimezone); + await SettingsStore.setValue("userTimezonePublish", null, SettingLevel.DEVICE, false); + expect(mockClient.deleteExtendedProfileProperty).toHaveBeenCalledWith("us.cloke.msc4175.tz"); + }); + }); }); diff --git a/test/components/structures/MainSplit-test.tsx b/test/components/structures/MainSplit-test.tsx index f32a07207..28152fefa 100644 --- a/test/components/structures/MainSplit-test.tsx +++ b/test/components/structures/MainSplit-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/MatrixChat-test.tsx b/test/components/structures/MatrixChat-test.tsx index 3b49ec213..dd4ae5de6 100644 --- a/test/components/structures/MatrixChat-test.tsx +++ b/test/components/structures/MatrixChat-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps } from "react"; @@ -63,11 +55,16 @@ import { MatrixClientPeg as peg } from "../../../src/MatrixClientPeg"; import DMRoomMap from "../../../src/utils/DMRoomMap"; import { ReleaseAnnouncementStore } from "../../../src/stores/ReleaseAnnouncementStore"; import { DRAFT_LAST_CLEANUP_KEY } from "../../../src/DraftCleaner"; +import { UIFeature } from "../../../src/settings/UIFeature"; jest.mock("matrix-js-sdk/src/oidc/authorize", () => ({ completeAuthorizationCodeGrant: jest.fn(), })); +// Stub out ThemeWatcher as the necessary bits for themes are done in element-web's index.html and thus are lacking here, +// plus JSDOM's implementation of CSSStyleDeclaration has a bunch of differences to real browsers which cause issues. +jest.mock("../../../src/settings/watchers/ThemeWatcher"); + /** The matrix versions our mock server claims to support */ const SERVER_SUPPORTED_MATRIX_VERSIONS = ["v1.1", "v1.5", "v1.6", "v1.8", "v1.9"]; @@ -624,6 +621,18 @@ describe("", () => { expect(localStorage.getItem(`mx_cider_state_${unknownRoomId}`)).toBeNull(); }); + it("should clean up wysiwyg drafts", async () => { + Date.now = jest.fn(() => timestamp); + localStorage.setItem(`mx_wysiwyg_state_${roomId}`, "fake_content"); + localStorage.setItem(`mx_wysiwyg_state_${unknownRoomId}`, "fake_content"); + await getComponentAndWaitForReady(); + mockClient.emit(ClientEvent.Sync, SyncState.Syncing, SyncState.Syncing); + // let things settle + await flushPromises(); + expect(localStorage.getItem(`mx_wysiwyg_state_${roomId}`)).not.toBeNull(); + expect(localStorage.getItem(`mx_wysiwyg_state_${unknownRoomId}`)).toBeNull(); + }); + it("should not clean up drafts before expiry", async () => { // Set the last cleanup to the recent past localStorage.setItem(`mx_cider_state_${unknownRoomId}`, "fake_content"); @@ -997,6 +1006,7 @@ describe("", () => { getUserVerificationStatus: jest .fn() .mockResolvedValue(new UserVerificationStatus(false, false, false)), + setDeviceIsolationMode: jest.fn(), }; loginClient.isCryptoEnabled.mockReturnValue(true); loginClient.getCrypto.mockReturnValue(mockCrypto as any); @@ -1033,10 +1043,13 @@ describe("", () => { }); describe("when encryption is force disabled", () => { - const unencryptedRoom = new Room("!unencrypted:server.org", loginClient, userId); - const encryptedRoom = new Room("!encrypted:server.org", loginClient, userId); + let unencryptedRoom: Room; + let encryptedRoom: Room; beforeEach(() => { + unencryptedRoom = new Room("!unencrypted:server.org", loginClient, userId); + encryptedRoom = new Room("!encrypted:server.org", loginClient, userId); + loginClient.getClientWellKnown.mockReturnValue({ "io.element.e2ee": { force_disable: true, @@ -1458,4 +1471,42 @@ describe("", () => { }); }); }); + + describe("mobile registration", () => { + const getComponentAndWaitForReady = async (): Promise => { + const renderResult = getComponent(); + // wait for welcome page chrome render + await screen.findByText("powered by Matrix"); + + // go to mobile_register page + defaultDispatcher.dispatch({ + action: "start_mobile_registration", + }); + + await flushPromises(); + + return renderResult; + }; + + const enabledMobileRegistration = (): void => { + jest.spyOn(SettingsStore, "getValue").mockImplementation((settingName: string) => { + if (settingName === "Registration.mobileRegistrationHelper") return true; + if (settingName === UIFeature.Registration) return true; + }); + }; + + it("should render welcome screen if mobile registration is not enabled in settings", async () => { + await getComponentAndWaitForReady(); + + await screen.findByText("powered by Matrix"); + }); + + it("should render mobile registration", async () => { + enabledMobileRegistration(); + + await getComponentAndWaitForReady(); + + expect(screen.getByTestId("mobile-register")).toBeInTheDocument(); + }); + }); }); diff --git a/test/components/structures/MatrixClientContextProvider-test.tsx b/test/components/structures/MatrixClientContextProvider-test.tsx index cadd0bc16..f939b90bf 100644 --- a/test/components/structures/MatrixClientContextProvider-test.tsx +++ b/test/components/structures/MatrixClientContextProvider-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { act, render } from "@testing-library/react"; diff --git a/test/components/structures/MessagePanel-test.tsx b/test/components/structures/MessagePanel-test.tsx index 23f094d4a..eddf63a17 100644 --- a/test/components/structures/MessagePanel-test.tsx +++ b/test/components/structures/MessagePanel-test.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. +Copyright 2019-2021 , 2022 The Matrix.org Foundation C.I.C. Copyright 2016 OpenMarket Ltd -Copyright 2019, 2021, 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/PictureInPictureDragger-test.tsx b/test/components/structures/PictureInPictureDragger-test.tsx index a5b840b92..db2d0dbdd 100644 --- a/test/components/structures/PictureInPictureDragger-test.tsx +++ b/test/components/structures/PictureInPictureDragger-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { MouseEventHandler } from "react"; diff --git a/test/components/structures/PipContainer-test.tsx b/test/components/structures/PipContainer-test.tsx index bac22091f..74b5ca717 100644 --- a/test/components/structures/PipContainer-test.tsx +++ b/test/components/structures/PipContainer-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/ReleaseAnnouncement-test.tsx b/test/components/structures/ReleaseAnnouncement-test.tsx index 799aa017e..f9fa4d090 100644 --- a/test/components/structures/ReleaseAnnouncement-test.tsx +++ b/test/components/structures/ReleaseAnnouncement-test.tsx @@ -1,19 +1,9 @@ /* - * + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * / + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/RightPanel-test.tsx b/test/components/structures/RightPanel-test.tsx index d7f5fbef1..2aa182513 100644 --- a/test/components/structures/RightPanel-test.tsx +++ b/test/components/structures/RightPanel-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/RoomSearchView-test.tsx b/test/components/structures/RoomSearchView-test.tsx index 497981ba2..1ad4b53b5 100644 --- a/test/components/structures/RoomSearchView-test.tsx +++ b/test/components/structures/RoomSearchView-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/RoomStatusBar-test.tsx b/test/components/structures/RoomStatusBar-test.tsx index 1919e0aea..462a20e73 100644 --- a/test/components/structures/RoomStatusBar-test.tsx +++ b/test/components/structures/RoomStatusBar-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/RoomStatusBarUnsentMessages-test.tsx b/test/components/structures/RoomStatusBarUnsentMessages-test.tsx index 6ce9ed9b4..0701a0570 100644 --- a/test/components/structures/RoomStatusBarUnsentMessages-test.tsx +++ b/test/components/structures/RoomStatusBarUnsentMessages-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/RoomView-test.tsx b/test/components/structures/RoomView-test.tsx index a97b6ef5e..e1dad1cb9 100644 --- a/test/components/structures/RoomView-test.tsx +++ b/test/components/structures/RoomView-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { createRef, RefObject } from "react"; diff --git a/test/components/structures/SpaceHierarchy-test.tsx b/test/components/structures/SpaceHierarchy-test.tsx index d25f8a6f1..da0f83f43 100644 --- a/test/components/structures/SpaceHierarchy-test.tsx +++ b/test/components/structures/SpaceHierarchy-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/TabbedView-test.tsx b/test/components/structures/TabbedView-test.tsx index 5ecf682af..e84ad9740 100644 --- a/test/components/structures/TabbedView-test.tsx +++ b/test/components/structures/TabbedView-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/ThreadPanel-test.tsx b/test/components/structures/ThreadPanel-test.tsx index f66f58ed8..1885ae913 100644 --- a/test/components/structures/ThreadPanel-test.tsx +++ b/test/components/structures/ThreadPanel-test.tsx @@ -1,17 +1,9 @@ /* -Copyright 2021 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2021-2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/ThreadView-test.tsx b/test/components/structures/ThreadView-test.tsx index d7cbfa175..f00bcb35c 100644 --- a/test/components/structures/ThreadView-test.tsx +++ b/test/components/structures/ThreadView-test.tsx @@ -1,17 +1,9 @@ /* -Copyright 2022-2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { act, getByTestId, render, RenderResult, waitFor } from "@testing-library/react"; diff --git a/test/components/structures/TimelinePanel-test.tsx b/test/components/structures/TimelinePanel-test.tsx index 0396ea68a..f3e0d8501 100644 --- a/test/components/structures/TimelinePanel-test.tsx +++ b/test/components/structures/TimelinePanel-test.tsx @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { render, waitFor, screen } from "@testing-library/react"; diff --git a/test/components/structures/UploadBar-test.tsx b/test/components/structures/UploadBar-test.tsx index b5ba14666..f3ef21818 100644 --- a/test/components/structures/UploadBar-test.tsx +++ b/test/components/structures/UploadBar-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/UserMenu-test.tsx b/test/components/structures/UserMenu-test.tsx index 6e490ad53..5ade9604a 100644 --- a/test/components/structures/UserMenu-test.tsx +++ b/test/components/structures/UserMenu-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/structures/ViewSource-test.tsx b/test/components/structures/ViewSource-test.tsx index 8f2559dff..df9c217f1 100644 --- a/test/components/structures/ViewSource-test.tsx +++ b/test/components/structures/ViewSource-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { render } from "@testing-library/react"; diff --git a/test/components/structures/__snapshots__/RoomView-test.tsx.snap b/test/components/structures/__snapshots__/RoomView-test.tsx.snap index 2419d5f40..5ee31e220 100644 --- a/test/components/structures/__snapshots__/RoomView-test.tsx.snap +++ b/test/components/structures/__snapshots__/RoomView-test.tsx.snap @@ -10,22 +10,23 @@ exports[`RoomView for a local room in state CREATING should match the snapshot 1 style="--mx-flex-display: flex; --mx-flex-direction: row; --mx-flex-align: center; --mx-flex-justify: start; --mx-flex-gap: var(--cpd-space-3x);" > + + + +
    `; + +exports[` should render 1`] = ` +
    +
    +

    + Reset your identity through your account provider and then come back and click “Retry”. +

    +
    + + +
    +
    +
    +`; diff --git a/test/components/views/avatars/DecoratedRoomAvatar-test.tsx b/test/components/views/avatars/DecoratedRoomAvatar-test.tsx index d9a7b9b16..75cd19890 100644 --- a/test/components/views/avatars/DecoratedRoomAvatar-test.tsx +++ b/test/components/views/avatars/DecoratedRoomAvatar-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { render, waitFor } from "@testing-library/react"; diff --git a/test/components/views/avatars/MemberAvatar-test.tsx b/test/components/views/avatars/MemberAvatar-test.tsx index 48c88ee29..106e4ba2b 100644 --- a/test/components/views/avatars/MemberAvatar-test.tsx +++ b/test/components/views/avatars/MemberAvatar-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { getByTestId, render, waitFor } from "@testing-library/react"; diff --git a/test/components/views/avatars/RoomAvatar-test.tsx b/test/components/views/avatars/RoomAvatar-test.tsx index b5a09c293..86fefb2e3 100644 --- a/test/components/views/avatars/RoomAvatar-test.tsx +++ b/test/components/views/avatars/RoomAvatar-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/avatars/WithPresenceIndicator-test.tsx b/test/components/views/avatars/WithPresenceIndicator-test.tsx index 27088a039..2c1e8f216 100644 --- a/test/components/views/avatars/WithPresenceIndicator-test.tsx +++ b/test/components/views/avatars/WithPresenceIndicator-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { render, waitFor } from "@testing-library/react"; diff --git a/test/components/views/beacon/BeaconListItem-test.tsx b/test/components/views/beacon/BeaconListItem-test.tsx index 10497b369..de0aeb6c9 100644 --- a/test/components/views/beacon/BeaconListItem-test.tsx +++ b/test/components/views/beacon/BeaconListItem-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/beacon/BeaconMarker-test.tsx b/test/components/views/beacon/BeaconMarker-test.tsx index 4a5b5b871..6c93153a2 100644 --- a/test/components/views/beacon/BeaconMarker-test.tsx +++ b/test/components/views/beacon/BeaconMarker-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/beacon/BeaconStatus-test.tsx b/test/components/views/beacon/BeaconStatus-test.tsx index 02ed4620b..9090e1dbb 100644 --- a/test/components/views/beacon/BeaconStatus-test.tsx +++ b/test/components/views/beacon/BeaconStatus-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/beacon/BeaconViewDialog-test.tsx b/test/components/views/beacon/BeaconViewDialog-test.tsx index 8347fca18..44b5ee488 100644 --- a/test/components/views/beacon/BeaconViewDialog-test.tsx +++ b/test/components/views/beacon/BeaconViewDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/beacon/DialogSidebar-test.tsx b/test/components/views/beacon/DialogSidebar-test.tsx index 3f1e9194e..fd5ff4ae9 100644 --- a/test/components/views/beacon/DialogSidebar-test.tsx +++ b/test/components/views/beacon/DialogSidebar-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps } from "react"; diff --git a/test/components/views/beacon/LeftPanelLiveShareWarning-test.tsx b/test/components/views/beacon/LeftPanelLiveShareWarning-test.tsx index 5cd3fad03..32cadba0d 100644 --- a/test/components/views/beacon/LeftPanelLiveShareWarning-test.tsx +++ b/test/components/views/beacon/LeftPanelLiveShareWarning-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/beacon/OwnBeaconStatus-test.tsx b/test/components/views/beacon/OwnBeaconStatus-test.tsx index 2abcbbc35..6cd198b93 100644 --- a/test/components/views/beacon/OwnBeaconStatus-test.tsx +++ b/test/components/views/beacon/OwnBeaconStatus-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/beacon/RoomCallBanner-test.tsx b/test/components/views/beacon/RoomCallBanner-test.tsx index 337d00544..d993264d5 100644 --- a/test/components/views/beacon/RoomCallBanner-test.tsx +++ b/test/components/views/beacon/RoomCallBanner-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/beacon/RoomLiveShareWarning-test.tsx b/test/components/views/beacon/RoomLiveShareWarning-test.tsx index 1432bcc81..e0d248eda 100644 --- a/test/components/views/beacon/RoomLiveShareWarning-test.tsx +++ b/test/components/views/beacon/RoomLiveShareWarning-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/beacon/ShareLatestLocation-test.tsx b/test/components/views/beacon/ShareLatestLocation-test.tsx index 654b3dc73..7742de49d 100644 --- a/test/components/views/beacon/ShareLatestLocation-test.tsx +++ b/test/components/views/beacon/ShareLatestLocation-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/beacon/StyledLiveBeaconIcon-test.tsx b/test/components/views/beacon/StyledLiveBeaconIcon-test.tsx index aa62f6d68..3c20b3832 100644 --- a/test/components/views/beacon/StyledLiveBeaconIcon-test.tsx +++ b/test/components/views/beacon/StyledLiveBeaconIcon-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/beta/BetaCard-test.tsx b/test/components/views/beta/BetaCard-test.tsx index d2c457ccf..2edb775c1 100644 --- a/test/components/views/beta/BetaCard-test.tsx +++ b/test/components/views/beta/BetaCard-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/context_menus/ContextMenu-test.tsx b/test/components/views/context_menus/ContextMenu-test.tsx index 55974d3da..b7a9360b5 100644 --- a/test/components/views/context_menus/ContextMenu-test.tsx +++ b/test/components/views/context_menus/ContextMenu-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/context_menus/EmbeddedPage-test.tsx b/test/components/views/context_menus/EmbeddedPage-test.tsx index 03c919df7..e0131e644 100644 --- a/test/components/views/context_menus/EmbeddedPage-test.tsx +++ b/test/components/views/context_menus/EmbeddedPage-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/context_menus/MessageContextMenu-test.tsx b/test/components/views/context_menus/MessageContextMenu-test.tsx index 2be71e39c..b2763c108 100644 --- a/test/components/views/context_menus/MessageContextMenu-test.tsx +++ b/test/components/views/context_menus/MessageContextMenu-test.tsx @@ -1,21 +1,13 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; -import { fireEvent, render, RenderResult } from "@testing-library/react"; +import { fireEvent, render, RenderResult, screen, waitFor } from "@testing-library/react"; import { EventStatus, MatrixEvent, @@ -28,9 +20,11 @@ import { FeatureSupport, Thread, M_POLL_KIND_DISCLOSED, + EventTimeline, } from "matrix-js-sdk/src/matrix"; import { PollStartEvent } from "matrix-js-sdk/src/extensible_events_v1/PollStartEvent"; import { mocked } from "jest-mock"; +import userEvent from "@testing-library/user-event"; import { MatrixClientPeg } from "../../../../src/MatrixClientPeg"; import RoomContext, { TimelineRenderingType } from "../../../../src/contexts/RoomContext"; @@ -83,8 +77,16 @@ describe("MessageContextMenu", () => { }); describe("message pinning", () => { + let room: Room; + beforeEach(() => { + room = makeDefaultRoom(); + jest.spyOn(SettingsStore, "getValue").mockReturnValue(true); + jest.spyOn( + room.getLiveTimeline().getState(EventTimeline.FORWARDS)!, + "mayClientSendStateEvent", + ).mockReturnValue(true); }); afterAll(() => { @@ -95,44 +97,23 @@ describe("MessageContextMenu", () => { const eventContent = createMessageEventContent("hello"); const event = new MatrixEvent({ type: EventType.RoomMessage, content: eventContent }); - const room = makeDefaultRoom(); // mock permission to disallow adding pinned messages to room - jest.spyOn(room.currentState, "mayClientSendStateEvent").mockReturnValue(false); + jest.spyOn( + room.getLiveTimeline().getState(EventTimeline.FORWARDS)!, + "mayClientSendStateEvent", + ).mockReturnValue(false); - createMenu(event, {}, {}, undefined, room); + createMenu(event, { rightClick: true }, {}, undefined, room); - expect(document.querySelector('li[aria-label="Pin"]')).toBeFalsy(); + expect(screen.queryByRole("menuitem", { name: "Pin" })).toBeFalsy(); }); it("does not show pin option for beacon_info event", () => { const deadBeaconEvent = makeBeaconInfoEvent("@alice:server.org", roomId, { isLive: false }); - const room = makeDefaultRoom(); - // mock permission to allow adding pinned messages to room - jest.spyOn(room.currentState, "mayClientSendStateEvent").mockReturnValue(true); + createMenu(deadBeaconEvent, { rightClick: true }, {}, undefined, room); - createMenu(deadBeaconEvent, {}, {}, undefined, room); - - expect(document.querySelector('li[aria-label="Pin"]')).toBeFalsy(); - }); - - it("does not show pin option when pinning feature is disabled", () => { - const eventContent = createMessageEventContent("hello"); - const pinnableEvent = new MatrixEvent({ - type: EventType.RoomMessage, - content: eventContent, - room_id: roomId, - }); - - const room = makeDefaultRoom(); - // mock permission to allow adding pinned messages to room - jest.spyOn(room.currentState, "mayClientSendStateEvent").mockReturnValue(true); - // disable pinning feature - jest.spyOn(SettingsStore, "getValue").mockReturnValue(false); - - createMenu(pinnableEvent, {}, {}, undefined, room); - - expect(document.querySelector('li[aria-label="Pin"]')).toBeFalsy(); + expect(screen.queryByRole("menuitem", { name: "Pin" })).toBeFalsy(); }); it("shows pin option when pinning feature is enabled", () => { @@ -143,16 +124,12 @@ describe("MessageContextMenu", () => { room_id: roomId, }); - const room = makeDefaultRoom(); - // mock permission to allow adding pinned messages to room - jest.spyOn(room.currentState, "mayClientSendStateEvent").mockReturnValue(true); + createMenu(pinnableEvent, { rightClick: true }, {}, undefined, room); - createMenu(pinnableEvent, {}, {}, undefined, room); - - expect(document.querySelector('li[aria-label="Pin"]')).toBeTruthy(); + expect(screen.getByRole("menuitem", { name: "Pin" })).toBeTruthy(); }); - it("pins event on pin option click", () => { + it("pins event on pin option click", async () => { const onFinished = jest.fn(); const eventContent = createMessageEventContent("hello"); const pinnableEvent = new MatrixEvent({ @@ -162,43 +139,48 @@ describe("MessageContextMenu", () => { }); pinnableEvent.event.event_id = "!3"; const client = MatrixClientPeg.safeGet(); - const room = makeDefaultRoom(); - // mock permission to allow adding pinned messages to room - jest.spyOn(room.currentState, "mayClientSendStateEvent").mockReturnValue(true); + jest.spyOn(room.getLiveTimeline().getState(EventTimeline.FORWARDS)!, "getStateEvents").mockReturnValue({ + // @ts-ignore + getContent: () => ({ pinned: ["!1", "!2"] }), + }); // mock read pins account data const pinsAccountData = new MatrixEvent({ content: { event_ids: ["!1", "!2"] } }); jest.spyOn(room, "getAccountData").mockReturnValue(pinsAccountData); - createMenu(pinnableEvent, { onFinished }, {}, undefined, room); + createMenu(pinnableEvent, { onFinished, rightClick: true }, {}, undefined, room); - fireEvent.click(document.querySelector('li[aria-label="Pin"]')!); + await userEvent.click(screen.getByRole("menuitem", { name: "Pin" })); // added to account data - expect(client.setRoomAccountData).toHaveBeenCalledWith(roomId, ReadPinsEventId, { - event_ids: [ - // from account data - "!1", - "!2", - pinnableEvent.getId(), - ], - }); + await waitFor(() => + expect(client.setRoomAccountData).toHaveBeenCalledWith(roomId, ReadPinsEventId, { + event_ids: [ + // from account data + "!1", + "!2", + pinnableEvent.getId(), + ], + }), + ); // add to room's pins - expect(client.sendStateEvent).toHaveBeenCalledWith( - roomId, - EventType.RoomPinnedEvents, - { - pinned: [pinnableEvent.getId()], - }, - "", + await waitFor(() => + expect(client.sendStateEvent).toHaveBeenCalledWith( + roomId, + EventType.RoomPinnedEvents, + { + pinned: ["!1", "!2", pinnableEvent.getId()], + }, + "", + ), ); expect(onFinished).toHaveBeenCalled(); }); - it("unpins event on pin option click when event is pinned", () => { + it("unpins event on pin option click when event is pinned", async () => { const eventContent = createMessageEventContent("hello"); const pinnableEvent = new MatrixEvent({ type: EventType.RoomMessage, @@ -207,7 +189,6 @@ describe("MessageContextMenu", () => { }); pinnableEvent.event.event_id = "!3"; const client = MatrixClientPeg.safeGet(); - const room = makeDefaultRoom(); // make the event already pinned in the room const pinEvent = new MatrixEvent({ @@ -216,18 +197,15 @@ describe("MessageContextMenu", () => { state_key: "", content: { pinned: [pinnableEvent.getId(), "!another-event"] }, }); - room.currentState.setStateEvents([pinEvent]); - - // mock permission to allow adding pinned messages to room - jest.spyOn(room.currentState, "mayClientSendStateEvent").mockReturnValue(true); + room.getLiveTimeline().getState(EventTimeline.FORWARDS)!.setStateEvents([pinEvent]); // mock read pins account data const pinsAccountData = new MatrixEvent({ content: { event_ids: ["!1", "!2"] } }); jest.spyOn(room, "getAccountData").mockReturnValue(pinsAccountData); - createMenu(pinnableEvent, {}, {}, undefined, room); + createMenu(pinnableEvent, { rightClick: true }, {}, undefined, room); - fireEvent.click(document.querySelector('li[aria-label="Unpin"]')!); + await userEvent.click(screen.getByRole("menuitem", { name: "Unpin" })); expect(client.setRoomAccountData).not.toHaveBeenCalled(); diff --git a/test/components/views/context_menus/RoomContextMenu-test.tsx b/test/components/views/context_menus/RoomContextMenu-test.tsx index 535e03f51..3644d2c32 100644 --- a/test/components/views/context_menus/RoomContextMenu-test.tsx +++ b/test/components/views/context_menus/RoomContextMenu-test.tsx @@ -1,19 +1,11 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Mikhail Aheichyk Copyright 2023 Nordeck IT + Consulting GmbH. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { render, screen } from "@testing-library/react"; diff --git a/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx b/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx index c64e0b2e6..42ea5c180 100644 --- a/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx +++ b/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { fireEvent, getByLabelText, render, screen } from "@testing-library/react"; diff --git a/test/components/views/context_menus/SpaceContextMenu-test.tsx b/test/components/views/context_menus/SpaceContextMenu-test.tsx index 9e787b8bd..696904c40 100644 --- a/test/components/views/context_menus/SpaceContextMenu-test.tsx +++ b/test/components/views/context_menus/SpaceContextMenu-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/context_menus/ThreadListContextMenu-test.tsx b/test/components/views/context_menus/ThreadListContextMenu-test.tsx index 01bf71041..55f8e8fd5 100644 --- a/test/components/views/context_menus/ThreadListContextMenu-test.tsx +++ b/test/components/views/context_menus/ThreadListContextMenu-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { getByTestId, render, screen } from "@testing-library/react"; diff --git a/test/components/views/context_menus/WidgetContextMenu-test.tsx b/test/components/views/context_menus/WidgetContextMenu-test.tsx index aa041e04b..2cec232d0 100644 --- a/test/components/views/context_menus/WidgetContextMenu-test.tsx +++ b/test/components/views/context_menus/WidgetContextMenu-test.tsx @@ -1,18 +1,10 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 Mikhail Aheichyk Copyright 2023 Nordeck IT + Consulting GmbH. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps } from "react"; diff --git a/test/components/views/dialogs/AccessSecretStorageDialog-test.tsx b/test/components/views/dialogs/AccessSecretStorageDialog-test.tsx index 1475908bb..c07808ac1 100644 --- a/test/components/views/dialogs/AccessSecretStorageDialog-test.tsx +++ b/test/components/views/dialogs/AccessSecretStorageDialog-test.tsx @@ -1,17 +1,9 @@ /* -Copyright 2020, 2022 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2020-2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ComponentProps } from "react"; @@ -66,15 +58,12 @@ describe("AccessSecretStorageDialog", () => { beforeEach(() => { mockClient = getMockClientWithEventEmitter({ - keyBackupKeyFromRecoveryKey: jest.fn(), checkSecretStorageKey: jest.fn(), - isValidRecoveryKey: jest.fn(), }); }); it("Closes the dialog when the form is submitted with a valid key", async () => { mockClient.checkSecretStorageKey.mockResolvedValue(true); - mockClient.isValidRecoveryKey.mockReturnValue(true); const onFinished = jest.fn(); const checkPrivateKey = jest.fn().mockResolvedValue(true); @@ -96,8 +85,8 @@ describe("AccessSecretStorageDialog", () => { const checkPrivateKey = jest.fn().mockResolvedValue(true); renderComponent({ onFinished, checkPrivateKey }); - mockClient.keyBackupKeyFromRecoveryKey.mockImplementation(() => { - throw new Error("that's no key"); + mockClient.checkSecretStorageKey.mockImplementation(() => { + throw new Error("invalid key"); }); await enterSecurityKey(); @@ -123,7 +112,6 @@ describe("AccessSecretStorageDialog", () => { }; const checkPrivateKey = jest.fn().mockResolvedValue(false); renderComponent({ checkPrivateKey, keyInfo }); - mockClient.isValidRecoveryKey.mockReturnValue(false); await enterSecurityKey("Security Phrase"); expect(screen.getByPlaceholderText("Security Phrase")).toHaveValue(securityKey); diff --git a/test/components/views/dialogs/AppDownloadDialog-test.tsx b/test/components/views/dialogs/AppDownloadDialog-test.tsx index aa9abf6be..ed4b54af1 100644 --- a/test/components/views/dialogs/AppDownloadDialog-test.tsx +++ b/test/components/views/dialogs/AppDownloadDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/AskInviteAnywayDialog-test.tsx b/test/components/views/dialogs/AskInviteAnywayDialog-test.tsx index 9ff4c315d..7643a0a45 100644 --- a/test/components/views/dialogs/AskInviteAnywayDialog-test.tsx +++ b/test/components/views/dialogs/AskInviteAnywayDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { getByText, render, RenderResult } from "@testing-library/react"; diff --git a/test/components/views/dialogs/ChangelogDialog-test.tsx b/test/components/views/dialogs/ChangelogDialog-test.tsx index a8f394f64..9a8519b44 100644 --- a/test/components/views/dialogs/ChangelogDialog-test.tsx +++ b/test/components/views/dialogs/ChangelogDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; @@ -22,13 +14,13 @@ import ChangelogDialog from "../../../../src/components/views/dialogs/ChangelogD describe("", () => { it("should fetch github proxy url for each repo with old and new version strings", async () => { - const webUrl = "https://riot.im/github/repos/vector-im/element-web/compare/oldsha1...newsha1"; + const webUrl = "https://riot.im/github/repos/element-hq/element-web/compare/oldsha1...newsha1"; fetchMock.get(webUrl, { - url: "https://api.github.com/repos/vector-im/element-web/compare/master...develop", - html_url: "https://github.com/vector-im/element-web/compare/master...develop", - permalink_url: "https://github.com/vector-im/element-web/compare/vector-im:72ca95e...vector-im:8891698", - diff_url: "https://github.com/vector-im/element-web/compare/master...develop.diff", - patch_url: "https://github.com/vector-im/element-web/compare/master...develop.patch", + url: "https://api.github.com/repos/element-hq/element-web/compare/master...develop", + html_url: "https://github.com/element-hq/element-web/compare/master...develop", + permalink_url: "https://github.com/element-hq/element-web/compare/vector-im:72ca95e...vector-im:8891698", + diff_url: "https://github.com/element-hq/element-web/compare/master...develop.diff", + patch_url: "https://github.com/element-hq/element-web/compare/master...develop.patch", base_commit: {}, merge_base_commit: {}, status: "ahead", @@ -38,19 +30,19 @@ describe("", () => { commits: [ { sha: "commit-sha", - html_url: "https://api.github.com/repos/vector-im/element-web/commit/commit-sha", + html_url: "https://api.github.com/repos/element-hq/element-web/commit/commit-sha", commit: { message: "This is the first commit message" }, }, ], files: [], }); - const reactUrl = "https://riot.im/github/repos/matrix-org/matrix-react-sdk/compare/oldsha2...newsha2"; + const reactUrl = "https://riot.im/github/repos/element-hq/matrix-react-sdk/compare/oldsha2...newsha2"; fetchMock.get(reactUrl, { - url: "https://api.github.com/repos/matrix-org/matrix-react-sdk/compare/master...develop", - html_url: "https://github.com/matrix-org/matrix-react-sdk/compare/master...develop", - permalink_url: "https://github.com/matrix-org/matrix-react-sdk/compare/matrix-org:cdb00...matrix-org:4a926", - diff_url: "https://github.com/matrix-org/matrix-react-sdk/compare/master...develop.diff", - patch_url: "https://github.com/matrix-org/matrix-react-sdk/compare/master...develop.patch", + url: "https://api.github.com/repos/element-hq/matrix-react-sdk/compare/master...develop", + html_url: "https://github.com/element-hq/matrix-react-sdk/compare/master...develop", + permalink_url: "https://github.com/element-hq/matrix-react-sdk/compare/matrix-org:cdb00...matrix-org:4a926", + diff_url: "https://github.com/element-hq/matrix-react-sdk/compare/master...develop.diff", + patch_url: "https://github.com/element-hq/matrix-react-sdk/compare/master...develop.patch", base_commit: {}, merge_base_commit: {}, status: "ahead", @@ -60,7 +52,7 @@ describe("", () => { commits: [ { sha: "commit-sha0", - html_url: "https://api.github.com/repos/matrix-org/matrix-react-sdk/commit/commit-sha", + html_url: "https://api.github.com/repos/element-hq/matrix-react-sdk/commit/commit-sha", commit: { message: "This is a commit message" }, }, ], diff --git a/test/components/views/dialogs/ConfirmRedactDialog-test.tsx b/test/components/views/dialogs/ConfirmRedactDialog-test.tsx index 6623e5a3b..b75accda1 100644 --- a/test/components/views/dialogs/ConfirmRedactDialog-test.tsx +++ b/test/components/views/dialogs/ConfirmRedactDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { Feature, ServerSupport } from "matrix-js-sdk/src/feature"; diff --git a/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx b/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx index c87e2103c..ba1be7d45 100644 --- a/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx +++ b/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/CreateRoomDialog-test.tsx b/test/components/views/dialogs/CreateRoomDialog-test.tsx index 68bcef48c..d05467955 100644 --- a/test/components/views/dialogs/CreateRoomDialog-test.tsx +++ b/test/components/views/dialogs/CreateRoomDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/DevtoolsDialog-test.tsx b/test/components/views/dialogs/DevtoolsDialog-test.tsx index 6a46a707f..09a1a1895 100644 --- a/test/components/views/dialogs/DevtoolsDialog-test.tsx +++ b/test/components/views/dialogs/DevtoolsDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/ExportDialog-test.tsx b/test/components/views/dialogs/ExportDialog-test.tsx index 7ac59d242..f30d37799 100644 --- a/test/components/views/dialogs/ExportDialog-test.tsx +++ b/test/components/views/dialogs/ExportDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/FeedbackDialog-test.tsx b/test/components/views/dialogs/FeedbackDialog-test.tsx index 73dadd00b..12327f993 100644 --- a/test/components/views/dialogs/FeedbackDialog-test.tsx +++ b/test/components/views/dialogs/FeedbackDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/ForwardDialog-test.tsx b/test/components/views/dialogs/ForwardDialog-test.tsx index c28d19ae6..c544359b8 100644 --- a/test/components/views/dialogs/ForwardDialog-test.tsx +++ b/test/components/views/dialogs/ForwardDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2021 Robin Townsend -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/IncomingSasDialog-test.tsx b/test/components/views/dialogs/IncomingSasDialog-test.tsx index e33ad752b..0b5c771db 100644 --- a/test/components/views/dialogs/IncomingSasDialog-test.tsx +++ b/test/components/views/dialogs/IncomingSasDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import { act, render } from "@testing-library/react"; diff --git a/test/components/views/dialogs/InteractiveAuthDialog-test.tsx b/test/components/views/dialogs/InteractiveAuthDialog-test.tsx index 76a6607ed..2f8d95190 100644 --- a/test/components/views/dialogs/InteractiveAuthDialog-test.tsx +++ b/test/components/views/dialogs/InteractiveAuthDialog-test.tsx @@ -1,18 +1,10 @@ /* -Copyright 2016 OpenMarket Ltd +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. +Copyright 2016 OpenMarket Ltd -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/InviteDialog-test.tsx b/test/components/views/dialogs/InviteDialog-test.tsx index e55dbf050..d799eadac 100644 --- a/test/components/views/dialogs/InviteDialog-test.tsx +++ b/test/components/views/dialogs/InviteDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/LogoutDialog-test.tsx b/test/components/views/dialogs/LogoutDialog-test.tsx index c40c9ad89..68087dc75 100644 --- a/test/components/views/dialogs/LogoutDialog-test.tsx +++ b/test/components/views/dialogs/LogoutDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/ManageRestrictedJoinRuleDialog-test.tsx b/test/components/views/dialogs/ManageRestrictedJoinRuleDialog-test.tsx index 0605b8f9e..d35f7f9fc 100644 --- a/test/components/views/dialogs/ManageRestrictedJoinRuleDialog-test.tsx +++ b/test/components/views/dialogs/ManageRestrictedJoinRuleDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/ManualDeviceKeyVerificationDialog-test.tsx b/test/components/views/dialogs/ManualDeviceKeyVerificationDialog-test.tsx index c411c2caa..46e91b0cf 100644 --- a/test/components/views/dialogs/ManualDeviceKeyVerificationDialog-test.tsx +++ b/test/components/views/dialogs/ManualDeviceKeyVerificationDialog-test.tsx @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2023 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/MessageEditHistoryDialog-test.tsx b/test/components/views/dialogs/MessageEditHistoryDialog-test.tsx index f306c856f..34e369603 100644 --- a/test/components/views/dialogs/MessageEditHistoryDialog-test.tsx +++ b/test/components/views/dialogs/MessageEditHistoryDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/RoomSettingsDialog-test.tsx b/test/components/views/dialogs/RoomSettingsDialog-test.tsx index 4d53e714c..90a38d11b 100644 --- a/test/components/views/dialogs/RoomSettingsDialog-test.tsx +++ b/test/components/views/dialogs/RoomSettingsDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/ServerPickerDialog-test.tsx b/test/components/views/dialogs/ServerPickerDialog-test.tsx index 0ca923d9c..a344fdb40 100644 --- a/test/components/views/dialogs/ServerPickerDialog-test.tsx +++ b/test/components/views/dialogs/ServerPickerDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/ShareDialog-test.tsx b/test/components/views/dialogs/ShareDialog-test.tsx index 06d6c30de..ff29ca21b 100644 --- a/test/components/views/dialogs/ShareDialog-test.tsx +++ b/test/components/views/dialogs/ShareDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/SpotlightDialog-test.tsx b/test/components/views/dialogs/SpotlightDialog-test.tsx index f8fe3c00a..987cc94df 100644 --- a/test/components/views/dialogs/SpotlightDialog-test.tsx +++ b/test/components/views/dialogs/SpotlightDialog-test.tsx @@ -1,17 +1,9 @@ /* -Copyright 2022 - 2023 The Matrix.org Foundation C.I.C. +Copyright 2024 New Vector Ltd. +Copyright 2022, 2023 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/UnpinAllDialog-test.tsx b/test/components/views/dialogs/UnpinAllDialog-test.tsx index 95018cc72..385f803c1 100644 --- a/test/components/views/dialogs/UnpinAllDialog-test.tsx +++ b/test/components/views/dialogs/UnpinAllDialog-test.tsx @@ -1,17 +1,9 @@ /* + * Copyright 2024 New Vector Ltd. * Copyright 2024 The Matrix.org Foundation C.I.C. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. */ import React from "react"; diff --git a/test/components/views/dialogs/UserSettingsDialog-test.tsx b/test/components/views/dialogs/UserSettingsDialog-test.tsx index 9da7f7ccf..852dd7429 100644 --- a/test/components/views/dialogs/UserSettingsDialog-test.tsx +++ b/test/components/views/dialogs/UserSettingsDialog-test.tsx @@ -1,17 +1,9 @@ /* +Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. */ import React, { ReactElement } from "react"; diff --git a/test/components/views/dialogs/__snapshots__/ChangelogDialog-test.tsx.snap b/test/components/views/dialogs/__snapshots__/ChangelogDialog-test.tsx.snap index 11e0c2135..d4609d616 100644 --- a/test/components/views/dialogs/__snapshots__/ChangelogDialog-test.tsx.snap +++ b/test/components/views/dialogs/__snapshots__/ChangelogDialog-test.tsx.snap @@ -35,14 +35,14 @@ exports[` should fetch github proxy url for each repo with ol

    - vector-im/element-web + element-hq/element-web