Browse Source

Merge pull request #14240 from nextcloud/backport/14212/stable31

pull/14241/head
Maksim Sukharev 10 months ago
committed by GitHub
parent
commit
013fd18ecb
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 76
      .github/workflows/lint-typescript.yml
  2. 306
      package-lock.json
  3. 4
      package.json
  4. 4
      src/App.vue
  5. 3
      src/PublicShareSidebarTrigger.vue
  6. 2
      src/components/AdminSettings/BotsSettings.vue
  7. 2
      src/components/AdminSettings/RecordingServers.vue
  8. 2
      src/components/AdminSettings/SignalingServers.vue
  9. 2
      src/components/AdminSettings/WebServerSetupChecks.vue
  10. 2
      src/components/AvatarWrapper/AvatarWrapper.spec.js
  11. 2
      src/components/AvatarWrapper/AvatarWrapper.vue
  12. 2
      src/components/BreakoutRoomsEditor/BreakoutRoomsParticipantsEditor.vue
  13. 2
      src/components/BreakoutRoomsEditor/SelectableParticipant.vue
  14. 2
      src/components/CalendarEventsDialog.vue
  15. 6
      src/components/CallView/CallFailedDialog.vue
  16. 2
      src/components/CallView/CallView.vue
  17. 4
      src/components/CallView/Grid/Grid.vue
  18. 2
      src/components/CallView/shared/EmptyCallView.vue
  19. 2
      src/components/CallView/shared/LocalAudioControlButton.vue
  20. 2
      src/components/CallView/shared/LocalVideo.vue
  21. 2
      src/components/CallView/shared/LocalVideoControlButton.vue
  22. 2
      src/components/CallView/shared/VideoBottomBar.spec.js
  23. 2
      src/components/CallView/shared/VideoBottomBar.vue
  24. 2
      src/components/CallView/shared/VideoVue.vue
  25. 2
      src/components/ChatView.vue
  26. 2
      src/components/ConversationIcon.vue
  27. 2
      src/components/ConversationSettings/BasicInfo.vue
  28. 2
      src/components/ConversationSettings/BotsSettings.vue
  29. 2
      src/components/ConversationSettings/ConversationAvatarEditor.vue
  30. 2
      src/components/ConversationSettings/ConversationPermissionsSettings.vue
  31. 2
      src/components/ConversationSettings/ConversationSettingsDialog.vue
  32. 2
      src/components/ConversationSettings/LinkShareSettings.vue
  33. 2
      src/components/ConversationSettings/ListableSettings.vue
  34. 2
      src/components/ConversationSettings/LobbySettings.vue
  35. 2
      src/components/ConversationSettings/LockingSettings.vue
  36. 2
      src/components/ConversationSettings/MentionsSettings.vue
  37. 2
      src/components/ConversationSettings/NotificationsSettings.vue
  38. 2
      src/components/ConversationSettings/RecordingConsentSettings.vue
  39. 2
      src/components/ConversationSettings/SipSettings.vue
  40. 3
      src/components/ImportEmailsDialog.vue
  41. 2
      src/components/LeftSidebar/CallPhoneDialog/CallPhoneDialog.vue
  42. 2
      src/components/LeftSidebar/ConversationsList/Conversation.spec.js
  43. 2
      src/components/LeftSidebar/ConversationsList/Conversation.vue
  44. 2
      src/components/LeftSidebar/ConversationsList/ConversationsListVirtual.vue
  45. 2
      src/components/LeftSidebar/InvitationHandler.vue
  46. 2
      src/components/LeftSidebar/LeftSidebar.vue
  47. 2
      src/components/MediaSettings/MediaSettings.vue
  48. 10
      src/components/MediaSettings/MediaSettingsTabs.vue
  49. 2
      src/components/MediaSettings/VideoBackgroundEditor.vue
  50. 2
      src/components/MessagesList/MessagesGroup/Message/Message.spec.js
  51. 2
      src/components/MessagesList/MessagesGroup/Message/Message.vue
  52. 2
      src/components/MessagesList/MessagesGroup/Message/MessageButtonsBar/MessageButtonsBar.spec.js
  53. 2
      src/components/MessagesList/MessagesGroup/Message/MessageButtonsBar/MessageButtonsBar.vue
  54. 2
      src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue
  55. 2
      src/components/MessagesList/MessagesGroup/Message/MessagePart/Mention.vue
  56. 2
      src/components/MessagesList/MessagesGroup/Message/MessagePart/Poll.vue
  57. 2
      src/components/MessagesList/MessagesGroup/Message/MessagePart/Reactions.spec.js
  58. 2
      src/components/MessagesList/MessagesGroup/Message/MessagePart/Reactions.vue
  59. 2
      src/components/MessagesList/MessagesGroup/Message/MessagePart/ReactionsList.vue
  60. 2
      src/components/MessagesList/MessagesGroup/MessagesGroup.spec.js
  61. 2
      src/components/MessagesList/MessagesGroup/MessagesGroup.vue
  62. 2
      src/components/MessagesList/MessagesGroup/MessagesSystemGroup.spec.js
  63. 2
      src/components/MessagesList/MessagesList.spec.js
  64. 2
      src/components/MessagesList/MessagesList.vue
  65. 2
      src/components/NewConversationDialog/NewConversationContactsPage.vue
  66. 2
      src/components/NewConversationDialog/NewConversationDialog.vue
  67. 2
      src/components/NewConversationDialog/NewConversationSetupPage.vue
  68. 2
      src/components/NewMessage/NewMessage.vue
  69. 2
      src/components/NewMessage/NewMessageAbsenceInfo.vue
  70. 2
      src/components/NewMessage/NewMessageChatSummary.vue
  71. 2
      src/components/NewMessage/NewMessageTypingIndicator.vue
  72. 2
      src/components/PermissionsEditor/PermissionsEditor.vue
  73. 37
      src/components/PollViewer/PollEditor.vue
  74. 4
      src/components/PollViewer/PollManager.vue
  75. 2
      src/components/PollViewer/PollViewer.vue
  76. 2
      src/components/PollViewer/PollVotersDetails.vue
  77. 2
      src/components/Quote.vue
  78. 2
      src/components/RightSidebar/BreakoutRooms/BreakoutRoomItem.vue
  79. 2
      src/components/RightSidebar/BreakoutRooms/BreakoutRoomsActions.vue
  80. 2
      src/components/RightSidebar/BreakoutRooms/BreakoutRoomsTab.vue
  81. 2
      src/components/RightSidebar/InternalSignalingHint.vue
  82. 2
      src/components/RightSidebar/Participants/Participant.spec.js
  83. 2
      src/components/RightSidebar/Participants/Participant.vue
  84. 2
      src/components/RightSidebar/Participants/ParticipantPermissionsEditor.spec.js
  85. 2
      src/components/RightSidebar/Participants/ParticipantPermissionsEditor.vue
  86. 2
      src/components/RightSidebar/Participants/ParticipantsListVirtual.vue
  87. 2
      src/components/RightSidebar/Participants/ParticipantsSearchResults.vue
  88. 4
      src/components/RightSidebar/Participants/ParticipantsTab.vue
  89. 4
      src/components/RightSidebar/RightSidebar.vue
  90. 16
      src/components/RightSidebar/SearchMessages/SearchMessagesTab.vue
  91. 2
      src/components/RightSidebar/SharedItems/SharedItems.vue
  92. 4
      src/components/RightSidebar/SharedItems/SharedItemsTab.vue
  93. 2
      src/components/RightSidebar/SharedItems/sharedItemsConstants.js
  94. 2
      src/components/RightSidebar/SipSettings.vue
  95. 2
      src/components/RoomSelector.spec.js
  96. 2
      src/components/RoomSelector.vue
  97. 2
      src/components/SelectPhoneNumber.vue
  98. 2
      src/components/SettingsDialog/MediaDevicesPreview.vue
  99. 2
      src/components/SettingsDialog/SettingsDialog.vue
  100. 2
      src/components/TopBar/CallButton.vue

76
.github/workflows/lint-typescript.yml

@ -0,0 +1,76 @@
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: AGPL-3.0-or-later
# Based on lint eslint workflow on https://github.com/nextcloud/.github
name: Lint TypeScript
on: pull_request
permissions:
contents: read
concurrency:
group: lint-typescript-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
changes:
runs-on: ubuntu-latest-low
permissions:
contents: read
pull-requests: read
outputs:
src: ${{ steps.changes.outputs.src}}
steps:
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: changes
continue-on-error: true
with:
filters: |
src:
- '.github/workflows/**'
- 'src/**'
- 'appinfo/info.xml'
- 'package.json'
- 'package-lock.json'
- 'tsconfig.json'
- '**.js'
- '**.ts'
- '**.vue'
typecheck:
runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.src != 'false'
name: NPM typecheck
steps:
- name: Checkout
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Set up node and npm ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
with:
node-version-file: 'package.json'
- name: Install dependencies
run: npm ci
- name: Typecheck
run: npm run typescript:check
summary:
permissions:
contents: none
runs-on: ubuntu-latest-low
needs: [changes, typecheck]
name: typecheck
steps:
- name: Summary status
run: if ${{ needs.changes.outputs.src != 'false' && needs.typecheck.result != 'success' }}; then exit 1; fi

306
package-lock.json

