1.0#54
Open
mjkatgithub wants to merge 50 commits into
Open
Conversation
* Refactor chat UI for i18n and theme settings - Update nuxt.config.ts and remove the unused test-utils module. - Improve Vitest integration configuration for reliable setup. - Add useAppI18n to manage translations and locale state. - Add useThemePreference to persist light/dark/system selection. - Apply translated labels across login, chat, and settings pages. - Add member and room navigation components for chat layout. - Refine shell background styles and interaction states. - Add favicon asset and register it in app head metadata. - Organize space and room handling for the new sidebar flow. * Update CHANGELOG and enhance chat UI components - Add a four-column chat layout with responsive sidebars and overlays. - Introduce a compact and expanded space rail with a create-space stub. - Add account settings and space settings base pages. - Add member presence badges and persist theme preference locally. - Refine shell styling and improve space navigation interactions. - Fix space parent mapping and use authenticated media avatar URLs. * Enhance chat presence, receipts, and smoke tests - Add presence selection in account settings with server capability checks. - Show event notices and improve read receipt avatar rendering in chat. - Reduce receipt avatar size and pin each reader to last-read message. - Add @smoke E2E tags and a dedicated smoke test npm script. - Ignore generated coverage and cucumber report artifacts in git. * Add GitHub CI, E2E env setup, and test docs * Fix CI Playwright dependency installation * Remove unused Nuxt test-utils to fix CI * Add note on Nuxt test-utils in README.md to clarify its exclusion from the test runtime * Update changelog for Phase 2 completion - Add Phase 2 notes for presence, notices, and read receipts. - Document E2E env setup, smoke tests, and CI lanes. - Note CI dependency fix after removing unused Nuxt test-utils. * Update CI workflow conditions for job execution - Modify conditions for the 'Fast lane' job to exclude master branch pushes and specific pull requests. - Adjust 'Full lane' job conditions to only run on master branch pushes and relevant pull requests, as well as scheduled events and specific workflow dispatch inputs.
* Implement E2EE crypto init and device verification Initialize Rust crypto WASM and recover from account-mismatched crypto stores. Persist session and device IDs, and reuse device IDs only for same-user logins. Add account verification UI with SAS actions and timeout-safe flow handling. Map encrypted timeline events with robust undecryptable fallbacks and throttle timeline reloads. Add unit and integration tests plus i18n strings for E2EE states. * Add TypeScript configuration for test files Create a new tsconfig.json in the tests directory, extending the main Nuxt configuration. This includes compiler options for Vitest globals and specifies the inclusion of TypeScript and related file types for testing.
* feat: Implement chat page with Matrix client integration for room, space, and message display, alongside new utilities and tests. * feat: Add chat page with message list component, media handling, and chat timeline processing utilities. * Improve image message handling and test coverage Render image messages with preview media and lightbox support. Add timeline tests for mixed, invalid, GIF, and encrypted images. Add mediaUtils unit tests for fetch, cache, revoke, and decryption. Document manual e2e checks for image rendering and fallback behavior. * Add E2EE image sending from chat input * Enhance encryption handling in Matrix client - Introduce `toUnpaddedBase64` function for consistent base64 encoding without padding. - Update `encryptAttachmentData` to use unpadded base64 for IV and hash. - Add `isRoomEncrypted` function to determine room encryption state. - Modify image message handling to check room encryption status before sending. - Improve unit tests to validate encryption behavior and ensure proper handling of unencrypted rooms. * Update MsgType in Matrix client mock to include Image support - Extend the MsgType object in the Matrix client mock to support 'm.image' alongside 'm.text'. - This change enhances the testing capabilities for image message handling in the unit tests.
- Add chat image messages with inline preview and lightbox. - Add E2EE image sending from chat input. - Add media utilities for encrypted media operations. - Expand unit and integration tests for media utilities and timelines. - Use unpadded base64 for Matrix attachment IV and hash values. - Check room encryption before creating image media events.
* add changelog check workflow * Refactor changelog workflow to enforce changelog policy based on target branch. Added checks for Unreleased entries and version section requirements for PRs into develop and master branches.
* Implement message reply feature in chat - Add MessageActionBar component for reply actions. - Enhance MessageInput to handle reply context and emit cancel reply event. - Update MessageList to display reply previews and emit reply events. - Modify useMatrixClient to support sending messages with reply metadata. - Update i18n strings for reply actions and context. - Add tests for reply functionality in MessageInput and MessageList components. - Extend chat timeline utilities to map reply metadata from events. * Add MessageItem component for chat message rendering - Introduce MessageItem.vue to encapsulate message display logic, including handling of notices, replies, and media. - Refactor MessageList.vue to utilize MessageItem for rendering individual messages, improving code organization and readability. - Maintain existing functionality while enhancing the structure for future features. * Enhance chat functionality with message replies and interaction components - Add support for message replies using Matrix `m.in_reply_to` relation payload. - Implement reply mode in chat composer, featuring a preview and explicit cancel action. - Introduce a message interaction bar component for hover and focus actions. - Modularize message list rendering with dedicated `ChatMessageItem` and reusable `ChatMessageActionBar` components.
* Refactor E2E testing setup and enhance Synapse integration - Update package.json to streamline E2E test commands and add new scripts for managing Synapse. - Modify CI workflow to remove unnecessary environment file creation and verify Docker availability. - Introduce new E2E test scenarios for message handling, including replies, image rendering, and fallback behavior. - Implement runtime scripts for managing Synapse lifecycle and seeding test data. - Add support for loading environment variables from multiple sources for E2E tests. - Create Docker Compose configuration for Synapse to facilitate local testing. - Enhance step definitions for Cucumber tests to cover new scenarios and improve error handling. * Remove unused Synapse management scripts from package.json and enhance image upload functionality in runtime-seed-synapse.mjs. Update Docker Compose configuration by removing redundant service definitions for Synapse. * Refactor E2E chat tests by removing redundant environment setup steps and enhancing scenario descriptions. Introduce validation for Synapse environment variables in the test hooks to ensure necessary configurations are present before running tests. * Remove deprecated chat-synapse step definitions and consolidate login functionality into login.steps.mjs. Enhance E2E test coverage for chat interactions, including message visibility, image previews, and reply handling. * Enhance E2E testing and Synapse integration - Introduce a Synapse-backed E2E orchestration script for streamlined test execution. - Add local runtime scripts for environment management and test seeding. - Update Docker Compose setup for Synapse to support local and CI testing. - Expand E2E scenarios to cover chat functionalities including E2EE fallback, image rendering, and reply handling. - Refactor CI workflow to run E2E tests against local Dockerized Synapse without requiring external credentials. - Consolidate Synapse-specific step definitions and improve environment validation for seeded-room scenarios. - Fix issues with Docker configuration and ensure reliable image event handling. * Add member presence indicator functionality to E2E chat tests - Introduce a new scenario outline to validate that the member presence indicator reflects the correct status based on user settings. - Implement step definitions for setting user presence and verifying the corresponding status indicator in the chat interface. - Normalize presence values and map them to appropriate CSS classes for visual representation in the chat UI. * Update CHANGELOG to include new E2E presence scenarios for chat functionality - Add entries for executable chat E2E presence scenarios covering standard member states (online, away, offline) with sidebar status-dot verification.
* Implement message reactions feature in chat - Add support for adding and removing reactions to messages in the chat interface. - Enhance MessageItem and MessageActionBar components to handle reaction events. - Update useMatrixClient to manage sending and toggling reactions. - Introduce utility functions for aggregating reactions in chat timelines. - Expand E2E tests to cover scenarios for adding and removing reactions. - Add unit tests for reaction handling in MessageItem component and related utilities. * Implement emoji reaction picker and refactor chat components - Introduce a new ReactionEmojiPicker component for selecting emojis in chat. - Refactor MessageActionBar to utilize the new emoji picker and remove custom emoji input. - Update MessageItem and MessageList components to pass current user ID and frequent scope key for emoji tracking. - Enhance emoji handling by integrating frequent emoji usage storage and selection. - Add unit tests for the ReactionEmojiPicker to ensure functionality and persistence of frequent emoji usage. * Enhance message reactions and chat UI components - Introduce support for message reactions with add/remove functionality, grouped emoji counters, and live updates in the timeline. - Implement an advanced emoji picker with category tabs and shortcode conversion for user-frequent emojis. - Update MessageActionBar to feature icon-only controls with a compact design and tooltips. - Refactor chat page media logic into a reusable `useChatMedia` hook to optimize performance and maintainability. - Expand unit and E2E tests to cover new reaction features and UI behavior.
* Implement session restore gating at startup - Add explicit restore state lifecycle in useMatrixClient - Show a global blocking restore modal during startup loading - Add global auth middleware that waits for restore completion - Redirect unauthenticated protected routes to root (/) - Remove conflicting page-level auth redirects to prevent flicker - Align index route behavior with restore-aware navigation - Extend unit and e2e tests for restore and redirect flows * Update CHANGELOG with session restore enhancements and global auth middleware - Document session restore gating with explicit lifecycle state in useMatrixClient. - Add global loading modal during session restore. - Include global auth middleware for protected routes with restore-aware redirects. - Update unit tests for restore-state transitions and global auth middleware. - Adjust root route behavior to wait for session restore before navigation decisions. - Fix protected route redirects to prevent startup auth flicker.
* Update feature issue template to clarify branch naming conventions for features and bug fixes * Add GitHub bug issue template for improved bug tracking and planning - Introduce a dedicated bug issue template at `.github/ISSUE_TEMPLATE/bug.md` with sections for goal, scope, branch guidance, bug details, acceptance criteria, and testing checklist. - Update CHANGELOG to reflect the addition of the bug issue template.
- Fix E2EE decryption regressions by reusing remembered Matrix device IDs for the same account and homeserver, while preventing reuse across different homeservers. - Update `useMatrixClient` to read and write stored device information, ensuring proper device ID handling during login. - Add unit tests to verify device ID reuse logic and ensure correct behavior across different user and homeserver scenarios. - Update CHANGELOG to reflect these enhancements and fixes.
* Enhance root landing page and add unit tests - Introduce a new root landing page at `/` featuring hero content, feature cards, and a download call-to-action placeholder. - Add dedicated background logo assets for the landing page. - Implement unit tests for the landing page's restore and redirect behavior. - Update i18n keys and landing copy to align with finalized content. - Ensure landing content rendering is gated by restore-aware logic for unauthenticated users. * Update navigation after logout and add home button to login page - Change logout behavior to redirect to the root (/) instead of the login page. - Introduce a new home button on the login page for easier navigation back to the main space.
…ion (#51) * Enhance chat message list with infinite scroll and viewport preservation - Introduce IntersectionObserver to detect scroll events for reaching the top and bottom of the message list. - Add new props for loading states and viewport management, including `loadingNewer`, `centerOnMessageId`, and `preserveViewportOnPrepend`. - Implement logic to emit events when the top or bottom of the message list is reached, allowing for dynamic loading of messages. - Refactor message loading logic to support windowed message display based on read anchors and user interactions. - Update unit tests to cover new scrolling behavior and viewport preservation features. * Update CHANGELOG with chat enhancements and infinite scroll features - Document changes to the chat timeline, including a bounded initial message window to improve loading experience. - Note the transition from button-based pagination to bidirectional infinite scroll for chat history. - Highlight the new initial message viewport behavior, centering around the user's last-read event when applicable.
- Introduced a new LICENSE file containing the full text of the GNU Affero General Public License v3.0. - Updated README.md to reflect the project's licensing under AGPL-3.0-or-later, directing users to the LICENSE file for details.
) * Add signup functionality and enhance user experience - Introduce a new signup page with form fields for email, homeserver, username, and password. - Implement registration logic in the `useMatrixClient` composable, handling email verification and signup availability errors. - Update the landing page and login page to include navigation to the signup page. - Add translations for new authentication messages in English and German. - Create E2E tests for signup scenarios, ensuring proper navigation and form visibility. - Add unit tests for the signup page to validate registration flow and error handling. * Enhance homeserver connection handling and user feedback - Introduce a new connection hint message for users when homeserver access fails, providing guidance on using HTTPS for public servers. - Update `useMatrixClient` to normalize homeserver URLs, ensuring HTTP to HTTPS upgrades for public hostnames to prevent CORS issues. - Modify login and signup error handling to display the new connection hint message when relevant errors occur. - Add unit tests to verify the new homeserver URL normalization and error handling logic. - Update translations for the new connection hint message in English and German. * Update CHANGELOG to reflect new features and improvements - Added MVP signup page with Matrix registration and user-facing error feedback. - Implemented a post-signup success banner on the login page. - Normalized homeserver base URL to upgrade public HTTP to HTTPS, preventing CORS failures in the browser.
* Add onboarding components for chat functionality - Introduce `ChatOnboardingPanel`, `ChatDmStartPanel`, and `ChatPublicRoomsPanel` to facilitate user onboarding in the chat interface. - Implement direct message initiation and public room exploration features, enhancing user experience during the onboarding process. - Update translations in `useAppI18n` to support new onboarding text. - Add a new route for creating rooms, ensuring proper navigation and user flow. - Enhance the `auth.global` middleware to protect new routes, ensuring only authenticated users can access them. - Update unit tests to cover new components and functionalities, ensuring robust testing of onboarding features. * Update CHANGELOG to reflect new onboarding features and enhancements - Document the addition of onboarding panels for chat functionality, including direct message initiation, public room discovery, and room creation. - Highlight changes to direct message resolution and global auth middleware for improved user experience and security. - Include updates on unit test coverage for new components and functionalities.
* Enhance signup process with email verification and error handling - Introduce a new email verification flow in the signup process, allowing users to confirm their email addresses before completing registration. - Update `useMatrixClient` to handle email verification errors and provide user feedback for various signup scenarios. - Add new translations for email verification messages in both English and German. - Implement a dedicated verification page to finalize the signup process after email confirmation. - Create E2E tests for the email verification flow, ensuring proper navigation and error handling during the signup process. - Update the CHANGELOG to reflect the new email verification feature and related enhancements. * Enhance email signup process and E2E testing - Implement a new email signup flow with session storage for pending states, dedicated registration helpers, and a two-step signup process including email confirmation. - Add an auto-finalize page for email verification and corresponding i18n keys. - Integrate MailHog for E2E testing alongside Synapse, with optional homeserver overrides for email and SMTP. - Update E2E test configurations to include new email signup scenarios and provide dedicated scripts for running these tests. - Document changes in the CHANGELOG to reflect the new email signup features and E2E enhancements.
- Introduce a new reCAPTCHA UIA stage (`m.login.recaptcha`) for user signup, enhancing security with consent-gated script loading and optional iubenda hooks. - Add optional Synapse-backed E2E for registration captcha, documented in `tests/e2e/RECAPTCHA-SIGNUP.md`. - Create a new `SignupRecaptchaStep` component for handling reCAPTCHA verification during signup. - Update `useMatrixClient` and related composables to manage reCAPTCHA state and responses. - Enhance translations in `useAppI18n` for reCAPTCHA-related messages in both English and German. - Update CHANGELOG to reflect the addition of reCAPTCHA functionality and related enhancements.
) * Enhance signup process with registration token and terms acceptance - Introduce a new registration token stage in the signup flow, allowing users to input a token before proceeding. - Implement terms acceptance as a required step, with a dedicated `SignupTermsStep` component for policy review. - Update `useMatrixClient` to manage new signup states and handle errors related to registration tokens and terms acceptance. - Enhance translations in `useAppI18n` for new messages related to registration tokens and terms. - Update the signup and verify-email pages to accommodate the new flow, ensuring proper navigation and error handling. - Add unit tests to cover the new registration token and terms acceptance functionalities, ensuring robust testing of the signup process. - Document changes in the CHANGELOG to reflect the enhancements in the signup process. * Enhance signup process with extended UIA and user guidance - Introduced new UIA elements for Matrix signup, including `m.login.registration_token` and `m.login.terms`, enhancing user experience during registration. - Added user-facing hints for SSO-only registration and clarified SMS signup non-support. - Improved unit test coverage for registration UIA helpers and signup pages. - Updated README with new sections on CI/E2E credential setup and Matrix registration, while removing phased roadmap bullets for clarity. - Documented changes in the CHANGELOG to reflect these enhancements.
* Add Matrix OIDC support with callback handling and client hints - Introduced a new `matrixOidcNative.ts` file for handling native Matrix delegated authentication using OIDC, including constants and utility functions for managing OIDC states and errors. - Implemented unit tests for the `isPublicRegisterEndpointDisabled` function to ensure proper handling of registration endpoint responses. - Updated the project structure to include new files and components for OIDC integration, enhancing the overall authentication experience. * Add Matrix OIDC support for auth flows Support delegated Matrix OIDC via OAuth for signup and login. Add config options in nuxt.config.ts for OIDC settings. Update UI to reflect OIDC availability and show errors. Guide users when homeservers block direct registration. Extend i18n with OIDC messages in English and German. Improve signup error handling for blocked registrations. Add unit tests for OIDC flows and error cases. * Refactor signup and login processes to enhance user experience and error handling - Update README.md to clarify the delegation of new-account creation to Matrix Authentication Services (OAuth/OIDC). - Modify `useAppI18n` to improve translations related to signup errors and user guidance for homeservers blocking direct registration. - Refactor `useMatrixClient` to streamline error handling for transport failures and enhance verification processes. - Introduce new utility functions for managing incoming verification requests from other devices. - Update UI components in `login.vue` and `signup.vue` to reflect changes in the signup flow and improve user feedback. - Enhance unit tests for error handling and verification processes, ensuring robust coverage for new functionalities. * Enhance Matrix OIDC sign-up process with new features - Implemented delegated OIDC sign-up (MSC2965 / MAS) including OpenID discovery, PKCE, dynamic client registration, and token exchange. - Added support for the `/auth/matrix-oidc/callback` endpoint and integrated Matrix JS SDK session management. - Introduced a sign-up entry point for delegated browser OAuth with runtime configuration for `nuxt.public.siteUrl` and `matrixOidcClientId`. - Enhanced internationalization (i18n) for callback and error paths in English and German. - Updated README with notes on HTTPS redirect requirements for matrix.org. - Documented changes in the CHANGELOG to reflect these enhancements.
…ty (#69) * Add Account Verification Panel and Recovery Key Bootstrap Functionality - Introduced a new `AccountVerificationPanel.vue` component for managing device verification processes, including emoji comparison and recovery key input. - Implemented recovery key bootstrap logic in `recoveryKeyBootstrap.ts`, allowing users to restore cross-signing secrets using their recovery keys. - Enhanced internationalization support in `useAppI18n.ts` with new messages related to verification and recovery key processes in both English and German. - Updated the account settings page to integrate the new verification panel, improving user experience during the verification process. - Added unit tests for the recovery key bootstrap functionality to ensure robust error handling and verification logic. * Add optional remote logging functionality and update environment configuration - Introduced a new `.env.example` file to provide examples for optional remote debug logging configuration. - Updated `nuxt.config.ts` to include new settings for remote debug logging, allowing for better diagnostics. - Enhanced `README.md` with instructions on enabling remote logging via environment variables. - Implemented a `logOptionalRemote` function in `optionalRemoteLogger.ts` to handle logging to a remote endpoint. - Integrated remote logging into various components, including `AccountVerificationPanel.vue` and `recoveryKeyBootstrap.ts`, to capture detailed debug information during verification processes. * Refactor optional remote logger to enhance configuration handling - Introduced a new type for public configuration in `optionalRemoteLogger.ts` to streamline the retrieval of remote logging settings. - Updated the `getOptionalRemoteLoggerPublicConfig` function to merge environment variables with Nuxt public configuration, improving flexibility. - Refactored the `logOptionalRemote` function to utilize the new configuration structure, ensuring cleaner code and better maintainability. * Update CHANGELOG to include new features for account verification and remote logging - Added an account verification panel in settings with device verification (SAS) and recovery key bootstrap for cross-signing. - Introduced optional remote debug logging via `NUXT_PUBLIC_DEBUG_LOG_*` environment variables and updated `.env.example` template.
…hat sidebar (#71) - Added collapsible category headers for subspaces in the channel column, allowing rooms to be grouped under `m.space.child` order with a "General" segment for direct space children. - Introduced drag-and-drop reordering for category blocks and rooms, with persistence managed via `m.space.child` and `m.room.power_levels` checks. - Integrated `vue-draggable-plus` for enhanced drag-and-drop capabilities in the space channel sidebar. - Developed helpers and unit tests for space category mapping, state writes, and permission checks related to the new hierarchy features. - Updated internationalization support in `useAppI18n` to include new messages for category expansion and collapse actions.
* Add thread functionality to chat components - Introduced `ChatThreadPanel` and `ChatThreadPreview` components for managing and displaying chat threads. - Enhanced `MessageActionBar` and `MessageInput` components to support thread replies, including a new `threadRootEventId` prop. - Updated `MessageItem` and `MessageList` components to handle thread-related events and display thread previews. - Implemented internationalization updates in `useAppI18n` for new thread-related messages. - Added utility functions for managing thread relations in `matrixThreadRelations.ts`. - Enhanced chat timeline mapping to include thread summaries and replies. - Developed E2E tests to ensure thread functionality works as expected, including persistence after page reloads. - Updated unit tests to cover new thread features and ensure robust functionality across components. * Refactor chat components to enhance thread previews and navigation - Removed the `threadTitle` prop from `ChatThreadPreview` and replaced it with computed properties for displaying last reply snippets and sender information. - Updated `MessageItem` to eliminate the unused `threadPreviewTitle` function. - Enhanced `RoomCategoryList` to manage active thread navigation states, introducing new functions for selection logic. - Modified `chat.vue` to conditionally pass active thread IDs based on the current view. - Improved chat timeline utilities to support message relation indexing and filtering for thread replies. - Added unit tests to ensure proper functionality of new thread-related features and message handling. * Enhance message handling in chat components with edit indication and internationalization support - Updated `MessageItem` to display an edit indication for messages, utilizing the new `isEdited` property. - Integrated internationalization for the edit message label in `useAppI18n`. - Enhanced chat timeline utilities to support message relation indexing, including handling of edited messages. - Added unit tests to verify the correct functionality of message editing and thread membership inheritance. - Improved message filtering logic to exclude superseded messages from the main timeline. * Implement thread navigation refresh and age-based filtering in chat components - Added a new `threadNavVersion` state and a refresh timer to manage thread navigation updates in `chat.vue`. - Introduced `scheduleThreadNavRefresh` function to handle periodic updates based on user activity. - Enhanced `buildRoomThreadNavEntries` utility to filter out stale threads based on a maximum age, improving thread visibility. - Updated unit tests to cover new functionality for thread navigation and age-based filtering, ensuring robust behavior in chat timelines. * Enhance chat functionality with new thread management features - Added internationalization support for new thread-related messages in `useAppI18n`. - Introduced a new `RightSidebarView` type to manage sidebar views for members and threads in `chat.vue`. - Implemented computed properties to manage the active state of the threads and members panels. - Enhanced thread navigation logic with functions to toggle and close the room threads panel. - Updated `buildRoomThreadNavEntries` to include additional thread metadata for improved navigation. - Expanded unit tests to cover new functionalities related to thread management and navigation. * Implement message threading features in chat components - Added support for Matrix MSC3440 `m.thread` relations, enabling users to open messages, reply in thread context, and manage separate timelines for main and thread messages. - Introduced a thread side panel and in-main thread view with breadcrumb navigation, along with recent thread shortcuts in the channel sidebar. - Enhanced room header toolbar to include thread management options and a comprehensive room-wide thread list panel. - Implemented `(edited)` labels for replaced message bodies and improved thread-aware timeline indexing. - Updated chat composer to accept optional thread root and reply targets for in-thread replies. - Fixed thread membership inheritance and improved sidebar navigation refresh for thread updates. - Added unit tests to ensure robust functionality for new threading features.
… chat (#78) - Added unread message indicators in the channel list, utilizing Matrix SDK notification counts. - Implemented read-receipt marking when viewing a room, enhancing user experience with live updates on incoming events. - Updated `RoomCategoryList` to support unread state and aria labels for accessibility. - Introduced new utility functions for managing unread states and marking rooms as read. - Enhanced internationalization support for unread message notifications in `useAppI18n`. - Developed unit and E2E tests to ensure proper functionality of unread indicators and read-receipt features.
* Add Masked Secret Input Component and Update Auth Forms - Introduced a new `MaskedSecretInput` component for secure input handling of passwords and recovery keys, featuring toggle visibility functionality. - Updated `AccountVerificationPanel` to utilize `AuthMaskedSecretInput` for recovery key input, enhancing user experience. - Refactored login and signup pages to incorporate the new masked input component for password fields, improving security and usability. - Added internationalization support for visibility toggle labels in `useAppI18n`. - Created utility functions for managing masked input display and cursor synchronization. - Enhanced CSS styles for auth forms to ensure full-width input fields. - Developed unit tests for the `MaskedSecretInput` component and related functionalities to ensure robust behavior and coverage. * Enhance Authentication Forms with Masked Secret Inputs - Added a `MaskedSecretInput` component for secure handling of passwords and recovery keys, featuring a show/hide toggle for improved user experience. - Updated login, sign-up, and account recovery forms to utilize the new component, ensuring consistent full-width styling and icon-only toggles for password visibility. - Enhanced accessibility with appropriate aria-labels and unit tests to ensure functionality and coverage for the new features. * Refactor Password Field Handling in E2E Tests - Introduced a new utility function `passwordField` to centralize the handling of password input fields across login and signup step definitions. - Updated login and signup steps to utilize the new `passwordField` function, improving code consistency and maintainability. - Enhanced visibility checks for password fields in the tests, ensuring better accessibility compliance.
- Added support for editing sent messages via Matrix `m.replace`, including updated timeline body and edited label. - Enhanced `MessageInput`, `MessageItem`, and `MessageList` components to handle edit states and emit appropriate events. - Integrated internationalization for edit-related messages in `useAppI18n`. - Developed unit and E2E tests to ensure proper functionality of message editing and persistence after page reloads. - Updated CHANGELOG to reflect the new editing feature and its components.
#85) * Enhance chat components with hover capabilities and touch interactions - Introduced a new `useHoverCapable` composable to determine hover support based on media queries, improving responsiveness for touch devices. - Updated `MessageItem`, `MessageActionBar`, and `MessageList` components to utilize hover capabilities, enabling better interaction handling on touch devices. - Implemented pointer event handling for message selection and action bar visibility, enhancing user experience on mobile. - Added unit and E2E tests to ensure proper functionality of new hover and touch interactions. - Updated CSS styles to support hover-capable classes for improved visual feedback. - Enhanced existing tests to cover new interaction scenarios and ensure robust behavior across components. * Update CHANGELOG to include touch-friendly message actions for mobile devices - Added touch-friendly message actions for phones and tablets, allowing users to tap a message row to reveal reply, reaction, and thread options. - Included functionality to dismiss the action bar by tapping outside or pressing Escape, while maintaining hover/focus interactions for desktop users.
- Added support for displaying a deleted message tombstone in the chat timeline and thread panel when messages are redacted, replacing the previous misleading decryption failure notice. - Updated `MessageItem`, `ChatThreadPanel`, and `MessageList` components to include a new `isMessageDeleted` property for tracking deleted messages. - Enhanced internationalization with new translations for deleted message notifications in `useAppI18n`. - Updated utility functions and chat timeline mapping to properly handle redacted messages and display the appropriate tombstone text. - Added integration tests to ensure correct mapping of redacted messages to deleted tombstones in various scenarios. * Update CHANGELOG to reflect the new message deletion feature and its components.
… scrolling behavior (#87) - Implemented functionality to ensure sent messages appear immediately at the bottom of the room timeline without requiring manual scrolling. - Extended the visible window and scroll intent when the user is already viewing the latest events, improving user experience during message sending. - Updated `loadMessages` function in `chat.vue` to utilize a new utility for preserving timeline window state. - Added integration and unit tests to verify the new behavior of message visibility and scrolling. - Updated CHANGELOG to reflect the enhancements in message visibility and scrolling behavior.
* Implement pinned messages feature in chat components - Added functionality to pin and unpin messages in the chat interface, allowing users to manage important messages easily. - Updated `MessageActionBar`, `MessageItem`, and `MessageList` components to include pin/unpin buttons based on user permissions. - Enhanced `ChatRoomHeaderToolbar` to toggle the pinned messages panel and display the current state. - Integrated internationalization support for new pinning actions and messages in `useAppI18n`. - Implemented logic to handle live updates for pinned messages and navigation to pinned entries in the timeline. - Added E2E tests to verify the pinning functionality and its integration within the chat experience. - Updated CHANGELOG to reflect the new pinned messages feature and its components. * Enhance pinned messages functionality in chat components - Added a pinned badge to messages in the chat timeline, indicating when a message is pinned. - Updated `ChatThreadPanel` and `MessageItem` components to support displaying pinned message information. - Implemented internationalization for new pinned message notifications in `useAppI18n`. - Enhanced `chat.vue` to handle updates for pinned messages and display appropriate notices for pinning actions. - Updated CHANGELOG to reflect the enhancements made to pinned messages functionality.
…#90) - Added an emoji picker and colon shortcode autocomplete feature in the message composer for both the main timeline and thread panel, utilizing the existing reaction emoji catalog. - Updated `MessageInput` and `ChatThreadPanel` components to support the new emoji functionality, including handling emoji insertion and shortcode suggestions. - Enhanced internationalization support in `useAppI18n` for new emoji-related messages. - Introduced utility functions for managing emoji insertion and shortcode matching. - Added unit and E2E tests to verify the functionality of the emoji picker and autocomplete features. - Updated CHANGELOG to reflect the new emoji picker and shortcode autocomplete functionality.
- Implemented image and video previews for reply quotes in the timeline and composer, allowing users to see media associated with replies. - Updated `ChatThreadPanel`, `MessageInput`, and `MessageItem` components to support the new reply preview feature, including scrolling to and highlighting the original message when a quote is clicked. - Introduced a new `ReplyQuotePreview` component for rendering reply previews with media thumbnails. - Enhanced internationalization support in `useAppI18n` for new reply-related messages. - Added unit and E2E tests to verify the functionality of the reply previews and scrolling behavior. - Updated CHANGELOG to reflect the new reply quote features and enhancements.
- Added typing indicators in the active room, displaying `m.typing` events via the SDK. - Implemented debounced outbound `sendTyping` functionality from the message composer. - Introduced a compact label above the message input for typing notifications in both English and German. - Enhanced internationalization support in `useAppI18n` for new typing-related messages. - Updated `ChatTypingIndicator` component to show typing status of multiple users. - Added unit and E2E tests to verify the functionality of typing indicators. - Updated CHANGELOG to reflect the new typing indicator features.
* Implement space settings hub and role management features - Introduced a space settings hub allowing users to manage space profile (name, topic, icon) and custom roles. - Added functionality for member assignment, channel visibility per role, and drag-and-drop channel organization similar to Discord. - Enhanced member list display with Cinny-style member groups and role-based color coding. - Updated internationalization support in `useAppI18n` for new space settings and roles-related messages. - Added unit tests to verify the new features and updated CHANGELOG to reflect these changes. * update * Refactor power level tag handling in space roles management - Renamed functions and constants related to power level tags for clarity, replacing "Cinny" references with a more generic "Power Level" terminology. - Updated the logic in `useSpaceRoles`, `spaceRolesStateHelpers`, and `spaceRolesMatrixSync` to reflect the new naming conventions. - Adjusted unit tests to ensure consistency with the updated function names and behavior. - Removed deprecated functions related to Cinny power level tags to streamline the codebase. * Refactor power level assignment logic in space roles synchronization - Introduced `getRoomCreatorUserId` utility to exclude room creators from power level assignments in `syncChildRoomPowerLevelsFromSpaceRoles` and `syncSpacePowerLevelsFromRoles`. - Updated `buildUserPowerAssignments` to accept an `excludeUserIds` parameter, ensuring excluded users are not assigned power levels. - Adjusted related unit tests to verify the exclusion of specified user IDs from power level calculations. - Enhanced power levels compilation to include new state types for better interoperability. * Refactor space roles and permissions management - Updated space roles and permissions to utilize Matrix `m.room.power_levels` and Cinny/Sable `in.cinny.room.power_level_tags`, removing the custom `decentra.space.roles` state event. - Enhanced role management with power-level dropdowns for actions like invite, kick, and ban, ensuring better interoperability. - Introduced a new `useSpacePowerLevelSettings` composable for managing power level permissions. - Updated internationalization support in `useAppI18n` for new role and permission messages. - Adjusted related components and utilities to align with the new power level structure and permissions handling. - Updated CHANGELOG to reflect these changes. * Enhance space settings and management features - Updated space settings to include new options for managing space access rules and publishing to the directory. - Introduced functionality for upgrading space rooms and handling join rules, with corresponding UI updates in the space settings page. - Enhanced internationalization support in `useAppI18n` for new space management messages. - Refactored related components and composables to accommodate the new features, ensuring a cohesive user experience. - Updated CHANGELOG to reflect these enhancements. * Add SpacePermissionRoleSelect component and enhance role management - Introduced a new `SpacePermissionRoleSelect` component for improved role selection in space settings. - Updated internationalization support in `useAppI18n` to include new messages for role management. - Refactored space settings to utilize permission groups, enhancing the UI for managing roles and permissions. - Added utility functions for role display and selection logic, ensuring a cohesive user experience. - Implemented unit tests for the new role management functionalities and updated CHANGELOG accordingly. * Enhance room and space management features - Added functionality to create rooms and subspaces linked to parent spaces, improving the organizational structure within the chat application. - Updated internationalization support in `useAppI18n` to include new messages for adding rooms and subspaces. - Refactored the room creation process to accommodate the new parent space linking feature, ensuring a seamless user experience. - Enhanced UI components to support the addition of rooms and subspaces, including new buttons and menu items in the chat interface. - Updated relevant pages and components to reflect these changes, ensuring consistency across the application. - Added unit tests to verify the new functionalities and updated CHANGELOG accordingly. * Enhance room and space management capabilities - Introduced new properties and methods for adding rooms and subspaces under specific parent spaces, improving the organizational structure within the chat application. - Updated internationalization support in `useAppI18n` to include new messages for managing room categories and actions. - Refactored components and utilities to accommodate the new linking and insertion index features for rooms and spaces. - Enhanced the UI to support these new functionalities, ensuring a seamless user experience. - Added unit tests to verify the new features and updated the CHANGELOG accordingly. * Add Matrix invite functionality for rooms and spaces - Introduced a new `MatrixInvitePanel` component for inviting users to rooms and spaces, enhancing user collaboration features. - Updated `useMatrixClient` to include an `inviteUsersToRoom` method for handling user invitations. - Enhanced internationalization support in `useAppI18n` with new messages related to user invitations. - Implemented UI updates in the room creation and chat components to support inviting users during room creation and from the chat interface. - Added utility functions for parsing Matrix user IDs and checking invite permissions. - Included unit tests to verify the new invitation functionalities and updated the CHANGELOG accordingly. * Enhance ChatOnboardingPanel with conditional header display - Added a new `showHeader` prop to the `ChatOnboardingPanel` component to conditionally render the header based on whether the user has joined non-space rooms. - Updated the chat page to utilize the new `showHeader` prop, improving the onboarding experience for first-time users. - Refactored the onboarding logic to streamline the display of onboarding components based on user state. * Add drag-and-drop delay functionality for room categories - Introduced a new `roomListDragDelay` function to dynamically set the drag delay based on the room category's reorder capability. - Updated the drag-and-drop component to utilize the new delay function, enhancing user experience during room management. - Refactored class bindings for room rows to include cursor styles based on drag capabilities, improving visual feedback for users. * Add room settings management and permissions - Introduced the `useRoomSettings` composable for managing room name and topic editing, enhancing user control over channel settings. - Updated the `Chat/RoomCategoryList` component to include a button for opening room settings, improving accessibility to room management features. - Enhanced internationalization support in `useAppI18n` with new messages related to room settings. - Created a new settings page for rooms, allowing users to view and edit room details. - Implemented utility functions for channel permissions, ensuring proper access control for room management actions. - Added unit tests for the new functionalities and updated the CHANGELOG accordingly. * Enhance space management features and settings - Added a comprehensive space settings hub with options for Matrix profile management, join rules, directory publishing, and custom roles. - Introduced a new Matrix invite flow, allowing per-channel and space-wide invites, enhancing user collaboration. - Implemented channel settings accessible via a dedicated settings page, improving user control over room details. - Enhanced the home interface with new actions for getting started and improved sidebar organization for room labels. - Introduced a Cinny-style space channel tree for better navigation and organization of rooms and subspaces. - Updated the CHANGELOG to reflect these significant enhancements in space and channel management.
* Implement voice message recording and playback features in chat - Added functionality for recording voice messages in the chat, including microphone capture, preview, and upload capabilities. - Implemented support for sending audio messages with Matrix `m.audio` type and MSC3245 voice marker. - Enhanced the chat interface to include a voice message player for playback, with error handling and duration display. - Updated internationalization support in `useAppI18n` for new voice-related messages. - Added unit and E2E tests to verify the functionality of voice message features. - Updated CHANGELOG to reflect these new features and improvements. * Enhance MessageInput component with dynamic action buttons - Introduced computed properties to manage visibility of voice recording and send message buttons based on user input. - Refactored the MessageInput template to conditionally render the appropriate action button (voice or send) based on whether the input field contains text. - Updated unit tests to verify the correct display of action buttons during typing and voice recording scenarios. - Improved styling for action buttons to enhance user experience and accessibility.
…98) - Added functionality for creating matrix spaces directly from the UI, including a new `/spaces/new` form and navigation to the newly created space in chat. - Integrated `createMatrixSpace` API for seamless space creation and subspace management via `/rooms/new?kind=space`. - Updated the chat interface to reflect the new space creation capabilities and added corresponding E2E tests to verify functionality. - Enhanced the CHANGELOG to document these new features and improvements.
* Enhance image sending functionality with reply and thread support - Implemented the ability to send images while preserving reply and thread relations in the chat interface. - Updated `MessageInput` component to handle image uploads with associated reply options. - Enhanced `useMatrixClient` to support sending images with `m.relates_to` for replies and threads. - Added E2E tests to verify the correct behavior of image replies and thread images. - Updated CHANGELOG to reflect these new features and improvements. * Update CHANGELOG to reflect recent enhancements in space roles, permissions, and sidebar organization - Reintroduced space roles and permissions management using Matrix `m.room.power_levels` and Cinny/Sable `in.cinny.room.power_level_tags`, removing the custom `decentra.space.roles` state event. - Updated the "Publish to directory" functionality to utilize the Matrix room-directory API, ensuring better integration. - Organized the home sidebar into **Personal chats** and **Groups**, removing the previous "Unassigned rooms" section. - Enhanced the space channel header for easier access to add room, add subspace, and invite-to-space functionalities. - Improved channel drag-and-drop behavior for reordering channels while maintaining click-only controls for invite and thread actions. * Restore changelog entry and add image relations
* Implement video message functionality in chat (#26) - Added support for uploading and sending video messages in the chat, including MP4 and WebM formats with a 50 MB size limit. - Enhanced the `MessageInput` component to allow video file selection via drag-and-drop and file picker. - Introduced a `VideoMessagePlayer` component for playback of video messages in the chat timeline. - Updated `useMatrixClient` to handle video message sending, including validation for file type and size. - Enhanced internationalization support for new video-related messages in `useAppI18n`. - Added unit and E2E tests to verify video upload and playback functionality. - Updated CHANGELOG to reflect these new features and improvements. * Enhance media attachment functionality in MessageInput component - Introduced support for attaching images and videos with a new dropdown menu for selection. - Updated upload error handling to differentiate between image and video uploads. - Enhanced internationalization with new messages for attaching media and upload statuses. - Added unit tests to verify the new attachment features and uploading behavior.
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
- Added support for uploading and sending audio messages in the chat, including MP3, M4A, OGG, WAV, and WebM formats with a 50 MB size limit. - Enhanced the `MessageInput` component to allow audio file selection via a new dropdown menu and file picker. - Implemented audio playback using blob URLs for authenticated media, ensuring compatibility with the HTML audio element. - Updated `useMatrixClient` to handle audio message sending, including validation for file type and size. - Enhanced internationalization support in `useAppI18n` for new audio-related messages. - Added unit and E2E tests to verify audio upload and playback functionality. - Updated CHANGELOG to reflect these new features and improvements.
* Enhance notification settings and unread indicators across chat components - Introduced per-room and per-space notification settings via Matrix push rules, allowing users to customize notification levels (default, all, mentions only, mute). - Updated `RoomCategoryList`, `ChatRoomThreadListPanel`, and `SpaceList` components to display unread indicators and mention notifications. - Enhanced internationalization support in `useAppI18n` for new notification-related messages. - Implemented global mention notifications for improved user awareness of mentions in hidden tabs. - Updated `CHANGELOG` to reflect these new features and improvements. * Refactor chat component logic and enhance unread state handling - Updated the `chat.vue` file to improve the management of space items and unread notifications, including renaming variables for clarity and introducing new properties for unread counts. - Refactored the unread state computation to ensure it only processes when the matrix sync is prepared, enhancing performance and reliability. - Added a new function to resolve home room IDs for unread messages, improving the unread state tracking for personal and group chats. - Updated the `spaceRoomCategories.ts` file to clarify documentation regarding top-level spaces in the left rail. - Enhanced internationalization support for new features related to unread notifications and space management. * Enhance unread message handling and notification settings in chat components - Updated `SpaceList` and `chat.vue` to include total and highlight counts for unread messages, improving user awareness of notifications. - Refactored unread state management to ensure accurate display of unread counts and mention notifications across spaces. - Enhanced internationalization support in `useAppI18n` for new message formats related to unread counts in spaces. - Updated `CHANGELOG` to reflect these improvements and new features. * Enhance room notification settings and action menus in chat component - Updated `RoomCategoryList.vue` to improve notification icon handling based on room notification levels, ensuring accurate visual representation. - Introduced new functions for managing room action menus, allowing users to invite others and access room settings directly from the chat interface. - Enhanced internationalization support in `useAppI18n` for new notification and action menu labels. - Added unit tests to verify the correct functionality of notification icons and action menus in the `RoomCategoryList` component. * Add @iconify-json/lucide as a devDependency and enhance room notification handling - Included `@iconify-json/lucide` in `package.json` and `package-lock.json` for icon support. - Updated `RoomCategoryList.vue` to utilize a lazy resolver for room notification levels, improving performance and flexibility in notification handling. - Refactored unread message handling in `useRoomUnread.ts` to introduce a debounce mechanism for refreshing unread counts, enhancing responsiveness. - Simplified notification level retrieval in `chat.vue` by creating a dedicated function for room notification levels. - Removed unused exports in various utility files to clean up the codebase and improve maintainability. * Implement useMatrixSyncPrepared for persistent unread indicators in chat - Introduced `useMatrixSyncPrepared` composable to track Matrix client sync state, ensuring unread indicators remain consistent across route changes. - Updated `chat.vue` to utilize the new composable, enhancing unread message handling when navigating between spaces and chat. - Added unit tests for `useMatrixSyncPrepared` to verify its functionality and state management. - Updated CHANGELOG to reflect the fix for unread indicators persisting after navigating to space settings. * Enhance room notification handling and update notification settings - Implemented room notification mute/unmute functionality by reading cached Matrix push rules and refreshing them after writes, ensuring compatibility with Element's rule actions. - Refactored notification settings logic in `useNotificationSettings.ts` to improve clarity and maintainability, including the introduction of new functions for deleting room-specific push rules. - Updated utility functions to better handle notification actions, including a new check for mute rules based on actions. - Added unit tests to verify the correct behavior of notification levels and actions in various scenarios. - Updated CHANGELOG to reflect these enhancements and new features. * Implement configurable new-message alerts and enhance notification handling - Added options for new-message alerts in account settings, allowing users to choose between visual only or sound + visual notifications. - Updated notification handling to include a simple unread title marker in the browser tab when messages are unread. - Introduced a new composable for managing message notification preferences, including initialization and state management. - Enhanced the global mention notification logic to play sounds based on user preferences and room notification levels. - Updated internationalization support for new notification-related messages and settings. - Added unit tests for new utility functions and notification logic. - Updated CHANGELOG to reflect these enhancements and new features.
… enhancements (#118) - Introduced `useSpaceUnreadById` composable to manage unread states for spaces, improving performance and clarity in unread message handling. - Updated `chat.vue` to utilize the new composable, enhancing unread message tracking across spaces and sidebar navigation. - Refactored room category handling to apply unread indicators more effectively, ensuring accurate representation of unread messages in the UI. - Added utility functions for managing sidebar thread navigation, improving user experience when navigating between rooms and threads. - Updated `CHANGELOG` to reflect these new features and improvements.
* Enhance media upload functionality in chat components - Introduced `useComposerMediaUpload` composable to streamline media upload handling for images, audio, and video messages in the `MessageInput` component. - Refactored `MessageInput.vue` to utilize the new composable, improving code organization and reducing redundancy in media handling logic. - Added a new script to check file line limits in `package.json`, enhancing project management. - Updated internationalization support in `useAppI18n` for new media-related messages. - Enhanced unit tests to verify the functionality of media uploads and error handling. - Updated CHANGELOG to reflect these new features and improvements. * Update CHANGELOG to reflect recent enhancements in chat functionality - Consolidated and clarified sections for changes related to chat runtime, unread indicators, and audio playback features. - Removed outdated entries and ensured accurate representation of recent fixes and additions, including improvements to sidebar navigation and notification handling. - Enhanced organization of the CHANGELOG for better readability and user understanding of updates. * Refactor and modularize chat components for improved maintainability - Split oversized modules related to chat, Matrix client, timeline, signup UIA, i18n locale, and composer into focused submodules, adhering to the 1000-line limit. - Introduced a `check:line-limit` script to enforce line limits and maintain code quality. - Updated CHANGELOG to reflect these structural changes and enhancements.
- Implemented manual chunking for `matrix-js-sdk` and `@matrix-org/matrix-sdk-crypto-wasm` in Vite configuration to improve production bundle organization. - Added a new script `build:chunks` to list minified JS chunk sizes after the production build, aiding in performance monitoring. - Updated `CHANGELOG` to document these enhancements and added a new section in `README.md` explaining production bundle sizes and chunk splitting. - Created `build-bundling.md` to provide detailed insights on build processes, chunk sizes, and expected warnings during production builds.
- Introduced AGENTS.md to outline coding standards, commit message conventions, and project documentation practices. - Updated CHANGELOG to reflect the addition of project architecture documentation and guidelines for developers and agents. - Enhanced README.md to include links to new documentation resources, providing a comprehensive overview of project structure and documentation expectations. - Created issue-documentation-checklist.md to assist in maintaining documentation consistency when issues affect project structure.
* Implement leave room functionality in chat components - Added a confirmation dialog for leaving Matrix rooms, including a new `LeaveRoomConfirmPanel` component. - Updated `RoomCategoryList` to include leave room options in the action menu. - Enhanced `useMatrixClient` to support leaving rooms and cleaning up direct message references. - Introduced internationalization support for leave room messages in English and German. - Updated `CHANGELOG` to reflect the new leave room feature and related changes. * Implement leave room E2E tests and enhance seeding script - Added Cucumber E2E tests for leaving side seeded group rooms, space channels, and direct message rooms, ensuring proper functionality and user experience. - Enhanced the runtime seeding script to create and manage direct message rooms, improving the testing environment setup. - Updated CHANGELOG to reflect the addition of new E2E tests and improvements in the seeding process.
* Implement space home panel and lobby functionality - Introduced a new `SpaceHomePanel` component to display an overview of the selected space, including member count and available channels. - Enhanced `RoomCategoryList` to support navigation to the space lobby and clear room selections when leaving a space channel. - Added functionality to manage lobby entries, allowing users to join unjoined channels directly from the space home. - Updated internationalization support for new space home and lobby-related messages in English and German. - Enhanced `CHANGELOG` to reflect the addition of the space home panel and related features. * Enhance space lobby functionality and UI components - Introduced a new composable `useSpaceLobbyHierarchy` to manage lobby categories and their hierarchy, improving the organization of space channels. - Updated `SpaceHomePanel` to display subspace avatars and member counts, enhancing the user interface for navigating spaces. - Refactored `useChatSpaceRail` to prevent auto-selection of rooms when none are selected, improving user experience. - Enhanced `CHANGELOG` to reflect the addition of lobby hierarchy management and UI improvements in the space home panel. - Added unit tests for new functionalities, ensuring robust coverage for the space lobby features.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
soon