@sync-in/server 1.9.1 → 1.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -8
- package/package.json +7 -7
- package/server/applications/files/services/files-manager.service.js +2 -2
- package/server/applications/files/services/files-manager.service.js.map +1 -1
- package/server/applications/files/services/files-tasks-manager.service.js +1 -1
- package/server/applications/files/services/files-tasks-manager.service.js.map +1 -1
- package/server/applications/files/utils/send-file.js +18 -9
- package/server/applications/files/utils/send-file.js.map +1 -1
- package/server/applications/files/utils/url-file.js +6 -6
- package/server/applications/files/utils/url-file.js.map +1 -1
- package/server/applications/links/services/links-manager.service.js +1 -1
- package/server/applications/links/services/links-manager.service.js.map +1 -1
- package/server/applications/shares/interfaces/share-props.interface.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.js +6 -4
- package/server/applications/shares/services/shares-manager.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-manager.service.js +15 -12
- package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
- package/server/applications/users/services/admin-users-manager.service.js +4 -0
- package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
- package/server/applications/users/users.controller.js +4 -1
- package/server/applications/users/users.controller.js.map +1 -1
- package/static/assets/pdfjs/build/pdf.mjs +35 -20
- package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
- package/static/assets/pdfjs/build/pdf.sandbox.mjs +2 -2
- package/static/assets/pdfjs/build/pdf.worker.mjs +1488 -52
- package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
- package/static/assets/pdfjs/version +1 -1
- package/static/assets/pdfjs/web/locale/be/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/bg/viewer.ftl +4 -0
- package/static/assets/pdfjs/web/locale/bs/viewer.ftl +0 -15
- package/static/assets/pdfjs/web/locale/ca/viewer.ftl +0 -4
- package/static/assets/pdfjs/web/locale/cs/viewer.ftl +4 -14
- package/static/assets/pdfjs/web/locale/cy/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/da/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/de/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/el/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/en-CA/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/en-GB/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/eo/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/es-AR/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/es-CL/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/es-ES/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/es-MX/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/eu/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/fi/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/fr/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/fur/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/fy-NL/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/gn/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/he/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/hsb/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/hu/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/hy-AM/viewer.ftl +0 -15
- package/static/assets/pdfjs/web/locale/ia/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/id/viewer.ftl +0 -15
- package/static/assets/pdfjs/web/locale/is/viewer.ftl +0 -15
- package/static/assets/pdfjs/web/locale/it/viewer.ftl +2 -14
- package/static/assets/pdfjs/web/locale/ja/viewer.ftl +7 -2
- package/static/assets/pdfjs/web/locale/ka/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/kab/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/kk/viewer.ftl +3 -12
- package/static/assets/pdfjs/web/locale/ko/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/nb-NO/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/nl/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/nn-NO/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/pa-IN/viewer.ftl +4 -12
- package/static/assets/pdfjs/web/locale/pl/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/pt-BR/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/rm/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/ro/viewer.ftl +2 -14
- package/static/assets/pdfjs/web/locale/ru/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/sc/viewer.ftl +0 -1
- package/static/assets/pdfjs/web/locale/sk/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/sl/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/sq/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/sv-SE/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/tg/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/th/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/tr/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/vi/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/locale/zh-CN/viewer.ftl +2 -12
- package/static/assets/pdfjs/web/locale/zh-TW/viewer.ftl +0 -12
- package/static/assets/pdfjs/web/viewer.css +53 -41
- package/static/assets/pdfjs/web/viewer.html +493 -132
- package/static/assets/pdfjs/web/viewer.mjs +225 -150
- package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
- package/static/{chunk-LYZGJZNP.js → chunk-25PWAXTJ.js} +1 -1
- package/static/{chunk-HCSWO7BO.js → chunk-27XEAHMV.js} +1 -1
- package/static/{chunk-YMAN4LIU.js → chunk-2CAAJBRO.js} +1 -1
- package/static/{chunk-RK2ONYTL.js → chunk-2LHHXDD5.js} +1 -1
- package/static/{chunk-YCTCESL4.js → chunk-2XY4PMI5.js} +1 -1
- package/static/{chunk-ERDZ7IVF.js → chunk-33WFRCUP.js} +1 -1
- package/static/chunk-3LVFDMTN.js +1 -0
- package/static/{chunk-V6FA5QY4.js → chunk-4DF2SQD4.js} +1 -1
- package/static/{chunk-Q556XB3S.js → chunk-4EUHBTWV.js} +1 -1
- package/static/{chunk-AADK5D2H.js → chunk-4KXJ6C4N.js} +1 -1
- package/static/{chunk-BHZEPHRI.js → chunk-4OV3SAUS.js} +1 -1
- package/static/{chunk-5S6KPQRA.js → chunk-5HCVWZMA.js} +1 -1
- package/static/{chunk-ZCOWBVOT.js → chunk-5HYSNQR4.js} +1 -1
- package/static/{chunk-4PZPHJ7L.js → chunk-5NHB7SV3.js} +1 -1
- package/static/chunk-6VJI4X2A.js +1 -0
- package/static/{chunk-XCLK7NJL.js → chunk-7H5O4BLV.js} +1 -1
- package/static/{chunk-ACUF7IKP.js → chunk-7NI353LS.js} +1 -1
- package/static/{chunk-TGLJFALR.js → chunk-A6J6SOM6.js} +1 -1
- package/static/{chunk-XOF4UW3S.js → chunk-A7DSX7VP.js} +1 -1
- package/static/chunk-A7R246NW.js +1 -0
- package/static/{chunk-EL6QL4TP.js → chunk-ASBPYTLT.js} +1 -1
- package/static/chunk-BJARRIS6.js +562 -0
- package/static/{chunk-VQJYCYWI.js → chunk-CAZSNVMS.js} +1 -1
- package/static/{chunk-EIYRBM4J.js → chunk-CURVLK7L.js} +1 -1
- package/static/{chunk-5E3TYOL3.js → chunk-DDRGLHOP.js} +1 -1
- package/static/{chunk-ZXXHFBGL.js → chunk-FLPZB3OX.js} +1 -1
- package/static/{chunk-23UUFZSR.js → chunk-FRBTL2ER.js} +1 -1
- package/static/{chunk-JY2I3HGL.js → chunk-FXM7XXWA.js} +1 -1
- package/static/{chunk-7CKHC72R.js → chunk-GDPJRUVU.js} +1 -1
- package/static/{chunk-QMHUIHSR.js → chunk-GENTF6JM.js} +1 -1
- package/static/{chunk-VK7XMFVE.js → chunk-H4RLHI3Y.js} +1 -1
- package/static/{chunk-3WLBVJ2S.js → chunk-HE6EDXWI.js} +1 -1
- package/static/{chunk-U4RW6XG5.js → chunk-IUJ4IK26.js} +1 -1
- package/static/{chunk-XQGPSNQB.js → chunk-JEVBUJQ4.js} +1 -1
- package/static/{chunk-K657XPXA.js → chunk-K3MOXDU5.js} +1 -1
- package/static/{chunk-6B3GGAV3.js → chunk-KBWK65KM.js} +1 -1
- package/static/{chunk-I2S3XPC5.js → chunk-L3PDWJZ3.js} +2 -2
- package/static/{chunk-KDEEERWZ.js → chunk-LBXOAKBD.js} +1 -1
- package/static/{chunk-Y5RLD72B.js → chunk-LFAQLJZK.js} +1 -1
- package/static/{chunk-M4XL3JN5.js → chunk-MBFMTBVJ.js} +1 -1
- package/static/{chunk-HMOB6XC5.js → chunk-MZBO5PAR.js} +1 -1
- package/static/{chunk-DJDRX53V.js → chunk-NFIES7BC.js} +1 -1
- package/static/{chunk-3YDYZLF7.js → chunk-NK2NMAJI.js} +1 -1
- package/static/{chunk-FNOTGWRW.js → chunk-O7UXVNR2.js} +1 -1
- package/static/{chunk-RDNTK4YH.js → chunk-PKU4IIIR.js} +1 -1
- package/static/{chunk-NN4ONTOT.js → chunk-QUSS6SUC.js} +1 -1
- package/static/{chunk-BU4ZICZR.js → chunk-R6VB3INJ.js} +1 -1
- package/static/{chunk-2TB2INBF.js → chunk-RJOHDAPM.js} +1 -1
- package/static/{chunk-BODMMLVB.js → chunk-S6YKBWJE.js} +1 -1
- package/static/{chunk-AZ5TF5Y3.js → chunk-SDR3UG2F.js} +1 -1
- package/static/{chunk-C3AAEQKW.js → chunk-TGHBDJZA.js} +1 -1
- package/static/{chunk-HNMGPG72.js → chunk-TVJQXN73.js} +1 -1
- package/static/{chunk-6NEBGCAZ.js → chunk-U75PLYIJ.js} +1 -1
- package/static/chunk-UUX3M6DC.js +1 -0
- package/static/{chunk-JWPXQOS3.js → chunk-VJ2HWQRJ.js} +2 -2
- package/static/{chunk-S2VBGI6Q.js → chunk-VO4WVT6K.js} +1 -1
- package/static/{chunk-5XUIPWOH.js → chunk-W72JYHOH.js} +1 -1
- package/static/{chunk-PXRT4L57.js → chunk-WJYVS27M.js} +1 -1
- package/static/{chunk-HKRGIRKB.js → chunk-XAIOGRBO.js} +1 -1
- package/static/{chunk-NKGKBQBX.js → chunk-XHQEF2IX.js} +1 -1
- package/static/{chunk-DQ3GEMPM.js → chunk-XXYMVRSH.js} +1 -1
- package/static/{chunk-HHWXIK2M.js → chunk-YTBSB2GE.js} +1 -1
- package/static/{chunk-GRLHFXGB.js → chunk-YXWF2DGF.js} +1 -1
- package/static/{chunk-JMYAD7E2.js → chunk-Z6RJZIDG.js} +1 -1
- package/static/{chunk-GNZPP2VO.js → chunk-ZC5ZDCDC.js} +1 -1
- package/static/{chunk-EDJAISWO.js → chunk-ZERBTNFW.js} +8 -8
- package/static/{chunk-MIA5YBOI.js → chunk-ZPI7RQ2S.js} +1 -1
- package/static/{chunk-NOPACN4F.js → chunk-ZRBLCAOK.js} +1 -1
- package/static/index.html +2 -2
- package/static/{main-56PZQ6TJ.js → main-FE6GWZXU.js} +4 -4
- package/static/{styles-Q4OZOSSK.css → styles-S5HVK4H5.css} +1 -1
- package/static/chunk-H6WOTGQ5.js +0 -1
- package/static/chunk-HC7F57NA.js +0 -1
- package/static/chunk-IOIBQGHN.js +0 -562
- package/static/chunk-J6YSFHLZ.js +0 -1
- package/static/chunk-QVFPHTOH.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../backend/src/applications/users/users.controller.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Body, Controller, Delete, Get, Header, Param, ParseIntPipe, Patch, Post, Put, Req, Search, StreamableFile, UseGuards } from '@nestjs/common'\nimport { createReadStream } from 'fs'\nimport { LoginResponseDto } from '../../authentication/dto/login-response.dto'\nimport { AuthTwoFaGuardWithoutPassword } from '../../authentication/guards/auth-two-fa-guard'\nimport { FastifyAuthenticatedRequest } from '../../authentication/interfaces/auth-request.interface'\nimport { USERS_ROUTE } from './constants/routes'\nimport { USER_PERMISSION, USER_ROLE } from './constants/user'\nimport { UserHavePermission } from './decorators/permissions.decorator'\nimport { UserHaveRole } from './decorators/roles.decorator'\nimport { GetUser } from './decorators/user.decorator'\nimport { UserCreateOrUpdateGroupDto } from './dto/create-or-update-group.dto'\nimport { CreateUserDto, UpdateUserDto, UpdateUserFromGroupDto } from './dto/create-or-update-user.dto'\nimport { SearchMembersDto } from './dto/search-members.dto'\nimport { UserAppPasswordDto, UserLanguageDto, UserNotificationDto, UserStorageIndexingDto, UserUpdatePasswordDto } from './dto/user-properties.dto'\nimport { UserPermissionsGuard } from './guards/permissions.guard'\nimport { UserRolesGuard } from './guards/roles.guard'\nimport { GroupBrowse } from './interfaces/group-browse.interface'\nimport { GroupMember } from './interfaces/group-member'\nimport { GuestUser } from './interfaces/guest-user.interface'\nimport { Member } from './interfaces/member.interface'\nimport { UserAppPassword } from './interfaces/user-secrets.interface'\nimport { UserModel } from './models/user.model'\nimport { UsersManager } from './services/users-manager.service'\n\n@Controller(USERS_ROUTE.BASE)\n@UseGuards(UserRolesGuard)\n@UserHaveRole(USER_ROLE.USER)\nexport class UsersController {\n constructor(private readonly usersManager: UsersManager) {}\n\n @Get(USERS_ROUTE.ME)\n @UserHaveRole(USER_ROLE.LINK)\n me(@GetUser() user: UserModel): Promise<Omit<LoginResponseDto, 'token'>> {\n return this.usersManager.me(user)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}`)\n @UserHaveRole(USER_ROLE.USER)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n listAppPasswords(@GetUser() user: UserModel): Promise<Omit<UserAppPassword, 'password'>[]> {\n return this.usersManager.listAppPasswords(user)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}`)\n @UserHaveRole(USER_ROLE.USER)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n generateAppPassword(@GetUser() user: UserModel, @Body() userAppPasswordDto: UserAppPasswordDto): Promise<UserAppPassword> {\n return this.usersManager.generateAppPassword(user, userAppPasswordDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}/:name`)\n @UserHaveRole(USER_ROLE.USER)\n deleteAppPassword(@GetUser() user: UserModel, @Param('name') name: string): Promise<void> {\n return this.usersManager.deleteAppPassword(user, name)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.LANGUAGE}`)\n @UserHaveRole(USER_ROLE.GUEST)\n updateLanguage(@GetUser() user: UserModel, @Body() userLanguageDto: UserLanguageDto) {\n return this.usersManager.updateLanguage(user, userLanguageDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.PASSWORD}`)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n updatePassword(@GetUser() user: UserModel, @Body() userPasswordDto: UserUpdatePasswordDto) {\n return this.usersManager.updatePassword(user, userPasswordDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.NOTIFICATION}`)\n @UserHaveRole(USER_ROLE.GUEST)\n updateNotification(@GetUser() user: UserModel, @Body() userNotificationDto: UserNotificationDto) {\n return this.usersManager.updateNotification(user, userNotificationDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.STORAGE_INDEXING}`)\n @UserHaveRole(USER_ROLE.USER)\n updateStorageIndexing(@GetUser() user: UserModel, @Body() userStorageIndexingDto: UserStorageIndexingDto) {\n return this.usersManager.updateStorageIndexing(user, userStorageIndexingDto)\n }\n\n @Get(`${USERS_ROUTE.AVATAR}/:login`)\n @UserHaveRole(USER_ROLE.LINK)\n @Header('cache-control', 'public,max-age=86400')\n async avatar(@GetUser() user: UserModel, @Param('login') login: 'me' | string): Promise<StreamableFile> {\n const isMe: boolean = login === 'me'\n const [path, mime] = await this.usersManager.getAvatar(isMe ? user.login : login, false, isMe && user.role <= USER_ROLE.USER)\n return new StreamableFile(createReadStream(path), { type: mime })\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.AVATAR}`)\n updateAvatar(@Req() req: FastifyAuthenticatedRequest) {\n return this.usersManager.updateAvatar(req)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.AVATAR}`)\n genAvatar(@GetUser() user: UserModel) {\n return this.usersManager.getAvatar(user.login, true)\n }\n\n @Search()\n searchMembers(@GetUser() user: UserModel, @Body() searchMembersDto: SearchMembersDto): Promise<Member[]> {\n return this.usersManager.searchMembers(user, searchMembersDto)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/${USERS_ROUTE.BROWSE}/:name?`)\n browseGroups(@GetUser() user: UserModel, @Param('name') name?: string): Promise<GroupBrowse> {\n return this.usersManager.browseGroups(user, name)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}`)\n @UserHavePermission(USER_PERMISSION.PERSONAL_GROUPS_ADMIN)\n @UseGuards(UserPermissionsGuard)\n createPersonalGroup(@GetUser() user: UserModel, @Body() userCreateOrUpdateGroupDto: UserCreateOrUpdateGroupDto): Promise<GroupMember> {\n return this.usersManager.createPersonalGroup(user, userCreateOrUpdateGroupDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:id`)\n updatePersonalGroup(\n @GetUser() user: UserModel,\n @Param('id', ParseIntPipe) groupId: number,\n @Body() userCreateOrUpdateGroupDto: UserCreateOrUpdateGroupDto\n ): Promise<GroupMember> {\n return this.usersManager.updatePersonalGroup(user, groupId, userCreateOrUpdateGroupDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:id`)\n deletePersonalGroup(@GetUser() user: UserModel, @Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.usersManager.deletePersonalGroup(user, groupId)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/${USERS_ROUTE.GROUPS_LEAVE}/:id`)\n leavePersonalGroup(@GetUser() user: UserModel, @Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.usersManager.leavePersonalGroup(user, groupId)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}`)\n addUsersToGroup(@GetUser() user: UserModel, @Param('groupId', ParseIntPipe) groupId: number, @Body() userIds: number[]): Promise<void> {\n return this.usersManager.addUsersToGroup(user, groupId, userIds)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}/:userId`)\n removeUserFromGroup(\n @GetUser() user: UserModel,\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number\n ): Promise<void> {\n return this.usersManager.removeUserFromGroup(user, groupId, userId)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}/:userId`)\n updateUserFromPersonalGroup(\n @GetUser() user: UserModel,\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number,\n @Body() updateUserFromGroupDto: UpdateUserFromGroupDto\n ): Promise<void> {\n return this.usersManager.updateUserFromPersonalGroup(user, groupId, userId, updateUserFromGroupDto)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}`)\n listGuests(@GetUser() user: UserModel): Promise<GuestUser[]> {\n return this.usersManager.listGuests(user)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n getGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number): Promise<GuestUser> {\n return this.usersManager.getGuest(user, guestId)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}`)\n @UserHavePermission(USER_PERMISSION.GUESTS_ADMIN)\n @UseGuards(UserPermissionsGuard)\n createGuest(@GetUser() user: UserModel, @Body() createGuestDto: CreateUserDto): Promise<GuestUser> {\n return this.usersManager.createGuest(user, createGuestDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n updateGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number, @Body() updateGuestDto: UpdateUserDto): Promise<GuestUser> {\n return this.usersManager.updateGuest(user, guestId, updateGuestDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n deleteGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number): Promise<void> {\n return this.usersManager.deleteGuest(user, guestId)\n }\n}\n"],"names":["UsersController","me","user","usersManager","listAppPasswords","generateAppPassword","userAppPasswordDto","deleteAppPassword","name","updateLanguage","userLanguageDto","updatePassword","userPasswordDto","updateNotification","userNotificationDto","updateStorageIndexing","userStorageIndexingDto","avatar","login","isMe","path","mime","getAvatar","role","USER_ROLE","USER","StreamableFile","createReadStream","type","updateAvatar","req","genAvatar","searchMembers","searchMembersDto","browseGroups","createPersonalGroup","userCreateOrUpdateGroupDto","updatePersonalGroup","groupId","deletePersonalGroup","leavePersonalGroup","addUsersToGroup","userIds","removeUserFromGroup","userId","updateUserFromPersonalGroup","updateUserFromGroupDto","listGuests","getGuest","guestId","createGuest","createGuestDto","updateGuest","updateGuestDto","deleteGuest","ME","LINK","USERS_ROUTE","APP_PASSWORDS","LANGUAGE","GUEST","PASSWORD","NOTIFICATION","STORAGE_INDEXING","AVATAR","GROUPS","BROWSE","PERSONAL_GROUPS_ADMIN","GROUPS_LEAVE","USERS","GUESTS","GUESTS_ADMIN","BASE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../backend/src/applications/users/users.controller.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Body, Controller, Delete, Get, Header, Param, ParseIntPipe, Patch, Post, Put, Req, Search, StreamableFile, UseGuards } from '@nestjs/common'\nimport { createReadStream } from 'fs'\nimport { LoginResponseDto } from '../../authentication/dto/login-response.dto'\nimport { AuthTwoFaGuardWithoutPassword } from '../../authentication/guards/auth-two-fa-guard'\nimport { FastifyAuthenticatedRequest } from '../../authentication/interfaces/auth-request.interface'\nimport { makeContentDispositionAttachment } from '../files/utils/send-file'\nimport { USERS_ROUTE } from './constants/routes'\nimport { USER_PERMISSION, USER_ROLE } from './constants/user'\nimport { UserHavePermission } from './decorators/permissions.decorator'\nimport { UserHaveRole } from './decorators/roles.decorator'\nimport { GetUser } from './decorators/user.decorator'\nimport { UserCreateOrUpdateGroupDto } from './dto/create-or-update-group.dto'\nimport { CreateUserDto, UpdateUserDto, UpdateUserFromGroupDto } from './dto/create-or-update-user.dto'\nimport { SearchMembersDto } from './dto/search-members.dto'\nimport { UserAppPasswordDto, UserLanguageDto, UserNotificationDto, UserStorageIndexingDto, UserUpdatePasswordDto } from './dto/user-properties.dto'\nimport { UserPermissionsGuard } from './guards/permissions.guard'\nimport { UserRolesGuard } from './guards/roles.guard'\nimport { GroupBrowse } from './interfaces/group-browse.interface'\nimport { GroupMember } from './interfaces/group-member'\nimport { GuestUser } from './interfaces/guest-user.interface'\nimport { Member } from './interfaces/member.interface'\nimport { UserAppPassword } from './interfaces/user-secrets.interface'\nimport { UserModel } from './models/user.model'\nimport { UsersManager } from './services/users-manager.service'\nimport { USER_AVATAR_FILE_NAME } from './utils/avatar'\n\n@Controller(USERS_ROUTE.BASE)\n@UseGuards(UserRolesGuard)\n@UserHaveRole(USER_ROLE.USER)\nexport class UsersController {\n constructor(private readonly usersManager: UsersManager) {}\n\n @Get(USERS_ROUTE.ME)\n @UserHaveRole(USER_ROLE.LINK)\n me(@GetUser() user: UserModel): Promise<Omit<LoginResponseDto, 'token'>> {\n return this.usersManager.me(user)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}`)\n @UserHaveRole(USER_ROLE.USER)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n listAppPasswords(@GetUser() user: UserModel): Promise<Omit<UserAppPassword, 'password'>[]> {\n return this.usersManager.listAppPasswords(user)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}`)\n @UserHaveRole(USER_ROLE.USER)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n generateAppPassword(@GetUser() user: UserModel, @Body() userAppPasswordDto: UserAppPasswordDto): Promise<UserAppPassword> {\n return this.usersManager.generateAppPassword(user, userAppPasswordDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}/:name`)\n @UserHaveRole(USER_ROLE.USER)\n deleteAppPassword(@GetUser() user: UserModel, @Param('name') name: string): Promise<void> {\n return this.usersManager.deleteAppPassword(user, name)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.LANGUAGE}`)\n @UserHaveRole(USER_ROLE.GUEST)\n updateLanguage(@GetUser() user: UserModel, @Body() userLanguageDto: UserLanguageDto) {\n return this.usersManager.updateLanguage(user, userLanguageDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.PASSWORD}`)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n updatePassword(@GetUser() user: UserModel, @Body() userPasswordDto: UserUpdatePasswordDto) {\n return this.usersManager.updatePassword(user, userPasswordDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.NOTIFICATION}`)\n @UserHaveRole(USER_ROLE.GUEST)\n updateNotification(@GetUser() user: UserModel, @Body() userNotificationDto: UserNotificationDto) {\n return this.usersManager.updateNotification(user, userNotificationDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.STORAGE_INDEXING}`)\n @UserHaveRole(USER_ROLE.USER)\n updateStorageIndexing(@GetUser() user: UserModel, @Body() userStorageIndexingDto: UserStorageIndexingDto) {\n return this.usersManager.updateStorageIndexing(user, userStorageIndexingDto)\n }\n\n @Get(`${USERS_ROUTE.AVATAR}/:login`)\n @UserHaveRole(USER_ROLE.LINK)\n @Header('cache-control', 'public,max-age=86400')\n async avatar(@GetUser() user: UserModel, @Param('login') login: 'me' | string): Promise<StreamableFile> {\n const isMe: boolean = login === 'me'\n const [path, mime] = await this.usersManager.getAvatar(isMe ? user.login : login, false, isMe && user.role <= USER_ROLE.USER)\n return new StreamableFile(createReadStream(path), { type: mime, disposition: makeContentDispositionAttachment(USER_AVATAR_FILE_NAME) })\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.AVATAR}`)\n updateAvatar(@Req() req: FastifyAuthenticatedRequest) {\n return this.usersManager.updateAvatar(req)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.AVATAR}`)\n genAvatar(@GetUser() user: UserModel) {\n return this.usersManager.getAvatar(user.login, true)\n }\n\n @Search()\n searchMembers(@GetUser() user: UserModel, @Body() searchMembersDto: SearchMembersDto): Promise<Member[]> {\n return this.usersManager.searchMembers(user, searchMembersDto)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/${USERS_ROUTE.BROWSE}/:name?`)\n browseGroups(@GetUser() user: UserModel, @Param('name') name?: string): Promise<GroupBrowse> {\n return this.usersManager.browseGroups(user, name)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}`)\n @UserHavePermission(USER_PERMISSION.PERSONAL_GROUPS_ADMIN)\n @UseGuards(UserPermissionsGuard)\n createPersonalGroup(@GetUser() user: UserModel, @Body() userCreateOrUpdateGroupDto: UserCreateOrUpdateGroupDto): Promise<GroupMember> {\n return this.usersManager.createPersonalGroup(user, userCreateOrUpdateGroupDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:id`)\n updatePersonalGroup(\n @GetUser() user: UserModel,\n @Param('id', ParseIntPipe) groupId: number,\n @Body() userCreateOrUpdateGroupDto: UserCreateOrUpdateGroupDto\n ): Promise<GroupMember> {\n return this.usersManager.updatePersonalGroup(user, groupId, userCreateOrUpdateGroupDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:id`)\n deletePersonalGroup(@GetUser() user: UserModel, @Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.usersManager.deletePersonalGroup(user, groupId)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/${USERS_ROUTE.GROUPS_LEAVE}/:id`)\n leavePersonalGroup(@GetUser() user: UserModel, @Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.usersManager.leavePersonalGroup(user, groupId)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}`)\n addUsersToGroup(@GetUser() user: UserModel, @Param('groupId', ParseIntPipe) groupId: number, @Body() userIds: number[]): Promise<void> {\n return this.usersManager.addUsersToGroup(user, groupId, userIds)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}/:userId`)\n removeUserFromGroup(\n @GetUser() user: UserModel,\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number\n ): Promise<void> {\n return this.usersManager.removeUserFromGroup(user, groupId, userId)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}/:userId`)\n updateUserFromPersonalGroup(\n @GetUser() user: UserModel,\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number,\n @Body() updateUserFromGroupDto: UpdateUserFromGroupDto\n ): Promise<void> {\n return this.usersManager.updateUserFromPersonalGroup(user, groupId, userId, updateUserFromGroupDto)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}`)\n listGuests(@GetUser() user: UserModel): Promise<GuestUser[]> {\n return this.usersManager.listGuests(user)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n getGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number): Promise<GuestUser> {\n return this.usersManager.getGuest(user, guestId)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}`)\n @UserHavePermission(USER_PERMISSION.GUESTS_ADMIN)\n @UseGuards(UserPermissionsGuard)\n createGuest(@GetUser() user: UserModel, @Body() createGuestDto: CreateUserDto): Promise<GuestUser> {\n return this.usersManager.createGuest(user, createGuestDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n updateGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number, @Body() updateGuestDto: UpdateUserDto): Promise<GuestUser> {\n return this.usersManager.updateGuest(user, guestId, updateGuestDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n deleteGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number): Promise<void> {\n return this.usersManager.deleteGuest(user, guestId)\n }\n}\n"],"names":["UsersController","me","user","usersManager","listAppPasswords","generateAppPassword","userAppPasswordDto","deleteAppPassword","name","updateLanguage","userLanguageDto","updatePassword","userPasswordDto","updateNotification","userNotificationDto","updateStorageIndexing","userStorageIndexingDto","avatar","login","isMe","path","mime","getAvatar","role","USER_ROLE","USER","StreamableFile","createReadStream","type","disposition","makeContentDispositionAttachment","USER_AVATAR_FILE_NAME","updateAvatar","req","genAvatar","searchMembers","searchMembersDto","browseGroups","createPersonalGroup","userCreateOrUpdateGroupDto","updatePersonalGroup","groupId","deletePersonalGroup","leavePersonalGroup","addUsersToGroup","userIds","removeUserFromGroup","userId","updateUserFromPersonalGroup","updateUserFromGroupDto","listGuests","getGuest","guestId","createGuest","createGuestDto","updateGuest","updateGuestDto","deleteGuest","ME","LINK","USERS_ROUTE","APP_PASSWORDS","LANGUAGE","GUEST","PASSWORD","NOTIFICATION","STORAGE_INDEXING","AVATAR","GROUPS","BROWSE","PERSONAL_GROUPS_ADMIN","GROUPS_LEAVE","USERS","GUESTS","GUESTS_ADMIN","BASE"],"mappings":"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"}
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
* pdfjsVersion = 5.4.
|
|
25
|
-
* pdfjsBuild =
|
|
24
|
+
* pdfjsVersion = 5.4.449
|
|
25
|
+
* pdfjsBuild = f44e5f0e6
|
|
26
26
|
*/
|
|
27
27
|
/******/ // The require scope
|
|
28
28
|
/******/ var __webpack_require__ = {};
|
|
@@ -1847,7 +1847,7 @@ function renderRichText({
|
|
|
1847
1847
|
intent: "richText"
|
|
1848
1848
|
});
|
|
1849
1849
|
}
|
|
1850
|
-
fragment.
|
|
1850
|
+
fragment.firstElementChild.classList.add("richText", className);
|
|
1851
1851
|
container.append(fragment);
|
|
1852
1852
|
}
|
|
1853
1853
|
function makePathFromDrawOPS(data) {
|
|
@@ -6323,11 +6323,11 @@ class AnnotationEditor {
|
|
|
6323
6323
|
if (nextFirstPosition !== firstPosition) {
|
|
6324
6324
|
if (nextFirstPosition < firstPosition) {
|
|
6325
6325
|
for (let i = 0; i < firstPosition - nextFirstPosition; i++) {
|
|
6326
|
-
this.#resizersDiv.append(this.#resizersDiv.
|
|
6326
|
+
this.#resizersDiv.append(this.#resizersDiv.firstElementChild);
|
|
6327
6327
|
}
|
|
6328
6328
|
} else if (nextFirstPosition > firstPosition) {
|
|
6329
6329
|
for (let i = 0; i < nextFirstPosition - firstPosition; i++) {
|
|
6330
|
-
this.#resizersDiv.
|
|
6330
|
+
this.#resizersDiv.firstElementChild.before(this.#resizersDiv.lastElementChild);
|
|
6331
6331
|
}
|
|
6332
6332
|
}
|
|
6333
6333
|
let i = 0;
|
|
@@ -6339,7 +6339,7 @@ class AnnotationEditor {
|
|
|
6339
6339
|
}
|
|
6340
6340
|
this.#setResizerTabIndex(0);
|
|
6341
6341
|
this.#isResizerEnabledForKeyboard = true;
|
|
6342
|
-
this.#resizersDiv.
|
|
6342
|
+
this.#resizersDiv.firstElementChild.focus({
|
|
6343
6343
|
focusVisible: true
|
|
6344
6344
|
});
|
|
6345
6345
|
event.preventDefault();
|
|
@@ -6570,10 +6570,10 @@ class AnnotationEditor {
|
|
|
6570
6570
|
}
|
|
6571
6571
|
resetAnnotationElement(annotation) {
|
|
6572
6572
|
const {
|
|
6573
|
-
|
|
6573
|
+
firstElementChild
|
|
6574
6574
|
} = annotation.container;
|
|
6575
|
-
if (
|
|
6576
|
-
|
|
6575
|
+
if (firstElementChild?.nodeName === "DIV" && firstElementChild.classList.contains("annotationContent")) {
|
|
6576
|
+
firstElementChild.remove();
|
|
6577
6577
|
}
|
|
6578
6578
|
}
|
|
6579
6579
|
}
|
|
@@ -7217,6 +7217,9 @@ class FontFaceObject {
|
|
|
7217
7217
|
get disableFontFace() {
|
|
7218
7218
|
return this.#fontData.disableFontFace ?? false;
|
|
7219
7219
|
}
|
|
7220
|
+
set disableFontFace(value) {
|
|
7221
|
+
shadow(this, "disableFontFace", !!value);
|
|
7222
|
+
}
|
|
7220
7223
|
get fontExtraProperties() {
|
|
7221
7224
|
return this.#fontData.fontExtraProperties ?? false;
|
|
7222
7225
|
}
|
|
@@ -7250,6 +7253,9 @@ class FontFaceObject {
|
|
|
7250
7253
|
get bbox() {
|
|
7251
7254
|
return this.#fontData.bbox;
|
|
7252
7255
|
}
|
|
7256
|
+
set bbox(bbox) {
|
|
7257
|
+
shadow(this, "bbox", bbox);
|
|
7258
|
+
}
|
|
7253
7259
|
get fontMatrix() {
|
|
7254
7260
|
return this.#fontData.fontMatrix;
|
|
7255
7261
|
}
|
|
@@ -14408,7 +14414,7 @@ function getDocument(src = {}) {
|
|
|
14408
14414
|
}
|
|
14409
14415
|
const docParams = {
|
|
14410
14416
|
docId,
|
|
14411
|
-
apiVersion: "5.4.
|
|
14417
|
+
apiVersion: "5.4.449",
|
|
14412
14418
|
data,
|
|
14413
14419
|
password,
|
|
14414
14420
|
disableAutoFetch,
|
|
@@ -14666,6 +14672,9 @@ class PDFDocumentProxy {
|
|
|
14666
14672
|
saveDocument() {
|
|
14667
14673
|
return this._transport.saveDocument();
|
|
14668
14674
|
}
|
|
14675
|
+
extractPages(pageInfos) {
|
|
14676
|
+
return this._transport.extractPages(pageInfos);
|
|
14677
|
+
}
|
|
14669
14678
|
getDownloadInfo() {
|
|
14670
14679
|
return this._transport.downloadInfoCapability.promise;
|
|
14671
14680
|
}
|
|
@@ -15734,6 +15743,11 @@ class WorkerTransport {
|
|
|
15734
15743
|
this.annotationStorage.resetModified();
|
|
15735
15744
|
});
|
|
15736
15745
|
}
|
|
15746
|
+
extractPages(pageInfos) {
|
|
15747
|
+
return this.messageHandler.sendWithPromise("ExtractPages", {
|
|
15748
|
+
pageInfos
|
|
15749
|
+
});
|
|
15750
|
+
}
|
|
15737
15751
|
getPage(pageNumber) {
|
|
15738
15752
|
if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {
|
|
15739
15753
|
return Promise.reject(new Error("Invalid page request."));
|
|
@@ -15850,7 +15864,8 @@ class WorkerTransport {
|
|
|
15850
15864
|
info: results[0],
|
|
15851
15865
|
metadata: results[1] ? new Metadata(results[1]) : null,
|
|
15852
15866
|
contentDispositionFilename: this._fullReader?.filename ?? null,
|
|
15853
|
-
contentLength: this._fullReader?.contentLength ?? null
|
|
15867
|
+
contentLength: this._fullReader?.contentLength ?? null,
|
|
15868
|
+
hasStructTree: results[2]
|
|
15854
15869
|
}));
|
|
15855
15870
|
this.#methodPromises.set(name, promise);
|
|
15856
15871
|
return promise;
|
|
@@ -16064,8 +16079,8 @@ class InternalRenderTask {
|
|
|
16064
16079
|
}
|
|
16065
16080
|
}
|
|
16066
16081
|
}
|
|
16067
|
-
const version = "5.4.
|
|
16068
|
-
const build = "
|
|
16082
|
+
const version = "5.4.449";
|
|
16083
|
+
const build = "f44e5f0e6";
|
|
16069
16084
|
|
|
16070
16085
|
;// ./src/display/editor/color_picker.js
|
|
16071
16086
|
|
|
@@ -16198,13 +16213,13 @@ class ColorPicker {
|
|
|
16198
16213
|
return;
|
|
16199
16214
|
}
|
|
16200
16215
|
if (event.target === this.#button) {
|
|
16201
|
-
this.#dropdown.
|
|
16216
|
+
this.#dropdown.firstElementChild?.focus();
|
|
16202
16217
|
return;
|
|
16203
16218
|
}
|
|
16204
16219
|
event.target.nextSibling?.focus();
|
|
16205
16220
|
}
|
|
16206
16221
|
_moveToPrevious(event) {
|
|
16207
|
-
if (event.target === this.#dropdown?.
|
|
16222
|
+
if (event.target === this.#dropdown?.firstElementChild || event.target === this.#button) {
|
|
16208
16223
|
if (this.#isDropdownVisible) {
|
|
16209
16224
|
this._hideDropdownFromKeyboard();
|
|
16210
16225
|
}
|
|
@@ -16220,14 +16235,14 @@ class ColorPicker {
|
|
|
16220
16235
|
this.#openDropdown(event);
|
|
16221
16236
|
return;
|
|
16222
16237
|
}
|
|
16223
|
-
this.#dropdown.
|
|
16238
|
+
this.#dropdown.firstElementChild?.focus();
|
|
16224
16239
|
}
|
|
16225
16240
|
_moveToEnd(event) {
|
|
16226
16241
|
if (!this.#isDropdownVisible) {
|
|
16227
16242
|
this.#openDropdown(event);
|
|
16228
16243
|
return;
|
|
16229
16244
|
}
|
|
16230
|
-
this.#dropdown.
|
|
16245
|
+
this.#dropdown.lastElementChild?.focus();
|
|
16231
16246
|
}
|
|
16232
16247
|
#keyDown(event) {
|
|
16233
16248
|
ColorPicker._keyboardManager.exec(this, event);
|
|
@@ -25663,7 +25678,7 @@ class AnnotationEditorLayer {
|
|
|
25663
25678
|
return;
|
|
25664
25679
|
}
|
|
25665
25680
|
if (editor.parent && editor.annotationElementId) {
|
|
25666
|
-
this.#uiManager.addDeletedAnnotationElement(editor
|
|
25681
|
+
this.#uiManager.addDeletedAnnotationElement(editor);
|
|
25667
25682
|
AnnotationEditor.deleteAnnotationElement(editor);
|
|
25668
25683
|
editor.annotationElementId = null;
|
|
25669
25684
|
}
|
|
@@ -26195,8 +26210,8 @@ class DrawLayer {
|
|
|
26195
26210
|
}
|
|
26196
26211
|
}
|
|
26197
26212
|
if (path) {
|
|
26198
|
-
const defs = element.
|
|
26199
|
-
const pathElement = defs.
|
|
26213
|
+
const defs = element.firstElementChild;
|
|
26214
|
+
const pathElement = defs.firstElementChild;
|
|
26200
26215
|
this.#updateProperties(pathElement, path);
|
|
26201
26216
|
}
|
|
26202
26217
|
}
|