@ -55,6 +55,7 @@
"vue-frag": "^1.4.3",
"vue-material-design-icons": "^5.3.1",
"vue-router": "^3.6.5",
"vue-tsc": "^2.2.0",
"vue-virtual-scroller": "^1.1.2",
"vue2-leaflet": "^2.7.1",
"vuex": "^3.6.2",
@ -72,6 +73,7 @@
"@nextcloud/eslint-config": "^8.4.1",
"@nextcloud/stylelint-config": "^3.0.1",
"@nextcloud/webpack-vue-config": "^6.2.0",
"@total-typescript/ts-reset": "^0.6.1",
"@types/jest": "^29.5.14",
"@vue/test-utils": "^1.3.6",
"@vue/tsconfig": "^0.5.1",
@ -4248,6 +4250,13 @@
"node": ">= 10"
}
},
"node_modules/@total-typescript/ts-reset": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/@total-typescript/ts-reset/-/ts-reset-0.6.1.tgz",
"integrity": "sha512-cka47fVSo6lfQDIATYqb/vO1nvFfbPw7uWLayIXIhGETj0wcOOlrlkobOMDNQOFr9QOafegUPq13V2+6vtD7yg==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/babel__core": {
"version": "7.20.1",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz",
@ -4961,6 +4970,55 @@
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
},
"node_modules/@volar/language-core": {
"version": "2.4.11",
"resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.11.tgz",
"integrity": "sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==",
"license": "MIT",
"dependencies": {
"@volar/source-map": "2.4.11"
}
},
"node_modules/@volar/source-map": {
"version": "2.4.11",
"resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.11.tgz",
"integrity": "sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==",
"license": "MIT"
},
"node_modules/@volar/typescript": {
"version": "2.4.11",
"resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.11.tgz",
"integrity": "sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==",
"license": "MIT",
"dependencies": {
"@volar/language-core": "2.4.11",
"path-browserify": "^1.0.1",
"vscode-uri": "^3.0.8"
}
},
"node_modules/@vue/compiler-core": {
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
"integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.25.3",
"@vue/shared": "3.5.13",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
"integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
"license": "MIT",
"dependencies": {
"@vue/compiler-core": "3.5.13",
"@vue/shared": "3.5.13"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
@ -4974,6 +5032,16 @@
"prettier": "^1.18.2 || ^2.0.0"
}
},
"node_modules/@vue/compiler-vue2": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz",
"integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==",
"license": "MIT",
"dependencies": {
"de-indent": "^1.0.2",
"he": "^1.2.0"
}
},
"node_modules/@vue/component-compiler-utils": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz",
@ -5046,6 +5114,60 @@
}
}
},
"node_modules/@vue/language-core": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz",
"integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==",
"license": "MIT",
"dependencies": {
"@volar/language-core": "~2.4.11",
"@vue/compiler-dom": "^3.5.0",
"@vue/compiler-vue2": "^2.7.16",
"@vue/shared": "^3.5.0",
"alien-signals": "^0.4.9",
"minimatch": "^9.0.3",
"muggle-string": "^0.4.1",
"path-browserify": "^1.0.1"
},
"peerDependencies": {
"typescript": "*"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/@vue/language-core/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/@vue/language-core/node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/@vue/shared": {
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz",
"integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==",
"license": "MIT"
},
"node_modules/@vue/test-utils": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-1.3.6.tgz",
@ -5627,6 +5749,12 @@
"ajv": "^6.9.1"
}
},
"node_modules/alien-signals": {
"version": "0.4.14",
"resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz",
"integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==",
"license": "MIT"
},
"node_modules/amator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/amator/-/amator-1.1.0.tgz",
@ -7684,8 +7812,7 @@
"node_modules/de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
"dev": true
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0="
},
"node_modules/debounce": {
"version": "2.2.0",
@ -9396,6 +9523,12 @@
"node": ">=4.0"
}
},
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"license": "MIT"
},
"node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@ -10664,7 +10797,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true,
"bin": {
"he": "bin/he"
}
@ -15321,6 +15453,12 @@
"dev": true,
"peer": true
},
"node_modules/muggle-string": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz",
"integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
"license": "MIT"
},
"node_modules/multi-buffer-data-view": {
"version": "6.0.17",
"resolved": "https://registry.npmjs.org/multi-buffer-data-view/-/multi-buffer-data-view-6.0.17.tgz",
@ -16091,9 +16229,7 @@
"node_modules/path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
"dev": true,
"peer": true
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
},
"node_modules/path-exists": {
"version": "4.0.0",
@ -20277,6 +20413,12 @@
"dev": true,
"peer": true
},
"node_modules/vscode-uri": {
"version": "3.0.8",
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
"integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
"license": "MIT"
},
"node_modules/vue": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz",
@ -20540,6 +20682,22 @@
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
"dev": true
},
"node_modules/vue-tsc": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.0.tgz",
"integrity": "sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg==",
"license": "MIT",
"dependencies": {
"@volar/typescript": "~2.4.11",
"@vue/language-core": "2.2.0"
},
"bin": {
"vue-tsc": "bin/vue-tsc.js"
},
"peerDependencies": {
"typescript": ">=5.0.0"
}
},
"node_modules/vue-virtual-scroller": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vue-virtual-scroller/-/vue-virtual-scroller-1.1.2.tgz",
@ -24421,6 +24579,12 @@
"integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
"dev": true
},
"@total-typescript/ts-reset": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/@total-typescript/ts-reset/-/ts-reset-0.6.1.tgz",
"integrity": "sha512-cka47fVSo6lfQDIATYqb/vO1nvFfbPw7uWLayIXIhGETj0wcOOlrlkobOMDNQOFr9QOafegUPq13V2+6vtD7yg==",
"dev": true
},
"@types/babel__core": {
"version": "7.20.1",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz",
@ -25030,6 +25194,50 @@
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
},
"@volar/language-core": {
"version": "2.4.11",
"resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.11.tgz",
"integrity": "sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==",
"requires": {
"@volar/source-map": "2.4.11"
}
},
"@volar/source-map": {
"version": "2.4.11",
"resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.11.tgz",
"integrity": "sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ=="
},
"@volar/typescript": {
"version": "2.4.11",
"resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.11.tgz",
"integrity": "sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==",
"requires": {
"@volar/language-core": "2.4.11",
"path-browserify": "^1.0.1",
"vscode-uri": "^3.0.8"
}
},
"@vue/compiler-core": {
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
"integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
"requires": {
"@babel/parser": "^7.25.3",
"@vue/shared": "3.5.13",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.0"
}
},
"@vue/compiler-dom": {
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
"integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
"requires": {
"@vue/compiler-core": "3.5.13",
"@vue/shared": "3.5.13"
}
},
"@vue/compiler-sfc": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
@ -25041,6 +25249,15 @@
"source-map": "^0.6.1"
}
},
"@vue/compiler-vue2": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz",
"integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==",
"requires": {
"de-indent": "^1.0.2",
"he": "^1.2.0"
}
},
"@vue/component-compiler-utils": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz",
@ -25093,6 +25310,44 @@
"vue-eslint-parser": "^9.3.1"
}
},
"@vue/language-core": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz",
"integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==",
"requires": {
"@volar/language-core": "~2.4.11",
"@vue/compiler-dom": "^3.5.0",
"@vue/compiler-vue2": "^2.7.16",
"@vue/shared": "^3.5.0",
"alien-signals": "^0.4.9",
"minimatch": "^9.0.3",
"muggle-string": "^0.4.1",
"path-browserify": "^1.0.1"
},
"dependencies": {
"brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"requires": {
"balanced-match": "^1.0.0"
}
},
"minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"requires": {
"brace-expansion": "^2.0.1"
}
}
}
},
"@vue/shared": {
"version": "3.5.13",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz",
"integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="
},
"@vue/test-utils": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-1.3.6.tgz",
@ -25528,6 +25783,11 @@
"dev": true,
"requires": {}
},
"alien-signals": {
"version": "0.4.14",
"resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz",
"integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q=="
},
"amator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/amator/-/amator-1.1.0.tgz",
@ -27116,8 +27376,7 @@
"de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
"dev": true
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0="
},
"debounce": {
"version": "2.2.0",
@ -28358,6 +28617,11 @@
"dev": true,
"peer": true
},
"estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
},
"esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@ -29323,8 +29587,7 @@
"he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
},
"highlight.js": {
"version": "11.9.0",
@ -32685,6 +32948,11 @@
"dev": true,
"peer": true
},
"muggle-string": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz",
"integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ=="
},
"multi-buffer-data-view": {
"version": "6.0.17",
"resolved": "https://registry.npmjs.org/multi-buffer-data-view/-/multi-buffer-data-view-6.0.17.tgz",
@ -33240,9 +33508,7 @@
"path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
"dev": true,
"peer": true
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
},
"path-exists": {
"version": "4.0.0",
@ -36330,6 +36596,11 @@
"dev": true,
"peer": true
},
"vscode-uri": {
"version": "3.0.8",
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
"integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="
},
"vue": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz",
@ -36533,6 +36804,15 @@
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
"dev": true
},
"vue-tsc": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.0.tgz",
"integrity": "sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg==",
"requires": {
"@volar/typescript": "~2.4.11",
"@vue/language-core": "2.2.0"
}
},
"vue-virtual-scroller": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vue-virtual-scroller/-/vue-virtual-scroller-1.1.2.tgz",

4
package.json

@ -9,7 +9,7 @@
"dev": "node --max-old-space-size=4096 ./node_modules/webpack/bin/webpack.js --node-env development --progress",
"watch": "node --max-old-space-size=4096 ./node_modules/webpack/bin/webpack.js --node-env development --progress --watch",
"serve": "node --max-old-space-size=4096 ./node_modules/webpack/bin/webpack.js serve --node-env development --progress --allowed-hosts all",
"typescript:check": "tsc --noEmit",
"typescript:check": "vue-tsc --noEmit",
"typescript:generate": "npx openapi-typescript -t",
"test": "jest",
"test:watch": "jest --watch",
@ -70,6 +70,7 @@
"vue-frag": "^1.4.3",
"vue-material-design-icons": "^5.3.1",
"vue-router": "^3.6.5",
"vue-tsc": "^2.2.0",
"vue-virtual-scroller": "^1.1.2",
"vue2-leaflet": "^2.7.1",
"vuex": "^3.6.2",
@ -87,6 +88,7 @@
"@nextcloud/eslint-config": "^8.4.1",
"@nextcloud/stylelint-config": "^3.0.1",
"@nextcloud/webpack-vue-config": "^6.2.0",
"@total-typescript/ts-reset": "^0.6.1",
"@types/jest": "^29.5.14",
"@vue/test-utils": "^1.3.6",
"@vue/tsconfig": "^0.5.1",

4
src/App.vue

@ -44,14 +44,14 @@ import { useDocumentTitle } from './composables/useDocumentTitle.ts'
import { useHashCheck } from './composables/useHashCheck.js'
import { useIsInCall } from './composables/useIsInCall.js'
import { useSessionIssueHandler } from './composables/useSessionIssueHandler.js'
import { CONVERSATION, PARTICIPANT } from './constants.js'
import { CONVERSATION, PARTICIPANT } from './constants.ts'
import Router from './router/router.js'
import BrowserStorage from './services/BrowserStorage.js'
import { EventBus } from './services/EventBus.ts'
import { leaveConversationSync } from './services/participantsService.js'
import { useCallViewStore } from './stores/callView.js'
import { useFederationStore } from './stores/federation.ts'
import { useSidebarStore } from './stores/sidebar.js'
import { useSidebarStore } from './stores/sidebar.ts'
import { checkBrowser } from './utils/browserCheck.ts'
import { signalingKill } from './utils/webrtc/index.js'

3
src/PublicShareSidebarTrigger.vue

@ -15,7 +15,8 @@
</template>
<script setup lang="ts">
import { computed, UnwrapNestedRefs } from 'vue'
import { computed } from 'vue'
import type { UnwrapNestedRefs } from 'vue'
import MessageText from 'vue-material-design-icons/MessageText.vue'

2
src/components/AdminSettings/BotsSettings.vue

@ -88,7 +88,7 @@ import moment from '@nextcloud/moment'
import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
import NcPopover from '@nextcloud/vue/dist/Components/NcPopover.js'
import { BOT } from '../../constants.js'
import { BOT } from '../../constants.ts'
import { getAllBots } from '../../services/botsService.ts'
export default {

2
src/components/AdminSettings/RecordingServers.vue

@ -114,7 +114,7 @@ import NcPasswordField from '@nextcloud/vue/dist/Components/NcPasswordField.js'
import RecordingServer from '../../components/AdminSettings/RecordingServer.vue'
import TransitionWrapper from '../UIShared/TransitionWrapper.vue'
import { CONFIG } from '../../constants.js'
import { CONFIG } from '../../constants.ts'
import { hasTalkFeature } from '../../services/CapabilitiesManager.ts'
import { EventBus } from '../../services/EventBus.ts'

2
src/components/AdminSettings/SignalingServers.vue

@ -100,7 +100,7 @@ import NcPasswordField from '@nextcloud/vue/dist/Components/NcPasswordField.js'
import SignalingServer from '../../components/AdminSettings/SignalingServer.vue'
import { SIGNALING } from '../../constants.js'
import { SIGNALING } from '../../constants.ts'
import type { InitialState } from '../../types/index.ts'
const isCacheConfigured = loadState('spreed', 'has_cache_configured')

2
src/components/AdminSettings/WebServerSetupChecks.vue

@ -42,7 +42,7 @@ import { generateFilePath } from '@nextcloud/router'
import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
import NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'
import { VIRTUAL_BACKGROUND } from '../../constants.js'
import { VIRTUAL_BACKGROUND } from '../../constants.ts'
import JitsiStreamBackgroundEffect from '../../utils/media/effects/virtual-background/JitsiStreamBackgroundEffect.js'
import VirtualBackground from '../../utils/media/pipeline/VirtualBackground.js'

2
src/components/AvatarWrapper/AvatarWrapper.spec.js

@ -10,7 +10,7 @@ import NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'
import AvatarWrapper from './AvatarWrapper.vue'
import { ATTENDEE, AVATAR } from '../../constants.js'
import { ATTENDEE, AVATAR } from '../../constants.ts'
describe('AvatarWrapper.vue', () => {
const USER_ID = 'user-id'

2
src/components/AvatarWrapper/AvatarWrapper.vue

@ -53,7 +53,7 @@ import NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'
import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
import { useIsDarkTheme } from '@nextcloud/vue/dist/Composables/useIsDarkTheme.js'
import { ATTENDEE, AVATAR } from '../../constants.js'
import { ATTENDEE, AVATAR } from '../../constants.ts'
import { getUserProxyAvatarOcsUrl } from '../../services/avatarService.ts'
export default {

2
src/components/BreakoutRoomsEditor/BreakoutRoomsParticipantsEditor.vue

@ -107,7 +107,7 @@ import NcDialog from '@nextcloud/vue/dist/Components/NcDialog.js'
import SelectableParticipant from './SelectableParticipant.vue'
import BreakoutRoomItem from '../RightSidebar/BreakoutRooms/BreakoutRoomItem.vue'
import { ATTENDEE, CONVERSATION, PARTICIPANT } from '../../constants.js'
import { ATTENDEE, CONVERSATION, PARTICIPANT } from '../../constants.ts'
import { useBreakoutRoomsStore } from '../../stores/breakoutRooms.ts'
export default {

2
src/components/BreakoutRoomsEditor/SelectableParticipant.vue

@ -44,7 +44,7 @@ import { t } from '@nextcloud/l10n'
import AvatarWrapper from '../AvatarWrapper/AvatarWrapper.vue'
import { ATTENDEE } from '../../constants.js'
import { ATTENDEE } from '../../constants.ts'
import { getPreloadedUserStatus, getStatusMessage } from '../../utils/userStatus.ts'
export default {

2
src/components/CalendarEventsDialog.vue

@ -36,7 +36,7 @@ import SearchBox from './UIShared/SearchBox.vue'
import TransitionWrapper from './UIShared/TransitionWrapper.vue'
import { useStore } from '../composables/useStore.js'
import { ATTENDEE } from '../constants.js'
import { ATTENDEE } from '../constants.ts'
import { hasTalkFeature } from '../services/CapabilitiesManager.ts'
import { useGroupwareStore } from '../stores/groupware.ts'
import type { Conversation, Participant } from '../types/index.ts'

6
src/components/CallView/CallFailedDialog.vue

@ -30,7 +30,7 @@ const STATUS_ERRORS = {
403: t('spreed', 'This conversation is read-only'),
404: t('spreed', 'Conversation not found or not joined'),
412: t('spreed', "Lobby is still active and you're not a moderator"),
}
} as const
const connectionFailed = computed(() => store.getters.connectionFailed(props.token))
const connectionFailedDialogId = `connection-failed-${props.token}`
const message = computed(() => {
@ -38,8 +38,8 @@ const message = computed(() => {
return ''
}
const statusCode = connectionFailed.value?.meta?.statuscode
if (STATUS_ERRORS[statusCode]) {
const statusCode: keyof typeof STATUS_ERRORS | undefined = connectionFailed.value.meta?.statuscode
if (statusCode && STATUS_ERRORS[statusCode]) {
return STATUS_ERRORS[statusCode]
}
if (connectionFailed.value?.data?.error) {

2
src/components/CallView/CallView.vue

@ -151,7 +151,7 @@ import VideoVue from './shared/VideoVue.vue'
import ViewerOverlayCallView from './shared/ViewerOverlayCallView.vue'
import { placeholderImage, placeholderModel, placeholderName, placeholderSharedData } from './Grid/gridPlaceholders.ts'
import { SIMULCAST } from '../../constants.js'
import { SIMULCAST } from '../../constants.ts'
import BrowserStorage from '../../services/BrowserStorage.js'
import { fetchPeers } from '../../services/callsService.js'
import { getTalkConfig } from '../../services/CapabilitiesManager.ts'

4
src/components/CallView/Grid/Grid.vue

@ -161,9 +161,9 @@ import VideoBottomBar from '../shared/VideoBottomBar.vue'
import VideoVue from '../shared/VideoVue.vue'
import { placeholderImage, placeholderModel, placeholderName, placeholderSharedData } from './gridPlaceholders.ts'
import { PARTICIPANT, ATTENDEE } from '../../../constants.js'
import { PARTICIPANT, ATTENDEE } from '../../../constants.ts'
import { useCallViewStore } from '../../../stores/callView.js'
import { useSidebarStore } from '../../../stores/sidebar.js'
import { useSidebarStore } from '../../../stores/sidebar.ts'
// Max number of videos per page. `0`, the default value, means no cap
const videosCap = parseInt(loadState('spreed', 'grid_videos_limit'), 10) || 0

2
src/components/CallView/shared/EmptyCallView.vue

@ -35,7 +35,7 @@ import { t } from '@nextcloud/l10n'
import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
import { CONVERSATION, PARTICIPANT } from '../../../constants.js'
import { CONVERSATION, PARTICIPANT } from '../../../constants.ts'
import { copyConversationLinkToClipboard } from '../../../utils/handleUrl.ts'
export default {

2
src/components/CallView/shared/LocalAudioControlButton.vue

@ -29,7 +29,7 @@ import { useHotKey } from '@nextcloud/vue/dist/Composables/useHotKey.js'
import VolumeIndicator from '../../UIShared/VolumeIndicator.vue'
import { PARTICIPANT } from '../../../constants.js'
import { PARTICIPANT } from '../../../constants.ts'
import BrowserStorage from '../../../services/BrowserStorage.js'
export default {

2
src/components/CallView/shared/LocalVideo.vue

@ -73,7 +73,7 @@ import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
import VideoBackground from './VideoBackground.vue'
import AvatarWrapper from '../../AvatarWrapper/AvatarWrapper.vue'
import { AVATAR } from '../../../constants.js'
import { AVATAR } from '../../../constants.ts'
import { useCallViewStore } from '../../../stores/callView.js'
import attachMediaStream from '../../../utils/attachmediastream.js'
import { ConnectionState } from '../../../utils/webrtc/models/CallParticipantModel.js'

2
src/components/CallView/shared/LocalVideoControlButton.vue

@ -27,7 +27,7 @@ import { t } from '@nextcloud/l10n'
import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
import { useHotKey } from '@nextcloud/vue/dist/Composables/useHotKey.js'
import { PARTICIPANT } from '../../../constants.js'
import { PARTICIPANT } from '../../../constants.ts'
import BrowserStorage from '../../../services/BrowserStorage.js'
export default {

2
src/components/CallView/shared/VideoBottomBar.spec.js

@ -19,7 +19,7 @@ import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
import VideoBottomBar from './VideoBottomBar.vue'
import { CONVERSATION, PARTICIPANT } from '../../../constants.js'
import { CONVERSATION, PARTICIPANT } from '../../../constants.ts'
import storeConfig from '../../../store/storeConfig.js'
import { useCallViewStore } from '../../../stores/callView.js'
import { findNcButton } from '../../../test-helpers.js'

2
src/components/CallView/shared/VideoBottomBar.vue

@ -104,7 +104,7 @@ import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
import TransitionWrapper from '../../UIShared/TransitionWrapper.vue'
import { PARTICIPANT } from '../../../constants.js'
import { PARTICIPANT } from '../../../constants.ts'
import { useCallViewStore } from '../../../stores/callView.js'
import { ConnectionState } from '../../../utils/webrtc/models/CallParticipantModel.js'

2
src/components/CallView/shared/VideoVue.vue

@ -99,7 +99,7 @@ import VideoBottomBar from './VideoBottomBar.vue'
import AvatarWrapper from '../../AvatarWrapper/AvatarWrapper.vue'
import TransitionWrapper from '../../UIShared/TransitionWrapper.vue'
import { ATTENDEE, AVATAR } from '../../../constants.js'
import { ATTENDEE, AVATAR } from '../../../constants.ts'
import { EventBus } from '../../../services/EventBus.ts'
import { useCallViewStore } from '../../../stores/callView.js'
import { useGuestNameStore } from '../../../stores/guestName.js'

2
src/components/ChatView.vue

@ -69,7 +69,7 @@ import NewMessage from './NewMessage/NewMessage.vue'
import NewMessageUploadEditor from './NewMessage/NewMessageUploadEditor.vue'
import TransitionWrapper from './UIShared/TransitionWrapper.vue'
import { CONVERSATION, PARTICIPANT } from '../constants.js'
import { CONVERSATION, PARTICIPANT } from '../constants.ts'
import { getTalkConfig, hasTalkFeature } from '../services/CapabilitiesManager.ts'
import { EventBus } from '../services/EventBus.ts'
import { useChatExtrasStore } from '../stores/chatExtras.js'

2
src/components/ConversationIcon.vue

@ -62,7 +62,7 @@ import { t } from '@nextcloud/l10n'
import NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'
import { useIsDarkTheme } from '@nextcloud/vue/dist/Composables/useIsDarkTheme.js'
import { AVATAR, CONVERSATION } from '../constants.js'
import { AVATAR, CONVERSATION } from '../constants.ts'
import { getConversationAvatarOcsUrl } from '../services/avatarService.ts'
import { hasTalkFeature } from '../services/CapabilitiesManager.ts'
import { getPreloadedUserStatus } from '../utils/userStatus.ts'

2
src/components/ConversationSettings/BasicInfo.vue

@ -52,7 +52,7 @@ import { t } from '@nextcloud/l10n'
import ConversationAvatarEditor from './ConversationAvatarEditor.vue'
import EditableTextField from '../UIShared/EditableTextField.vue'
import { CONVERSATION } from '../../constants.js'
import { CONVERSATION } from '../../constants.ts'
import { hasTalkFeature, getTalkConfig } from '../../services/CapabilitiesManager.ts'
const supportsAvatar = hasTalkFeature('local', 'avatar')

2
src/components/ConversationSettings/BotsSettings.vue

@ -41,7 +41,7 @@ import { t } from '@nextcloud/l10n'
import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
import { BOT } from '../../constants.js'
import { BOT } from '../../constants.ts'
import { useBotsStore } from '../../stores/bots.ts'
export default {

2
src/components/ConversationSettings/ConversationAvatarEditor.vue

@ -125,7 +125,7 @@ import { useIsDarkTheme } from '@nextcloud/vue/dist/Composables/useIsDarkTheme.j
import ConversationIcon from '../ConversationIcon.vue'
import { AVATAR } from '../../constants.js'
import { AVATAR } from '../../constants.ts'
// eslint-disable-next-line n/no-extraneous-import
import 'cropperjs/dist/cropper.css'

2
src/components/ConversationSettings/ConversationPermissionsSettings.vue

@ -87,7 +87,7 @@ import NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'
import PermissionEditor from '../PermissionsEditor/PermissionsEditor.vue'
import { PARTICIPANT } from '../../constants.js'
import { PARTICIPANT } from '../../constants.ts'
const PERMISSIONS = PARTICIPANT.PERMISSIONS

2
src/components/ConversationSettings/ConversationSettingsDialog.vue

@ -132,7 +132,7 @@ import NotificationsSettings from './NotificationsSettings.vue'
import RecordingConsentSettings from './RecordingConsentSettings.vue'
import SipSettings from './SipSettings.vue'
import { CALL, CONFIG, PARTICIPANT, CONVERSATION } from '../../constants.js'
import { CALL, CONFIG, PARTICIPANT, CONVERSATION } from '../../constants.ts'
import { getTalkConfig, hasTalkFeature } from '../../services/CapabilitiesManager.ts'
import { useSettingsStore } from '../../stores/settings.js'

2
src/components/ConversationSettings/LinkShareSettings.vue

@ -119,7 +119,7 @@ import NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadi
import NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'
import NcPasswordField from '@nextcloud/vue/dist/Components/NcPasswordField.js'
import { CONVERSATION } from '../../constants.js'
import { CONVERSATION } from '../../constants.ts'
import { getTalkConfig, hasTalkFeature } from '../../services/CapabilitiesManager.ts'
import generatePassword from '../../utils/generatePassword.ts'
import { copyConversationLinkToClipboard } from '../../utils/handleUrl.ts'

2
src/components/ConversationSettings/ListableSettings.vue

@ -36,7 +36,7 @@ import { t } from '@nextcloud/l10n'
import NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'
import { CONVERSATION } from '../../constants.js'
import { CONVERSATION } from '../../constants.ts'
export default {
name: 'ListableSettings',

2
src/components/ConversationSettings/LobbySettings.vue

@ -93,7 +93,7 @@ import NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'
import ImportEmailsDialog from '../ImportEmailsDialog.vue'
import { WEBINAR } from '../../constants.js'
import { WEBINAR } from '../../constants.ts'
import { hasTalkFeature } from '../../services/CapabilitiesManager.ts'
import { EventBus } from '../../services/EventBus.ts'
import { futureRelativeTime } from '../../utils/formattedTime.ts'

2
src/components/ConversationSettings/LockingSettings.vue

@ -30,7 +30,7 @@ import { t } from '@nextcloud/l10n'
import NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'
import NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'
import { CONVERSATION } from '../../constants.js'
import { CONVERSATION } from '../../constants.ts'
export default {
name: 'LockingSettings',

2
src/components/ConversationSettings/MentionsSettings.vue

@ -27,7 +27,7 @@ import { t } from '@nextcloud/l10n'
import NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'
import { CONVERSATION } from '../../constants.js'
import { CONVERSATION } from '../../constants.ts'
export default {
name: 'MentionsSettings',

2
src/components/ConversationSettings/NotificationsSettings.vue

@ -41,7 +41,7 @@ import { t } from '@nextcloud/l10n'
import NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'
import { PARTICIPANT } from '../../constants.js'
import { PARTICIPANT } from '../../constants.ts'
import { hasTalkFeature } from '../../services/CapabilitiesManager.ts'
const notificationLevels = [

2
src/components/ConversationSettings/RecordingConsentSettings.vue

@ -33,7 +33,7 @@ import { t } from '@nextcloud/l10n'
import NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'
import { CALL, CONFIG, CONVERSATION } from '../../constants.js'
import { CALL, CONFIG, CONVERSATION } from '../../constants.ts'
import { getTalkConfig } from '../../services/CapabilitiesManager.ts'
export default {

2
src/components/ConversationSettings/SipSettings.vue

@ -35,7 +35,7 @@ import { t } from '@nextcloud/l10n'
import NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'
import { WEBINAR } from '../../constants.js'
import { WEBINAR } from '../../constants.ts'
export default {
name: 'SipSettings',

3
src/components/ImportEmailsDialog.vue

@ -17,6 +17,7 @@ import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
import NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'
import { importEmails } from '../services/participantsService.js'
import type { ApiErrorResponse } from '../types/index.ts'
const loading = ref(false)
const listImport = ref<HTMLInputElement | null>(null)
@ -80,7 +81,7 @@ async function testList(file: File) {
const response = await importEmails(props.token, file, true)
uploadResult.value = response.data.ocs.data
} catch (error) {
uploadResult.value = error?.response?.data?.ocs?.data
uploadResult.value = (error as ApiErrorResponse).response?.data?.ocs?.data ?? null
} finally {
loading.value = false
}

2
src/components/LeftSidebar/CallPhoneDialog/CallPhoneDialog.vue

@ -54,7 +54,7 @@ import LoadingComponent from '../../LoadingComponent.vue'
import SelectPhoneNumber from '../../SelectPhoneNumber.vue'
import DialpadPanel from '../../UIShared/DialpadPanel.vue'
import { CONVERSATION, PARTICIPANT } from '../../../constants.js'
import { CONVERSATION, PARTICIPANT } from '../../../constants.ts'
import { callSIPDialOut } from '../../../services/callsService.js'
import { createPrivateConversation } from '../../../services/conversationsService.js'
import { addParticipant } from '../../../services/participantsService.js'

2
src/components/LeftSidebar/ConversationsList/Conversation.spec.js

@ -17,7 +17,7 @@ import NcListItem from '@nextcloud/vue/dist/Components/NcListItem.js'
import Conversation from './Conversation.vue'
import router from '../../../__mocks__/router.js'
import { CONVERSATION, PARTICIPANT, ATTENDEE } from '../../../constants.js'
import { CONVERSATION, PARTICIPANT, ATTENDEE } from '../../../constants.ts'
import { leaveConversation } from '../../../services/participantsService.js'
import storeConfig from '../../../store/storeConfig.js'
import { findNcButton } from '../../../test-helpers.js'

2
src/components/LeftSidebar/ConversationsList/Conversation.vue

@ -245,7 +245,7 @@ import NcListItem from '@nextcloud/vue/dist/Components/NcListItem.js'
import ConversationIcon from './../../ConversationIcon.vue'
import { useConversationInfo } from '../../../composables/useConversationInfo.js'
import { PARTICIPANT, AVATAR, CONVERSATION } from '../../../constants.js'
import { PARTICIPANT, AVATAR, CONVERSATION } from '../../../constants.ts'
import { hasTalkFeature } from '../../../services/CapabilitiesManager.ts'
import { copyConversationLinkToClipboard } from '../../../utils/handleUrl.ts'

2
src/components/LeftSidebar/ConversationsList/ConversationsListVirtual.vue

@ -25,7 +25,7 @@ import { RecycleScroller } from 'vue-virtual-scroller'
import Conversation from './Conversation.vue'
import LoadingPlaceholder from '../../UIShared/LoadingPlaceholder.vue'
import { AVATAR } from '../../../constants.js'
import { AVATAR } from '../../../constants.ts'
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'

2
src/components/LeftSidebar/InvitationHandler.vue

@ -83,7 +83,7 @@ import NcRichText from '@nextcloud/vue/dist/Components/NcRichText.js'
import ConversationIcon from '../ConversationIcon.vue'
import Mention from '../MessagesList/MessagesGroup/Message/MessagePart/Mention.vue'
import { CONVERSATION } from '../../constants.js'
import { CONVERSATION } from '../../constants.ts'
import { useFederationStore } from '../../stores/federation.ts'
export default {

2
src/components/LeftSidebar/LeftSidebar.vue

@ -366,7 +366,7 @@ import SearchBox from '../UIShared/SearchBox.vue'
import TransitionWrapper from '../UIShared/TransitionWrapper.vue'
import { useArrowNavigation } from '../../composables/useArrowNavigation.js'
import { ATTENDEE, AVATAR, CONVERSATION } from '../../constants.js'
import { ATTENDEE, AVATAR, CONVERSATION } from '../../constants.ts'
import BrowserStorage from '../../services/BrowserStorage.js'
import { getTalkConfig, hasTalkFeature } from '../../services/CapabilitiesManager.ts'
import {

2
src/components/MediaSettings/MediaSettings.vue

@ -205,7 +205,7 @@ import VolumeIndicator from '../UIShared/VolumeIndicator.vue'
import { useDevices } from '../../composables/useDevices.js'
import { useId } from '../../composables/useId.ts'
import { useIsInCall } from '../../composables/useIsInCall.js'
import { AVATAR, CALL, CONFIG, PARTICIPANT, VIRTUAL_BACKGROUND } from '../../constants.js'
import { AVATAR, CALL, CONFIG, PARTICIPANT, VIRTUAL_BACKGROUND } from '../../constants.ts'
import BrowserStorage from '../../services/BrowserStorage.js'
import { getTalkConfig } from '../../services/CapabilitiesManager.ts'
import { useGuestNameStore } from '../../stores/guestName.js'

10
src/components/MediaSettings/MediaSettingsTabs.vue

@ -5,7 +5,7 @@
<script setup lang="ts">
import { computed, ref } from 'vue'
import type { Component } from 'vue'
import type { CSSProperties, Component } from 'vue'
import { isRTL } from '@nextcloud/l10n'
@ -45,6 +45,12 @@ const enableTransition = ref(false)
/** Index of the active tab for the transition effect */
const activeIndex = computed(() => props.tabs.findIndex(tab => tab.id === props.active))
/** Inline styles to shift tabs */
const tabStyles = computed<CSSProperties | undefined>(() => {
return activeIndex.value !== -1
? { transform: `translateX(${(isRTLDirection ? 1 : -1) * activeIndex.value * 100}%)` }
: undefined
})
/**
* Whether the tab is active
@ -130,7 +136,7 @@ function handleTabsAfterClosed() {
:inert="!isActive(tab.id)"
:aria-hidden="!isActive(tab.id)"
:aria-labelledby="getRefId('tab', tab.id)"
:style="activeIndex !== -1 ? `transform: translateX(${(isRTLDirection ? 1 : -1) * activeIndex * 100}%)` : ''">
:style="tabStyles">
<slot :name="`tab-panel:${tab.id}`" />
</div>
</div>

2
src/components/MediaSettings/VideoBackgroundEditor.vue

@ -83,7 +83,7 @@ import { FilePickerVue } from '@nextcloud/dialogs/filepicker.js'
import { t } from '@nextcloud/l10n'
import { imagePath, generateUrl } from '@nextcloud/router'
import { VIRTUAL_BACKGROUND } from '../../constants.js'
import { VIRTUAL_BACKGROUND } from '../../constants.ts'
import BrowserStorage from '../../services/BrowserStorage.js'
import { getTalkConfig } from '../../services/CapabilitiesManager.ts'
import { getDavClient } from '../../services/DavClient.js'

2
src/components/MessagesList/MessagesGroup/Message/Message.spec.js

@ -24,7 +24,7 @@ import MessageBody from './MessagePart/MessageBody.vue'
import Quote from '../../../Quote.vue'
import * as useIsInCallModule from '../../../../composables/useIsInCall.js'
import { CONVERSATION, ATTENDEE, PARTICIPANT } from '../../../../constants.js'
import { CONVERSATION, ATTENDEE, PARTICIPANT } from '../../../../constants.ts'
import { EventBus } from '../../../../services/EventBus.ts'
import storeConfig from '../../../../store/storeConfig.js'

2
src/components/MessagesList/MessagesGroup/Message/Message.vue

@ -119,7 +119,7 @@ import MessageBody from './MessagePart/MessageBody.vue'
import Poll from './MessagePart/Poll.vue'
import Reactions from './MessagePart/Reactions.vue'
import { CONVERSATION, MENTION, PARTICIPANT } from '../../../../constants.js'
import { CONVERSATION, MENTION, PARTICIPANT } from '../../../../constants.ts'
import { getTalkConfig, hasTalkFeature } from '../../../../services/CapabilitiesManager.ts'
import { EventBus } from '../../../../services/EventBus.ts'
import { useChatExtrasStore } from '../../../../stores/chatExtras.js'

2
src/components/MessagesList/MessagesGroup/Message/MessageButtonsBar/MessageButtonsBar.spec.js

@ -14,7 +14,7 @@ import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
import MessageButtonsBar from './../MessageButtonsBar/MessageButtonsBar.vue'
import * as useMessageInfoModule from '../../../../../composables/useMessageInfo.js'
import { CONVERSATION, ATTENDEE, PARTICIPANT } from '../../../../../constants.js'
import { CONVERSATION, ATTENDEE, PARTICIPANT } from '../../../../../constants.ts'
import storeConfig from '../../../../../store/storeConfig.js'
import { useIntegrationsStore } from '../../../../../stores/integrations.js'
import { findNcActionButton, findNcButton } from '../../../../../test-helpers.js'

2
src/components/MessagesList/MessagesGroup/Message/MessageButtonsBar/MessageButtonsBar.vue

@ -303,7 +303,7 @@ import NcEmojiPicker from '@nextcloud/vue/dist/Components/NcEmojiPicker.js'
import { emojiSearch } from '@nextcloud/vue/dist/Functions/emoji.js'
import { useMessageInfo } from '../../../../../composables/useMessageInfo.js'
import { CONVERSATION, ATTENDEE, PARTICIPANT } from '../../../../../constants.js'
import { CONVERSATION, ATTENDEE, PARTICIPANT } from '../../../../../constants.ts'
import { hasTalkFeature } from '../../../../../services/CapabilitiesManager.ts'
import { getMessageReminder, removeMessageReminder, setMessageReminder } from '../../../../../services/remindersService.js'
import { useIntegrationsStore } from '../../../../../stores/integrations.js'

2
src/components/MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue

@ -80,7 +80,7 @@ import AudioPlayer from './AudioPlayer.vue'
import TransitionWrapper from '../../../../UIShared/TransitionWrapper.vue'
import { useViewer } from '../../../../../composables/useViewer.js'
import { SHARED_ITEM } from '../../../../../constants.js'
import { SHARED_ITEM } from '../../../../../constants.ts'
import { getTalkConfig } from '../../../../../services/CapabilitiesManager.ts'
import { useSharedItemsStore } from '../../../../../stores/sharedItems.js'

2
src/components/MessagesList/MessagesGroup/Message/MessagePart/Mention.vue

@ -21,7 +21,7 @@ import { loadState } from '@nextcloud/initial-state'
import NcUserBubble from '@nextcloud/vue/dist/Components/NcUserBubble.js'
import { useIsDarkTheme } from '@nextcloud/vue/dist/Composables/useIsDarkTheme.js'
import { MENTION } from '../../../../../constants.js'
import { MENTION } from '../../../../../constants.ts'
import { getConversationAvatarOcsUrl, getUserProxyAvatarOcsUrl } from '../../../../../services/avatarService.ts'
export default {

2
src/components/MessagesList/MessagesGroup/Message/MessagePart/Poll.vue

@ -58,7 +58,7 @@ import { t, n } from '@nextcloud/l10n'
import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
import { POLL } from '../../../../../constants.js'
import { POLL } from '../../../../../constants.ts'
import { usePollsStore } from '../../../../../stores/polls.ts'
export default {

2
src/components/MessagesList/MessagesGroup/Message/MessagePart/Reactions.spec.js

@ -15,7 +15,7 @@ import NcPopover from '@nextcloud/vue/dist/Components/NcPopover.js'
import Reactions from './Reactions.vue'
import { ATTENDEE } from '../../../../../constants.js'
import { ATTENDEE } from '../../../../../constants.ts'
import {
addReactionToMessage,
removeReactionFromMessage,

2
src/components/MessagesList/MessagesGroup/Message/MessagePart/Reactions.vue

@ -88,7 +88,7 @@ import NcPopover from '@nextcloud/vue/dist/Components/NcPopover.js'
import ReactionsList from './ReactionsList.vue'
import { ATTENDEE } from '../../../../../constants.js'
import { ATTENDEE } from '../../../../../constants.ts'
import { useGuestNameStore } from '../../../../../stores/guestName.js'
import { useReactionsStore } from '../../../../../stores/reactions.js'
import { getDisplayNameWithFallback } from '../../../../../utils/getDisplayName.ts'

2
src/components/MessagesList/MessagesGroup/Message/MessagePart/ReactionsList.vue

@ -55,7 +55,7 @@ import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
import AvatarWrapper from '../../../../AvatarWrapper/AvatarWrapper.vue'
import { ATTENDEE, AVATAR } from '../../../../../constants.js'
import { ATTENDEE, AVATAR } from '../../../../../constants.ts'
import { useGuestNameStore } from '../../../../../stores/guestName.js'
import { getDisplayNameWithFallback } from '../../../../../utils/getDisplayName.ts'

2
src/components/MessagesList/MessagesGroup/MessagesGroup.spec.js

@ -9,7 +9,7 @@ import Vuex from 'vuex'
import MessagesGroup from './MessagesGroup.vue'
import { ATTENDEE } from '../../../constants.js'
import { ATTENDEE } from '../../../constants.ts'
import storeConfig from '../../../store/storeConfig.js'
import { useGuestNameStore } from '../../../stores/guestName.js'

2
src/components/MessagesList/MessagesGroup/MessagesGroup.vue

@ -36,7 +36,7 @@ import Message from './Message/Message.vue'
import AvatarWrapper from '../../AvatarWrapper/AvatarWrapper.vue'
import { useMessageInfo } from '../../../composables/useMessageInfo.js'
import { ATTENDEE, AVATAR } from '../../../constants.js'
import { ATTENDEE, AVATAR } from '../../../constants.ts'
import { useGuestNameStore } from '../../../stores/guestName.js'
export default {

2
src/components/MessagesList/MessagesGroup/MessagesSystemGroup.spec.js

@ -9,7 +9,7 @@ import Vuex from 'vuex'
import MessagesSystemGroup from './MessagesSystemGroup.vue'
import { ATTENDEE } from '../../../constants.js'
import { ATTENDEE } from '../../../constants.ts'
import storeConfig from '../../../store/storeConfig.js'
describe('MessagesSystemGroup.vue', () => {

2
src/components/MessagesList/MessagesList.spec.js

@ -9,7 +9,7 @@ import Vuex from 'vuex'
import MessagesList from './MessagesList.vue'
import { ATTENDEE } from '../../constants.js'
import { ATTENDEE } from '../../constants.ts'
import storeConfig from '../../store/storeConfig.js'
const fakeTimestamp = (value) => new Date(value).getTime() / 1000

2
src/components/MessagesList/MessagesList.vue

@ -78,7 +78,7 @@ import TransitionWrapper from '../UIShared/TransitionWrapper.vue'
import { useDocumentVisibility } from '../../composables/useDocumentVisibility.ts'
import { useIsInCall } from '../../composables/useIsInCall.js'
import { ATTENDEE, CHAT, CONVERSATION, MESSAGE } from '../../constants.js'
import { ATTENDEE, CHAT, CONVERSATION, MESSAGE } from '../../constants.ts'
import { EventBus } from '../../services/EventBus.ts'
import { useChatExtrasStore } from '../../stores/chatExtras.js'
import { debugTimer } from '../../utils/debugTimer.ts'

2
src/components/NewConversationDialog/NewConversationContactsPage.vue

@ -76,7 +76,7 @@ import DialpadPanel from '../UIShared/DialpadPanel.vue'
import TransitionWrapper from '../UIShared/TransitionWrapper.vue'
import { useArrowNavigation } from '../../composables/useArrowNavigation.js'
import { SHARE } from '../../constants.js'
import { SHARE } from '../../constants.ts'
import { autocompleteQuery } from '../../services/coreService.ts'
import CancelableRequest from '../../utils/cancelableRequest.js'

2
src/components/NewConversationDialog/NewConversationDialog.vue

@ -123,7 +123,7 @@ import LoadingComponent from '../LoadingComponent.vue'
import { useId } from '../../composables/useId.ts'
import { useIsInCall } from '../../composables/useIsInCall.js'
import { CONVERSATION } from '../../constants.js'
import { CONVERSATION } from '../../constants.ts'
import { getTalkConfig } from '../../services/CapabilitiesManager.ts'
import { addParticipant } from '../../services/participantsService.js'
import { copyConversationLinkToClipboard } from '../../utils/handleUrl.ts'

2
src/components/NewConversationDialog/NewConversationSetupPage.vue

@ -73,7 +73,7 @@ import NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'
import ConversationAvatarEditor from '../ConversationSettings/ConversationAvatarEditor.vue'
import ListableSettings from '../ConversationSettings/ListableSettings.vue'
import { CONVERSATION } from '../../constants.js'
import { CONVERSATION } from '../../constants.ts'
import { hasTalkFeature, getTalkConfig } from '../../services/CapabilitiesManager.ts'
import generatePassword from '../../utils/generatePassword.ts'

2
src/components/NewMessage/NewMessage.vue

@ -198,7 +198,7 @@ import Quote from '../Quote.vue'
import { useChatMentions } from '../../composables/useChatMentions.ts'
import { useTemporaryMessage } from '../../composables/useTemporaryMessage.ts'
import { CONVERSATION, PARTICIPANT, PRIVACY } from '../../constants.js'
import { CONVERSATION, PARTICIPANT, PRIVACY } from '../../constants.ts'
import BrowserStorage from '../../services/BrowserStorage.js'
import { getTalkConfig, hasTalkFeature } from '../../services/CapabilitiesManager.ts'
import { EventBus } from '../../services/EventBus.ts'

2
src/components/NewMessage/NewMessageAbsenceInfo.vue

@ -52,7 +52,7 @@ import { useIsDarkTheme } from '@nextcloud/vue/dist/Composables/useIsDarkTheme.j
import AvatarWrapper from '../AvatarWrapper/AvatarWrapper.vue'
import { AVATAR } from '../../constants.js'
import { AVATAR } from '../../constants.ts'
export default {
name: 'NewMessageAbsenceInfo',

2
src/components/NewMessage/NewMessageChatSummary.vue

@ -67,7 +67,7 @@ import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
import NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'
import { useStore } from '../../composables/useStore.js'
import { TASK_PROCESSING } from '../../constants.js'
import { TASK_PROCESSING } from '../../constants.ts'
import { deleteTaskById, getTaskById } from '../../services/coreService.ts'
import { useChatExtrasStore } from '../../stores/chatExtras.js'
import type { TaskProcessingResponse, SummarizeChatTask } from '../../types/index.ts'

2
src/components/NewMessage/NewMessageTypingIndicator.vue

@ -32,7 +32,7 @@ import { t, n } from '@nextcloud/l10n'
import AvatarWrapper from '../AvatarWrapper/AvatarWrapper.vue'
import { AVATAR } from '../../constants.js'
import { AVATAR } from '../../constants.ts'
import { useGuestNameStore } from '../../stores/guestName.js'
export default {

2
src/components/PermissionsEditor/PermissionsEditor.vue

@ -71,7 +71,7 @@ import NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadi
import NcModal from '@nextcloud/vue/dist/Components/NcModal.js'
import { useId } from '../../composables/useId.ts'
import { PARTICIPANT } from '../../constants.js'
import { PARTICIPANT } from '../../constants.ts'
const PERMISSIONS = PARTICIPANT.PERMISSIONS

37
src/components/PollViewer/PollEditor.vue

@ -131,11 +131,11 @@ import NcDialog from '@nextcloud/vue/dist/Components/NcDialog.js'
import NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'
import { useStore } from '../../composables/useStore.js'
import { POLL } from '../../constants.js'
import { POLL } from '../../constants.ts'
import { hasTalkFeature } from '../../services/CapabilitiesManager.ts'
import { EventBus } from '../../services/EventBus.ts'
import { usePollsStore } from '../../stores/polls.ts'
import type { createPollParams } from '../../types/index.ts'
import type { createPollParams, requiredPollParams } from '../../types/index.ts'
import { convertToJSONDataURI } from '../../utils/fileDownload.ts'
import { validatePollForm } from '../../utils/validatePollForm.ts'
@ -157,8 +157,8 @@ const store = useStore()
const pollsStore = usePollsStore()
const isOpenedFromDraft = ref(false)
const pollOption = ref(null)
const pollImport = ref(null)
const pollOption = ref<InstanceType<typeof NcTextField>[] | null>(null)
const pollImport = ref<HTMLInputElement | null>(null)
const pollForm = reactive<createPollParams>({
question: '',
@ -210,7 +210,7 @@ function deleteOption(index: number) {
function addOption() {
pollForm.options.push('')
nextTick(() => {
pollOption.value.at(-1).focus()
pollOption.value!.at(-1).focus()
})
}
@ -238,8 +238,18 @@ function fillPollEditorFromDraft(id: number | null, fromDrafts: boolean) {
isOpenedFromDraft.value = true
}
if (id && pollsStore.drafts[props.token][id]) {
fillPollForm(pollsStore.drafts[props.token][id])
if (id === null) {
return
}
const draft = pollsStore.drafts[props.token][id]
if (draft) {
fillPollForm({
question: draft.question,
options: [...draft.options],
resultMode: draft.resultMode,
maxVotes: draft.maxVotes,
})
}
}
@ -247,7 +257,7 @@ function fillPollEditorFromDraft(id: number | null, fromDrafts: boolean) {
* Call native input[type='file'] to import a file
*/
function triggerImport() {
pollImport.value.click()
pollImport.value!.click()
}
/**
@ -255,7 +265,8 @@ function triggerImport() {
* @param event import event
*/
function importPoll(event: Event) {
if (!(event.target as HTMLInputElement).files?.[0]) {
const file = (event.target as HTMLInputElement).files?.[0]
if (!file) {
return
}
@ -270,17 +281,15 @@ function importPoll(event: Event) {
}
}
reader.readAsText((event.target as HTMLInputElement).files[0])
reader.readAsText(file)
}
/**
* Insert data into form fields
* @param payload data to fill with
*/
function fillPollForm(payload: createPollParams) {
for (const key of Object.keys(pollForm)) {
pollForm[key] = payload[key]
}
function fillPollForm(payload: requiredPollParams) {
Object.assign(pollForm, payload)
}
/**

4
src/components/PollViewer/PollManager.vue

@ -10,14 +10,14 @@ import PollDraftHandler from './PollDraftHandler.vue'
import PollEditor from './PollEditor.vue'
import { useStore } from '../../composables/useStore.js'
import { CONVERSATION, PARTICIPANT } from '../../constants.js'
import { CONVERSATION, PARTICIPANT } from '../../constants.ts'
import { hasTalkFeature } from '../../services/CapabilitiesManager.ts'
import { EventBus } from '../../services/EventBus.ts'
import type { Events } from '../../services/EventBus.ts'
const store = useStore()
const pollEditorRef = ref(null)
const pollEditorRef = ref<InstanceType<typeof PollEditor> | null>(null)
const showPollEditor = ref(false)
const showPollDraftHandler = ref(false)

2
src/components/PollViewer/PollViewer.vue

@ -136,7 +136,7 @@ import PollVotersDetails from './PollVotersDetails.vue'
import { useId } from '../../composables/useId.ts'
import { useIsInCall } from '../../composables/useIsInCall.js'
import { POLL } from '../../constants.js'
import { POLL } from '../../constants.ts'
import { hasTalkFeature } from '../../services/CapabilitiesManager.ts'
import { EventBus } from '../../services/EventBus.ts'
import { usePollsStore } from '../../stores/polls.ts'

2
src/components/PollViewer/PollVotersDetails.vue

@ -49,7 +49,7 @@ import NcPopover from '@nextcloud/vue/dist/Components/NcPopover.js'
import AvatarWrapper from '../AvatarWrapper/AvatarWrapper.vue'
import { AVATAR } from '../../constants.js'
import { AVATAR } from '../../constants.ts'
import { getDisplayNameWithFallback } from '../../utils/getDisplayName.ts'
export default {

2
src/components/Quote.vue

@ -70,7 +70,7 @@ import DefaultParameter from './MessagesList/MessagesGroup/Message/MessagePart/D
import FilePreview from './MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue'
import { useMessageInfo } from '../composables/useMessageInfo.js'
import { ATTENDEE, AVATAR } from '../constants.js'
import { ATTENDEE, AVATAR } from '../constants.ts'
import { EventBus } from '../services/EventBus.ts'
import { useChatExtrasStore } from '../stores/chatExtras.js'

2
src/components/RightSidebar/BreakoutRooms/BreakoutRoomItem.vue

@ -75,7 +75,7 @@ import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
import SendMessageDialog from '../../BreakoutRoomsEditor/SendMessageDialog.vue'
import { CONVERSATION, PARTICIPANT } from '../../../constants.js'
import { CONVERSATION, PARTICIPANT } from '../../../constants.ts'
import { EventBus } from '../../../services/EventBus.ts'
import { useBreakoutRoomsStore } from '../../../stores/breakoutRooms.ts'

2
src/components/RightSidebar/BreakoutRooms/BreakoutRoomsActions.vue

@ -135,7 +135,7 @@ import SendMessageDialog from '../../BreakoutRoomsEditor/SendMessageDialog.vue'
import { useId } from '../../../composables/useId.ts'
import { useIsInCall } from '../../../composables/useIsInCall.js'
import { CONVERSATION, PARTICIPANT } from '../../../constants.js'
import { CONVERSATION, PARTICIPANT } from '../../../constants.ts'
import { EventBus } from '../../../services/EventBus.ts'
import { useBreakoutRoomsStore } from '../../../stores/breakoutRooms.ts'

2
src/components/RightSidebar/BreakoutRooms/BreakoutRoomsTab.vue

@ -42,7 +42,7 @@ import BreakoutRoomItem from './BreakoutRoomItem.vue'
import BreakoutRoomsActions from './BreakoutRoomsActions.vue'
import Participant from '../Participants/Participant.vue'
import { CONVERSATION, PARTICIPANT } from '../../../constants.js'
import { CONVERSATION, PARTICIPANT } from '../../../constants.ts'
import { useBreakoutRoomsStore } from '../../../stores/breakoutRooms.ts'
export default {

2
src/components/RightSidebar/InternalSignalingHint.vue

@ -14,7 +14,7 @@ import NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'
import { useIsInCall } from '../../composables/useIsInCall.js'
import { useStore } from '../../composables/useStore.js'
import { CONVERSATION } from '../../constants.js'
import { CONVERSATION } from '../../constants.ts'
import { EventBus } from '../../services/EventBus.ts'
const store = useStore()

2
src/components/RightSidebar/Participants/Participant.spec.js

@ -25,7 +25,7 @@ import NcTextArea from '@nextcloud/vue/dist/Components/NcTextArea.js'
import Participant from './Participant.vue'
import AvatarWrapper from '../../AvatarWrapper/AvatarWrapper.vue'
import { ATTENDEE, PARTICIPANT, WEBINAR } from '../../../constants.js'
import { ATTENDEE, PARTICIPANT, WEBINAR } from '../../../constants.ts'
import storeConfig from '../../../store/storeConfig.js'
import { findNcActionButton, findNcButton } from '../../../test-helpers.js'

2
src/components/RightSidebar/Participants/Participant.vue

@ -347,7 +347,7 @@ import AvatarWrapper from '../../AvatarWrapper/AvatarWrapper.vue'
import DialpadPanel from '../../UIShared/DialpadPanel.vue'
import { useIsInCall } from '../../../composables/useIsInCall.js'
import { CONVERSATION, PARTICIPANT, ATTENDEE, WEBINAR } from '../../../constants.js'
import { CONVERSATION, PARTICIPANT, ATTENDEE, WEBINAR } from '../../../constants.ts'
import {
callSIPDialOut,
callSIPHangupPhone,

2
src/components/RightSidebar/Participants/ParticipantPermissionsEditor.spec.js

@ -9,7 +9,7 @@ import Vuex from 'vuex'
import ParticipantPermissionsEditor from './ParticipantPermissionsEditor.vue'
import PermissionsEditor from '../../PermissionsEditor/PermissionsEditor.vue'
import { PARTICIPANT, ATTENDEE } from '../../../constants.js'
import { PARTICIPANT, ATTENDEE } from '../../../constants.ts'
import storeConfig from '../../../store/storeConfig.js'
describe('ParticipantPermissionsEditor.vue', () => {

2
src/components/RightSidebar/Participants/ParticipantPermissionsEditor.vue

@ -18,7 +18,7 @@ import { t } from '@nextcloud/l10n'
import PermissionEditor from '../../PermissionsEditor/PermissionsEditor.vue'
import { PARTICIPANT } from '../../../constants.js'
import { PARTICIPANT } from '../../../constants.ts'
export default {
name: 'ParticipantPermissionsEditor',

2
src/components/RightSidebar/Participants/ParticipantsListVirtual.vue

@ -24,7 +24,7 @@ import { RecycleScroller } from 'vue-virtual-scroller'
import Participant from './Participant.vue'
import LoadingPlaceholder from '../../UIShared/LoadingPlaceholder.vue'
import { AVATAR } from '../../../constants.js'
import { AVATAR } from '../../../constants.ts'
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'

2
src/components/RightSidebar/Participants/ParticipantsSearchResults.vue

@ -94,7 +94,7 @@ import NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'
import ParticipantsList from './ParticipantsList.vue'
import Hint from '../../UIShared/Hint.vue'
import { ATTENDEE } from '../../../constants.js'
import { ATTENDEE } from '../../../constants.ts'
import { useIntegrationsStore } from '../../../stores/integrations.js'
const isCirclesEnabled = loadState('spreed', 'circles_enabled')

4
src/components/RightSidebar/Participants/ParticipantsTab.vue

@ -84,12 +84,12 @@ import { useGetParticipants } from '../../../composables/useGetParticipants.js'
import { useId } from '../../../composables/useId.ts'
import { useIsInCall } from '../../../composables/useIsInCall.js'
import { useSortParticipants } from '../../../composables/useSortParticipants.js'
import { ATTENDEE } from '../../../constants.js'
import { ATTENDEE } from '../../../constants.ts'
import { getTalkConfig, hasTalkFeature } from '../../../services/CapabilitiesManager.ts'
import { autocompleteQuery } from '../../../services/coreService.ts'
import { EventBus } from '../../../services/EventBus.ts'
import { addParticipant } from '../../../services/participantsService.js'
import { useSidebarStore } from '../../../stores/sidebar.js'
import { useSidebarStore } from '../../../stores/sidebar.ts'
import CancelableRequest from '../../../utils/cancelableRequest.js'
const isFederationEnabled = getTalkConfig('local', 'federation', 'enabled')

4
src/components/RightSidebar/RightSidebar.vue

@ -154,9 +154,9 @@ import SipSettings from './SipSettings.vue'
import ChatView from '../ChatView.vue'
import SetGuestUsername from '../SetGuestUsername.vue'
import { CONVERSATION, WEBINAR, PARTICIPANT } from '../../constants.js'
import { CONVERSATION, WEBINAR, PARTICIPANT } from '../../constants.ts'
import { hasTalkFeature } from '../../services/CapabilitiesManager.ts'
import { useSidebarStore } from '../../stores/sidebar.js'
import { useSidebarStore } from '../../stores/sidebar.ts'
export default {
name: 'RightSidebar',

16
src/components/RightSidebar/SearchMessages/SearchMessagesTab.vue

@ -31,14 +31,15 @@ import TransitionWrapper from '../../UIShared/TransitionWrapper.vue'
import { useIsInCall } from '../../../composables/useIsInCall.js'
import { useStore } from '../../../composables/useStore.js'
import { ATTENDEE } from '../../../constants.js'
import { ATTENDEE } from '../../../constants.ts'
import { searchMessages } from '../../../services/coreService.ts'
import { EventBus } from '../../../services/EventBus.ts'
import {
import type {
CoreUnifiedSearchResultEntry,
UserFilterObject,
SearchMessagePayload,
UnifiedSearchResponse,
Participant,
} from '../../../types/index.ts'
import CancelableRequest from '../../../utils/cancelableRequest.js'
@ -49,7 +50,7 @@ const emit = defineEmits<{
(event: 'close'): void
}>()
const searchBox = ref(null)
const searchBox = ref<InstanceType<typeof SearchBox> | null>(null)
const isFocused = ref(false)
const searchResults = ref<(CoreUnifiedSearchResultEntry &
{
@ -79,7 +80,7 @@ const token = computed(() => store.getters.getToken())
const participantsInitialised = computed(() => store.getters.participantsInitialised(token.value))
const participants = computed<UserFilterObject>(() => {
return store.getters.participantsList(token.value)
.filter(({ actorType }) => actorType === ATTENDEE.ACTOR_TYPE.USERS) // FIXME: federated users are not supported by the search provider
.filter(({ actorType }: Participant) => actorType === ATTENDEE.ACTOR_TYPE.USERS) // FIXME: federated users are not supported by the search provider
.map(({ actorId, displayName, actorType }: { actorId: string; displayName: string; actorType: string}) => ({
id: actorId,
displayName,
@ -162,7 +163,7 @@ type SearchMessageCancelableRequest = {
* @param [isNew=true] Is it a new search (search parameters changed)?
* Fetch the search results from the server
*/
async function fetchSearchResults(isNew = true) {
async function fetchSearchResults(isNew = true): Promise<void> {
const term = searchText.value.trim()
// Don't search if the search text is empty
if (term.length === 0) {
@ -191,8 +192,9 @@ async function fetchSearchResults(isNew = true) {
const response = await request({
term,
person: fromUser.value?.id,
since: !isNaN(sinceDate.value) ? sinceDate.value?.toISOString() : null,
until: !isNaN(untilDate.value) ? untilDate.value?.toISOString() : null,
// FIXME: this might be invalid date. Remove after vue-lib bump: https://github.com/nextcloud-libraries/nextcloud-vue/pull/6387
since: sinceDate.value?.toISOString(),
until: untilDate.value?.toISOString(),
limit: searchLimit.value,
cursor: searchCursor.value || null,
from: `/call/${token.value}`,

2
src/components/RightSidebar/SharedItems/SharedItems.vue

@ -51,7 +51,7 @@ import FilePreview from '../../MessagesList/MessagesGroup/Message/MessagePart/Fi
import Location from '../../MessagesList/MessagesGroup/Message/MessagePart/Location.vue'
import Poll from '../../MessagesList/MessagesGroup/Message/MessagePart/Poll.vue'
import { SHARED_ITEM } from '../../../constants.js'
import { SHARED_ITEM } from '../../../constants.ts'
export default {
name: 'SharedItems',

4
src/components/RightSidebar/SharedItems/SharedItemsTab.vue

@ -97,11 +97,11 @@ import {
sharedItemsWithPreviewLimit,
sharedItemTitle,
} from './sharedItemsConstants.js'
import { CONVERSATION } from '../../../constants.js'
import { CONVERSATION } from '../../../constants.ts'
import { hasTalkFeature } from '../../../services/CapabilitiesManager.ts'
import { EventBus } from '../../../services/EventBus.ts'
import { useSharedItemsStore } from '../../../stores/sharedItems.js'
import { useSidebarStore } from '../../../stores/sidebar.js'
import { useSidebarStore } from '../../../stores/sidebar.ts'
export default {

2
src/components/RightSidebar/SharedItems/sharedItemsConstants.js

@ -4,7 +4,7 @@
*/
import { t } from '@nextcloud/l10n'
import { SHARED_ITEM } from '../../../constants.js'
import { SHARED_ITEM } from '../../../constants.ts'
export const sharedItemsOrder = [SHARED_ITEM.TYPES.MEDIA,
SHARED_ITEM.TYPES.FILE,

2
src/components/RightSidebar/SipSettings.vue

@ -18,7 +18,7 @@ const props = defineProps<{
const dialInInfo = ref(t('spreed', 'Loading …'))
const meetingId = computed(() => readableNumber(props.conversation.token))
const attendeePin = computed(() => readableNumber(props.conversation.attendeePin))
const attendeePin = computed(() => readableNumber(props.conversation.attendeePin!))
onMounted(() => {
EventBus.on('signaling-settings-updated', setDialInInfoFromSettings)

2
src/components/RoomSelector.spec.js

@ -14,7 +14,7 @@ import NcDialog from '@nextcloud/vue/dist/Components/NcDialog.js'
import ConversationSearchResult from './LeftSidebar/ConversationsList/ConversationSearchResult.vue'
import RoomSelector from './RoomSelector.vue'
import { CONVERSATION } from '../constants.js'
import { CONVERSATION } from '../constants.ts'
import { generateOCSResponse } from '../test-helpers.js'
jest.mock('@nextcloud/axios', () => ({

2
src/components/RoomSelector.vue

@ -60,7 +60,7 @@ import NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'
import ConversationsSearchListVirtual from './LeftSidebar/ConversationsList/ConversationsSearchListVirtual.vue'
import { CONVERSATION } from '../constants.js'
import { CONVERSATION } from '../constants.ts'
import { hasTalkFeature } from '../services/CapabilitiesManager.ts'
import { searchListedConversations, fetchConversations } from '../services/conversationsService.js'

2
src/components/SelectPhoneNumber.vue

@ -32,7 +32,7 @@ import NcListItem from '@nextcloud/vue/dist/Components/NcListItem.js'
import Hint from './UIShared/Hint.vue'
import { ATTENDEE, AVATAR } from '../constants.js'
import { ATTENDEE, AVATAR } from '../constants.ts'
export default {
name: 'SelectPhoneNumber',

2
src/components/SettingsDialog/MediaDevicesPreview.vue

@ -87,7 +87,7 @@ import MediaDevicesSelector from '../MediaSettings/MediaDevicesSelector.vue'
import VolumeIndicator from '../UIShared/VolumeIndicator.vue'
import { useDevices } from '../../composables/useDevices.js'
import { VIRTUAL_BACKGROUND } from '../../constants.js'
import { VIRTUAL_BACKGROUND } from '../../constants.ts'
import { getTalkConfig } from '../../services/CapabilitiesManager.ts'
import { useSettingsStore } from '../../stores/settings.js'

2
src/components/SettingsDialog/SettingsDialog.vue

@ -231,7 +231,7 @@ import NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadi
import MediaDevicesPreview from './MediaDevicesPreview.vue'
import { CONVERSATION, PRIVACY } from '../../constants.js'
import { CONVERSATION, PRIVACY } from '../../constants.ts'
import BrowserStorage from '../../services/BrowserStorage.js'
import { getTalkConfig } from '../../services/CapabilitiesManager.ts'
import { useCustomSettings } from '../../services/SettingsAPI.ts'

2
src/components/TopBar/CallButton.vue

@ -105,7 +105,7 @@ import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
import { useIsMobile } from '@nextcloud/vue/dist/Composables/useIsMobile.js'
import { useIsInCall } from '../../composables/useIsInCall.js'
import { ATTENDEE, CALL, CONVERSATION, PARTICIPANT } from '../../constants.js'
import { ATTENDEE, CALL, CONVERSATION, PARTICIPANT } from '../../constants.ts'
import { callSIPDialOut } from '../../services/callsService.js'
import { hasTalkFeature } from '../../services/CapabilitiesManager.ts'
import { EventBus } from '../../services/EventBus.ts'

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save