├── profile.log
├── packages
└── .gitkeep
├── .husky
├── .gitignore
└── pre-commit
├── apps
├── portal
│ ├── public
│ │ ├── .gitkeep
│ │ ├── sign
│ │ │ ├── 1.png
│ │ │ ├── 22.png
│ │ │ └── setup_finished_screen_guide.png
│ │ ├── icons
│ │ │ ├── 128.png
│ │ │ ├── 16.png
│ │ │ └── 48.png
│ │ ├── edit
│ │ │ └── leak_bg-min.png
│ │ ├── fonts
│ │ │ ├── Roboto-Bold.ttf
│ │ │ ├── Roboto-Medium.ttf
│ │ │ └── Roboto-Regular.ttf
│ │ ├── preferences
│ │ │ └── preferences.png
│ │ ├── videos
│ │ │ ├── chapter-placeholder.jpg
│ │ │ └── play-button.svg
│ │ ├── contentImages
│ │ │ ├── permission-arrow.png
│ │ │ ├── play.svg
│ │ │ ├── recordingWindowIcons
│ │ │ │ ├── button-play-grey.svg
│ │ │ │ └── button-pause-grey.svg
│ │ │ └── pause-light.svg
│ │ ├── new-design-v2
│ │ │ ├── single-video-buttons
│ │ │ │ ├── like-thumb-filled.png
│ │ │ │ └── like-thumb.svg
│ │ │ ├── bookmark-solid.svg
│ │ │ └── comment-more-options
│ │ │ │ └── more-vertical.svg
│ │ ├── assets
│ │ │ └── svg
│ │ │ │ ├── tools-panel
│ │ │ │ ├── video-play-btn.svg
│ │ │ │ ├── play.svg
│ │ │ │ ├── triangle.svg
│ │ │ │ ├── line.svg
│ │ │ │ ├── blob.svg
│ │ │ │ ├── pause.svg
│ │ │ │ ├── rect.svg
│ │ │ │ ├── square2.svg
│ │ │ │ ├── stop.svg
│ │ │ │ ├── T(Fill).svg
│ │ │ │ ├── star.svg
│ │ │ │ ├── align-center.svg
│ │ │ │ ├── align-right.svg
│ │ │ │ ├── ZoomOut.svg
│ │ │ │ ├── arrow.svg
│ │ │ │ ├── blackTT.svg
│ │ │ │ ├── whiteTT.svg
│ │ │ │ ├── blackT_2.svg
│ │ │ │ ├── whiteT_2.svg
│ │ │ │ └── heart.svg
│ │ │ │ └── whiteboard-tools-panel
│ │ │ │ └── rect.svg
│ │ ├── sidebar
│ │ │ ├── delete.svg
│ │ │ ├── folder.svg
│ │ │ ├── backup.svg
│ │ │ ├── sidebar-myimages.svg
│ │ │ └── gallery-image.svg
│ │ ├── common
│ │ │ ├── file_download.svg
│ │ │ ├── folder-v2.svg
│ │ │ ├── add-workspace.svg
│ │ │ ├── circle-solid.svg
│ │ │ ├── collection-fill.svg
│ │ │ ├── workspace-icon.svg
│ │ │ ├── check.svg
│ │ │ ├── more_horiz_black.svg
│ │ │ ├── collection.svg
│ │ │ ├── trello.svg
│ │ │ └── more_horiz.svg
│ │ ├── images
│ │ │ ├── file_download.svg
│ │ │ ├── dropbox-1.svg
│ │ │ ├── sendemail.svg
│ │ │ ├── icon-image.svg
│ │ │ └── more_horiz.svg
│ │ ├── whiteboards
│ │ │ ├── ContextMenuItems
│ │ │ │ └── newtab.svg
│ │ │ └── check.svg
│ │ ├── settings
│ │ │ ├── account_box.svg
│ │ │ ├── success.svg
│ │ │ ├── icon-wallet.svg
│ │ │ ├── icon-passsword.svg
│ │ │ ├── trello.svg
│ │ │ ├── dropbox.svg
│ │ │ └── icon-trello.svg
│ │ └── item
│ │ │ ├── options.svg
│ │ │ └── video-item.svg
│ ├── .sentryclirc
│ ├── pages
│ │ ├── video
│ │ │ ├── SaveToCloudModal
│ │ │ │ └── SaveToCloudModal.module.scss
│ │ │ └── ShareItemModal
│ │ │ │ └── ShareItemModal.module.scss
│ │ └── 404.tsx
│ ├── pagesScss
│ │ ├── media
│ │ │ └── Videos.module.scss
│ │ ├── workspaces
│ │ │ └── Settngs.module.scss
│ │ └── partials
│ │ │ ├── _dotSeparator.scss
│ │ │ └── _mixins.scss
│ ├── app
│ │ ├── interfaces
│ │ │ ├── ILoaderType.ts
│ │ │ ├── IDriveDbData.ts
│ │ │ ├── ISettingsPage.ts
│ │ │ ├── ActionType.ts
│ │ │ ├── ISharedItem.ts
│ │ │ ├── tools_interfaces
│ │ │ │ ├── IPencilGroupOptions.ts
│ │ │ │ ├── IEmojiOptions.ts
│ │ │ │ ├── ICommentsGroupOptions.ts
│ │ │ │ ├── IMarkerGroupOptions.ts
│ │ │ │ ├── IToolsOptions.ts
│ │ │ │ ├── IShapeGroupOptions.ts
│ │ │ │ ├── IArrowGroupOptions.ts
│ │ │ │ ├── ITextOptions.ts
│ │ │ │ └── IConversationOptions.ts
│ │ │ ├── IUniqueView.ts
│ │ │ ├── IChapter.ts
│ │ │ ├── IComments.ts
│ │ │ ├── IMarker.ts
│ │ │ ├── IWhiteboard.ts
│ │ │ ├── IAppControl.ts
│ │ │ ├── IPreferences.ts
│ │ │ ├── IPageMenuItems.ts
│ │ │ ├── IApiResponse.ts
│ │ │ ├── IExplorerData.ts
│ │ │ ├── ItemType.ts
│ │ │ ├── IMarkerComment.ts
│ │ │ ├── IStreamState.ts
│ │ │ └── Folders.ts
│ │ ├── enums
│ │ │ ├── itemTypeEnum.ts
│ │ │ ├── itemOrderEnum.ts
│ │ │ ├── folderTypeEnum.ts
│ │ │ ├── StreamingServicesEnums.ts
│ │ │ └── itemActionsEnum.ts
│ │ ├── utilities
│ │ │ ├── destination.ts
│ │ │ └── cn.ts
│ │ ├── store
│ │ │ ├── drive
│ │ │ │ └── actions
│ │ │ │ │ └── actionTypes.ts
│ │ │ ├── whiteboard
│ │ │ │ └── actions
│ │ │ │ │ └── actionTypes.ts
│ │ │ ├── panel
│ │ │ │ └── panelUtils
│ │ │ │ │ └── utials.ts
│ │ │ └── auth
│ │ │ │ └── actions
│ │ │ │ └── actionTypes.ts
│ │ └── services
│ │ │ ├── helpers
│ │ │ ├── getWorkspaceParam.ts
│ │ │ ├── videoDuration.ts
│ │ │ ├── getCookies.ts
│ │ │ └── iDataResponseParser.ts
│ │ │ └── email.ts
│ ├── store
│ │ ├── auth
│ │ │ └── actions
│ │ │ │ └── actionTypes.ts
│ │ ├── drive
│ │ │ └── actions
│ │ │ │ └── actionTypes.ts
│ │ └── panel
│ │ │ ├── panelUtils
│ │ │ └── index.ts
│ │ │ └── index.ts
│ ├── .prettierrc
│ ├── components
│ │ ├── pagesComponents
│ │ │ ├── _editorScreen
│ │ │ │ ├── editorHelpers
│ │ │ │ │ ├── imgSrcLoader.ts
│ │ │ │ │ ├── alphabet.ts
│ │ │ │ │ └── pdf.ts
│ │ │ │ └── toolsPanel
│ │ │ │ │ ├── toolsOptions
│ │ │ │ │ ├── interface
│ │ │ │ │ │ ├── IPencilGroupOptions.ts
│ │ │ │ │ │ ├── IEmojiOptions.ts
│ │ │ │ │ │ ├── IShapeGroupOptions.ts
│ │ │ │ │ │ ├── IArrowGroupOptions.ts
│ │ │ │ │ │ ├── ITextOptions.ts
│ │ │ │ │ │ └── IConversationOptions.ts
│ │ │ │ │ ├── IToolsOptions.ts
│ │ │ │ │ └── toolsOptions.module.scss
│ │ │ │ │ ├── ToolBtn
│ │ │ │ │ └── customToolBtn
│ │ │ │ │ │ ├── EraserTool
│ │ │ │ │ │ └── eraserTool.module.scss
│ │ │ │ │ │ ├── ArrowTool
│ │ │ │ │ │ └── arrowTool.module.scss
│ │ │ │ │ │ └── ShareToolBtn
│ │ │ │ │ │ └── shareToolBtn.module.scss
│ │ │ │ │ ├── PanelSplitter.tsx
│ │ │ │ │ └── ToolsRow.tsx
│ │ │ ├── _imagesScreen
│ │ │ │ └── pages
│ │ │ │ │ ├── myVideos
│ │ │ │ │ ├── VideosContainer.module.scss
│ │ │ │ │ └── VideoItem
│ │ │ │ │ │ ├── PlayButton.tsx
│ │ │ │ │ │ ├── ThumbnailSkeletonLoader.tsx
│ │ │ │ │ │ └── Thumbnail.module.scss
│ │ │ │ │ ├── workspace
│ │ │ │ │ ├── WorkspaceItemsContainer.module.scss
│ │ │ │ │ └── MoveToWorkspaceModal
│ │ │ │ │ │ └── MoveToWorkspaceModal.module.scss
│ │ │ │ │ └── myImages
│ │ │ │ │ └── screenshotsContainer
│ │ │ │ │ └── ScreenshotItem
│ │ │ │ │ └── ScreenshotItem.module.scss
│ │ │ ├── _signScreen
│ │ │ │ └── LinksDivider.tsx
│ │ │ ├── _whiteboardScreen
│ │ │ │ ├── whiteboardToolbar
│ │ │ │ │ ├── toolButton.module.scss
│ │ │ │ │ └── customToolBtns
│ │ │ │ │ │ └── SubPanel.tsx
│ │ │ │ └── whiteboardHelpers
│ │ │ │ │ └── commentsPopup
│ │ │ │ │ └── commentContentPopup.module.scss
│ │ │ ├── _workspacesScreen
│ │ │ │ └── WorkspaceMembersModal.module.scss
│ │ │ ├── profileScreen
│ │ │ │ └── ProfileAccountPhoto.module.scss
│ │ │ └── _videoEditorScreen
│ │ │ │ ├── chapters
│ │ │ │ ├── VideoChapterContentInput
│ │ │ │ │ └── VideoChapterContentInput.module.scss
│ │ │ │ └── VideoChapterCaveatPopover
│ │ │ │ │ └── VideoChapterCaveatPopover.module.scss
│ │ │ │ └── ItemTitleAuthor
│ │ │ │ └── ItemTitleAuthor.module.scss
│ │ ├── containers
│ │ │ ├── appContainer
│ │ │ │ └── AppContainer.module.scss
│ │ │ └── dashboardLayout
│ │ │ │ └── DashboardLayout.module.scss
│ │ ├── shared
│ │ │ └── modalComponents
│ │ │ │ └── ModalSaveChangesFooter.module.scss
│ │ └── controls
│ │ │ ├── AppButton2.module.scss
│ │ │ └── AppButtonSecond.module.scss
│ ├── misc
│ │ ├── browserCompatible.ts
│ │ ├── fallbackVideoURL.ts
│ │ └── appConstConfig.ts
│ ├── sentry.properties
│ ├── index.d.ts
│ ├── @types
│ │ └── i18next.d.ts
│ ├── specs
│ │ └── index.spec.tsx
│ ├── hooks
│ │ ├── useFirstRender.ts
│ │ ├── useInfiniteScroll.ts
│ │ └── useEnterKeyPress.ts
│ ├── next-env.d.ts
│ ├── jest.config.js
│ ├── tsconfig.spec.json
│ └── .env.sample
├── extensions
│ ├── .nvmrc
│ ├── .npmrc
│ ├── .eslintignore
│ ├── src
│ │ ├── app
│ │ │ ├── utilities
│ │ │ │ ├── browser.ts
│ │ │ │ ├── destination.ts
│ │ │ │ ├── initiateSentryJs.ts
│ │ │ │ └── initiateSentryReact.ts
│ │ │ ├── interfaces
│ │ │ │ ├── ILoaderType.ts
│ │ │ │ ├── ActionType.ts
│ │ │ │ ├── IDriveDbData.ts
│ │ │ │ ├── IUniqueView.ts
│ │ │ │ ├── IComments.ts
│ │ │ │ ├── IAppControl.ts
│ │ │ │ ├── IPreferences.ts
│ │ │ │ ├── IMarker.ts
│ │ │ │ ├── IDataResponse.ts
│ │ │ │ ├── IPageMenuItems.ts
│ │ │ │ ├── IExplorerData.ts
│ │ │ │ ├── ItemTypes.ts
│ │ │ │ ├── IStreamState.ts
│ │ │ │ └── Folders.ts
│ │ │ ├── store
│ │ │ │ ├── drive
│ │ │ │ │ └── actions
│ │ │ │ │ │ └── actionTypes.ts
│ │ │ │ ├── popup
│ │ │ │ │ ├── actions
│ │ │ │ │ │ └── actionTypes.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── panel
│ │ │ │ │ └── panelUtils
│ │ │ │ │ │ └── index.ts
│ │ │ │ └── auth
│ │ │ │ │ └── actions
│ │ │ │ │ └── actionTypes.ts
│ │ │ ├── types
│ │ │ │ └── types.ts
│ │ │ ├── services
│ │ │ │ ├── lang.ts
│ │ │ │ ├── helpers
│ │ │ │ │ ├── videoDuration.ts
│ │ │ │ │ └── iDataResponseParser.ts
│ │ │ │ └── email.ts
│ │ │ └── enums
│ │ │ │ ├── StreamingServicesEnums.ts
│ │ │ │ └── itemActionsEnum.ts
│ │ ├── content
│ │ │ ├── popup
│ │ │ │ ├── assets
│ │ │ │ │ ├── react-multi-email.scss
│ │ │ │ │ ├── hidden-scrollbar.scss
│ │ │ │ │ ├── fonts
│ │ │ │ │ │ ├── Roboto-Bold.ttf
│ │ │ │ │ │ ├── Roboto-Medium.ttf
│ │ │ │ │ │ └── Roboto-Regular.ttf
│ │ │ │ │ ├── tailwind.scss
│ │ │ │ │ ├── toastify.scss
│ │ │ │ │ └── emojitoolPanel.scss
│ │ │ │ ├── routes
│ │ │ │ │ └── app.route.ts
│ │ │ │ └── utilities
│ │ │ │ │ └── interfaces
│ │ │ │ │ └── IProgressIndicatorData.ts
│ │ │ ├── overlay
│ │ │ │ └── components
│ │ │ │ │ ├── selectArea
│ │ │ │ │ └── select-area.scss
│ │ │ │ │ ├── visiblePartTimer
│ │ │ │ │ └── visible-part-timer.scss
│ │ │ │ │ └── videoCamera
│ │ │ │ │ └── video-camera.scss
│ │ │ ├── utilities
│ │ │ │ ├── partials
│ │ │ │ │ ├── _dotSeparator.scss
│ │ │ │ │ └── _mixins.scss
│ │ │ │ ├── misc
│ │ │ │ │ ├── fallbackVideoURL.ts
│ │ │ │ │ └── appConstConfig.ts
│ │ │ │ ├── scripts
│ │ │ │ │ ├── removeWindow.ts
│ │ │ │ │ ├── getPercentageFromRange.ts
│ │ │ │ │ └── sendBadgeTextMessagePort.ts
│ │ │ │ └── hooks
│ │ │ │ │ └── useEnterKeyPress.ts
│ │ │ ├── panel
│ │ │ │ ├── screens
│ │ │ │ │ ├── settingsScreen
│ │ │ │ │ │ ├── interface
│ │ │ │ │ │ │ └── ISettingsPage.ts
│ │ │ │ │ │ └── components
│ │ │ │ │ │ │ └── ProfileAccountPhoto.module.scss
│ │ │ │ │ ├── editorScreen
│ │ │ │ │ │ ├── toolsPanel
│ │ │ │ │ │ │ ├── ToolBtn
│ │ │ │ │ │ │ │ └── components
│ │ │ │ │ │ │ │ │ └── popupButton.module.scss
│ │ │ │ │ │ │ ├── toolsOptions
│ │ │ │ │ │ │ │ ├── interface
│ │ │ │ │ │ │ │ │ ├── IPencilGroupOptions.ts
│ │ │ │ │ │ │ │ │ ├── IEmojiOptions.ts
│ │ │ │ │ │ │ │ │ ├── ICommentsGroupOptions.ts
│ │ │ │ │ │ │ │ │ ├── IMarkerGroupOptions.ts
│ │ │ │ │ │ │ │ │ ├── IShapeGroupOptions.ts
│ │ │ │ │ │ │ │ │ ├── IArrowGroupOptions.ts
│ │ │ │ │ │ │ │ │ ├── ITextOptions.ts
│ │ │ │ │ │ │ │ │ ├── IMarkerComment.ts
│ │ │ │ │ │ │ │ │ └── IConversationOptions.ts
│ │ │ │ │ │ │ │ ├── IToolsOptions.ts
│ │ │ │ │ │ │ │ └── strokeWidthSelector
│ │ │ │ │ │ │ │ │ └── stroke-width-selector.css
│ │ │ │ │ │ │ ├── PanelSplitter.tsx
│ │ │ │ │ │ │ └── ToolsRow.tsx
│ │ │ │ │ │ └── editorHelpers
│ │ │ │ │ │ │ ├── alphabet.ts
│ │ │ │ │ │ │ └── pdf.ts
│ │ │ │ │ ├── videoEditorScreen
│ │ │ │ │ │ ├── shareItemModal
│ │ │ │ │ │ │ └── ShareItemModal.module.scss
│ │ │ │ │ │ ├── chapters
│ │ │ │ │ │ │ ├── VideoChapterContentInput
│ │ │ │ │ │ │ │ └── VideoChapterContentInput.module.scss
│ │ │ │ │ │ │ └── VideoChapterCaveatPopover
│ │ │ │ │ │ │ │ └── VideoChapterCaveatPopover.module.scss
│ │ │ │ │ │ └── ItemTitleAuthor
│ │ │ │ │ │ │ └── ItemTitleAuthor.module.scss
│ │ │ │ │ ├── IntegrationsScreen
│ │ │ │ │ │ └── Integrations.module.scss
│ │ │ │ │ ├── imagesScreen
│ │ │ │ │ │ └── pages
│ │ │ │ │ │ │ ├── myVideos
│ │ │ │ │ │ │ ├── MyVideos.module.scss
│ │ │ │ │ │ │ ├── videosContainer
│ │ │ │ │ │ │ │ ├── video.scss
│ │ │ │ │ │ │ │ └── VideosContainer.module.scss
│ │ │ │ │ │ │ ├── PlayButton
│ │ │ │ │ │ │ │ └── PlayButton.tsx
│ │ │ │ │ │ │ └── Thumbnail
│ │ │ │ │ │ │ │ ├── ThumbnailSkeletonLoader.tsx
│ │ │ │ │ │ │ │ └── Thumbnail.module.scss
│ │ │ │ │ │ │ ├── shared
│ │ │ │ │ │ │ ├── enums
│ │ │ │ │ │ │ │ ├── itemTypeEnum.ts
│ │ │ │ │ │ │ │ ├── itemOrderEnum.ts
│ │ │ │ │ │ │ │ └── folderTypeEnum.ts
│ │ │ │ │ │ │ ├── imagesAndVideosContainer
│ │ │ │ │ │ │ │ └── ImagesAndVideos.module.scss
│ │ │ │ │ │ │ └── hooks
│ │ │ │ │ │ │ │ └── useInfiniteScroll.ts
│ │ │ │ │ │ │ ├── workspace
│ │ │ │ │ │ │ ├── WorkspaceItemsContainer.module.scss
│ │ │ │ │ │ │ └── MoveToWorkspaceModal
│ │ │ │ │ │ │ │ └── MoveToWorkspaceModal.module.scss
│ │ │ │ │ │ │ ├── myImages
│ │ │ │ │ │ │ └── screenshotsContainer
│ │ │ │ │ │ │ │ └── ScreenshotItem
│ │ │ │ │ │ │ │ └── ScreenshotItem.module.scss
│ │ │ │ │ │ │ ├── trashed
│ │ │ │ │ │ │ └── TrashedImagesVideos.module.scss
│ │ │ │ │ │ │ └── workspaces
│ │ │ │ │ │ │ └── WorkspaceMembersModal.module.scss
│ │ │ │ │ ├── signScreen
│ │ │ │ │ │ └── signFlow
│ │ │ │ │ │ │ └── linksDivider
│ │ │ │ │ │ │ └── LinksDivider.tsx
│ │ │ │ │ ├── uploadScreen
│ │ │ │ │ │ └── UploadScreen.module.scss
│ │ │ │ │ └── singleImageScreen
│ │ │ │ │ │ └── imageActions
│ │ │ │ │ │ └── ImageActionsCard.tsx
│ │ │ │ ├── hooks
│ │ │ │ │ └── useFirstRender.ts
│ │ │ │ ├── panelRouter
│ │ │ │ │ └── panel.route.ts
│ │ │ │ ├── shared
│ │ │ │ │ └── modalComponents
│ │ │ │ │ │ └── ModalSaveChangesFooter.module.scss
│ │ │ │ ├── PanelRoutesWrapper.tsx
│ │ │ │ └── components
│ │ │ │ │ └── containers
│ │ │ │ │ └── dashboardLayout
│ │ │ │ │ ├── DashboardLayout.module.scss
│ │ │ │ │ └── elements
│ │ │ │ │ └── Slidedown
│ │ │ │ │ └── Slidedown.module.scss
│ │ │ ├── assests
│ │ │ │ └── svg
│ │ │ │ │ └── tools-panel
│ │ │ │ │ ├── video-play-btn.svg
│ │ │ │ │ ├── play.svg
│ │ │ │ │ ├── triangle.svg
│ │ │ │ │ ├── line.svg
│ │ │ │ │ ├── blob.svg
│ │ │ │ │ ├── pause.svg
│ │ │ │ │ ├── rect.svg
│ │ │ │ │ ├── square2.svg
│ │ │ │ │ ├── T(Fill).svg
│ │ │ │ │ ├── star.svg
│ │ │ │ │ ├── align-center.svg
│ │ │ │ │ ├── align-right.svg
│ │ │ │ │ ├── arrow.svg
│ │ │ │ │ ├── blackTT.svg
│ │ │ │ │ ├── whiteTT.svg
│ │ │ │ │ ├── blackT_2.svg
│ │ │ │ │ ├── whiteT_2.svg
│ │ │ │ │ └── heart.svg
│ │ │ ├── components
│ │ │ │ ├── containers
│ │ │ │ │ └── appContainer
│ │ │ │ │ │ └── AppContainer.module.scss
│ │ │ │ └── controls
│ │ │ │ │ └── AppButton2
│ │ │ │ │ └── AppButton2.module.scss
│ │ │ └── recording
│ │ │ │ ├── helpers
│ │ │ │ └── setBadgeText.ts
│ │ │ │ ├── components
│ │ │ │ └── RecordingHeader
│ │ │ │ │ └── RecordingHeader.tsx
│ │ │ │ ├── interfaces
│ │ │ │ └── IRecordingActionsProps.ts
│ │ │ │ └── recording.html
│ │ ├── background
│ │ │ └── utilities
│ │ │ │ └── enums
│ │ │ │ └── AppThemesEnum.ts
│ │ └── @types
│ │ │ ├── i18next.d.ts
│ │ │ └── index.d.ts
│ ├── icons
│ │ ├── 16.png
│ │ ├── 48.png
│ │ └── 128.png
│ ├── .prettierrc
│ ├── dev_images
│ │ ├── edge.png
│ │ ├── chrome.png
│ │ ├── mozilla.png
│ │ └── opera.png
│ ├── images
│ │ ├── images
│ │ │ ├── leak_bg.jpg
│ │ │ └── icon-image.svg
│ │ ├── panel
│ │ │ ├── images
│ │ │ │ ├── leak_bg.jpg
│ │ │ │ └── icon-image.svg
│ │ │ ├── preferences
│ │ │ │ └── preferences.png
│ │ │ ├── videos
│ │ │ │ ├── chapter-placeholder.jpg
│ │ │ │ └── play-button.svg
│ │ │ ├── sign
│ │ │ │ └── setup_finished_screen_guide.png
│ │ │ ├── sidebar
│ │ │ │ ├── delete.svg
│ │ │ │ ├── folder.svg
│ │ │ │ ├── backup.svg
│ │ │ │ ├── sidebar-myimages.svg
│ │ │ │ └── gallery-image.svg
│ │ │ ├── common
│ │ │ │ ├── file_download.svg
│ │ │ │ ├── folder-v2.svg
│ │ │ │ ├── add-workspace.svg
│ │ │ │ ├── circle-solid.svg
│ │ │ │ ├── sendemail.svg
│ │ │ │ ├── workspace-icon.svg
│ │ │ │ ├── check.svg
│ │ │ │ ├── more_horiz_black.svg
│ │ │ │ ├── collection.svg
│ │ │ │ ├── dropbox-icon-dark.svg
│ │ │ │ ├── google-drive-logo-dark.svg
│ │ │ │ └── more_horiz.svg
│ │ │ ├── settings
│ │ │ │ ├── icon-dropbox.svg
│ │ │ │ ├── account_box.svg
│ │ │ │ ├── icon-wallet.svg
│ │ │ │ ├── icon-passsword.svg
│ │ │ │ └── icon-trello.svg
│ │ │ └── item
│ │ │ │ ├── options.svg
│ │ │ │ └── trello.svg
│ │ ├── contentImages
│ │ │ ├── permission-arrow.png
│ │ │ ├── play.svg
│ │ │ ├── recordingWindowIcons
│ │ │ │ ├── button-play-grey.svg
│ │ │ │ └── button-pause-grey.svg
│ │ │ └── pause-light.svg
│ │ ├── new-design-v2
│ │ │ ├── single-video-buttons
│ │ │ │ ├── like-thumb-filled.png
│ │ │ │ └── like-thumb.svg
│ │ │ ├── chapters
│ │ │ │ └── bookmark-solid.svg
│ │ │ └── comment-more-options
│ │ │ │ └── more-vertical.svg
│ │ ├── popup
│ │ │ ├── capture
│ │ │ │ ├── stop-cam-only.svg
│ │ │ │ └── Tab_inactive.svg
│ │ │ └── navigation
│ │ │ │ ├── profile.svg
│ │ │ │ └── myimages.svg
│ │ ├── tools
│ │ │ ├── ZoomOut.svg
│ │ │ └── success-tick.svg
│ │ └── logo
│ │ │ ├── trello-logo.svg
│ │ │ └── dropbox-logo.svg
│ ├── .babelrc
│ └── .env.sample
└── api
│ ├── src
│ ├── utils
│ │ └── nano-id.ts
│ ├── module
│ │ ├── email
│ │ │ └── view.models
│ │ │ │ └── email.view.model.ts
│ │ ├── firebase
│ │ │ ├── firebase.constants.ts
│ │ │ └── index.ts
│ │ ├── gauzy
│ │ │ ├── index.ts
│ │ │ └── gauzy.config.ts
│ │ ├── log
│ │ │ └── view.models
│ │ │ │ ├── LoggerEventModel.ts
│ │ │ │ └── LogEventEnum.ts
│ │ ├── workspace
│ │ │ ├── dto
│ │ │ │ ├── teams
│ │ │ │ │ ├── add-team.dto.ts
│ │ │ │ │ ├── update-team.dto.ts
│ │ │ │ │ ├── add-member.dto.ts
│ │ │ │ │ └── delete-member.dto.ts
│ │ │ │ ├── folders
│ │ │ │ │ ├── update-folder.dto.ts
│ │ │ │ │ ├── delete-folder.dto.ts
│ │ │ │ │ ├── move-items.dto.ts
│ │ │ │ │ ├── create-folder.dto.ts
│ │ │ │ │ └── update-member-permissions.dto.ts
│ │ │ │ ├── workspaces
│ │ │ │ │ ├── create-workspace.dto.ts
│ │ │ │ │ ├── rename-workspace.dto.ts
│ │ │ │ │ └── get-workspace.dto.ts
│ │ │ │ ├── files
│ │ │ │ │ ├── like.dto.ts
│ │ │ │ │ ├── move-personal-item.dto.ts
│ │ │ │ │ ├── delete-video.dto.ts
│ │ │ │ │ ├── update-image.dto.ts
│ │ │ │ │ ├── delete-image.dto.ts
│ │ │ │ │ ├── upload-image.dto.ts
│ │ │ │ │ ├── upload-video.dto.ts
│ │ │ │ │ └── update-member-permissions.dto.ts
│ │ │ │ └── members
│ │ │ │ │ └── get-populated-members.dto.ts
│ │ │ ├── Interfaces
│ │ │ │ ├── Folders.ts
│ │ │ │ ├── Invites.ts
│ │ │ │ └── AddToDbProps.ts
│ │ │ ├── pipes
│ │ │ │ ├── parse-on-false.pipe.ts
│ │ │ │ ├── validate-image-filename.pipe.ts
│ │ │ │ └── validate-video-filename.pipe.ts
│ │ │ └── validators
│ │ │ │ ├── image-filename.validator.ts
│ │ │ │ └── video-filename.validator.ts
│ │ ├── auth
│ │ │ ├── services
│ │ │ │ ├── register
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── interfaces
│ │ │ │ │ │ └── register-state.interface.ts
│ │ │ │ ├── password-reset
│ │ │ │ │ ├── password-reset.strategy.ts
│ │ │ │ │ └── interfaces
│ │ │ │ │ │ └── password-request.interface.ts
│ │ │ │ ├── tokens
│ │ │ │ │ └── index.ts
│ │ │ │ └── login
│ │ │ │ │ └── interfaces
│ │ │ │ │ └── login-state.interface.ts
│ │ │ ├── decorators
│ │ │ │ └── user.decorator.ts
│ │ │ ├── dto
│ │ │ │ └── send-email-verification.dto.ts
│ │ │ └── interfaces
│ │ │ │ └── auth.interface.ts
│ │ ├── whiteboards
│ │ │ └── interfaces
│ │ │ │ └── Whiteboard.ts
│ │ ├── editor-websocket-module
│ │ │ └── editor-websocket.module.ts
│ │ ├── image
│ │ │ └── view.models
│ │ │ │ └── image.view.model.ts
│ │ ├── video
│ │ │ └── view.models
│ │ │ │ └── video.view.model.ts
│ │ └── video-services
│ │ │ ├── mux
│ │ │ └── mux.module.ts
│ │ │ └── api-video
│ │ │ └── api-video.module.ts
│ ├── enums
│ │ ├── ResStatusEnum.ts
│ │ ├── tmpPathsEnums.ts
│ │ └── StreamingServicesEnums.ts
│ ├── config
│ │ ├── instrument.ts
│ │ └── email.ts
│ ├── services
│ │ ├── utils
│ │ │ └── models
│ │ │ │ └── helper.view.model.ts
│ │ └── shared
│ │ │ └── shared.module.ts
│ ├── interfaces
│ │ ├── IChapter.ts
│ │ ├── ISharedData.ts
│ │ ├── IComments.ts
│ │ ├── IResponseMetadata.ts
│ │ └── Folders.ts
│ ├── common
│ │ └── pipeline
│ │ │ ├── types.ts
│ │ │ ├── handler.interface.ts
│ │ │ └── pipeline.module.ts
│ └── app.controller.ts
│ ├── public
│ ├── images
│ │ ├── favicon.ico
│ │ ├── email
│ │ │ ├── drive.png
│ │ │ ├── insta.png
│ │ │ ├── logo.png
│ │ │ ├── slack.png
│ │ │ ├── github.png
│ │ │ ├── medium.png
│ │ │ ├── reddit.png
│ │ │ ├── linkedin.png
│ │ │ ├── play-btn.png
│ │ │ ├── page-bottom.png
│ │ │ ├── page-example.png
│ │ │ ├── page-example-sc.png
│ │ │ └── register-main.png
│ │ └── gifs
│ │ │ ├── grant-access.gif
│ │ │ └── pin_extention_screen_guide.gif
│ └── fonts
│ │ ├── Avenir
│ │ └── Avenir.otf
│ │ ├── Roboto
│ │ ├── Roboto.ttf
│ │ └── Robotobold.ttf
│ │ ├── Laila
│ │ └── Laila-Light.ttf
│ │ ├── Lato
│ │ └── Lato-Light.ttf
│ │ ├── Octavia
│ │ ├── Octavia.otf
│ │ └── README.txt
│ │ ├── Poppins
│ │ ├── Poppins-Medium.ttf
│ │ └── Poppins-SemiBold.ttf
│ │ ├── Lobster
│ │ └── Lobster-Regular.ttf
│ │ ├── Marker_Felt
│ │ └── Marker Felt.ttf
│ │ ├── Limelight
│ │ └── Limelight-Regular.ttf
│ │ ├── Rasa
│ │ └── Rasa-VariableFont_wght.ttf
│ │ ├── Righteous
│ │ └── Righteous-Regular.ttf
│ │ ├── Rochester
│ │ └── Rochester-Regular.ttf
│ │ ├── Stalemate
│ │ └── Stalemate-Regular.ttf
│ │ ├── Bebas_Neue
│ │ └── BebasNeue-Regular.ttf
│ │ ├── Yellowtail
│ │ └── Yellowtail-Regular.ttf
│ │ ├── Crafty_Girls
│ │ └── CraftyGirls-Regular.ttf
│ │ ├── Leckerli_One
│ │ └── LeckerliOne-Regular.ttf
│ │ ├── Oswald
│ │ └── Oswald-VariableFont_wght.ttf
│ │ ├── Puppies_Play
│ │ └── PuppiesPlay-Regular.ttf
│ │ ├── Style_Script
│ │ └── StyleScript-Regular.ttf
│ │ ├── Abhaya_Libre
│ │ └── AbhayaLibre-ExtraBold.ttf
│ │ └── Berkshire_Swash
│ │ └── BerkshireSwash-Regular.ttf
│ ├── tsconfig.build.json
│ ├── .prettierrc
│ ├── README.md
│ ├── nest-cli.json
│ ├── test
│ └── jest-e2e.json
│ └── .editorconfig
├── tools
├── generators
│ └── .gitkeep
└── tsconfig.tools.json
├── .npmrc
├── .sentryclirc
├── .prettierrc
├── babel.config.json
├── pnpm-workspace.yaml
├── .prettierignore
├── .gitmodules
├── sentry.properties
├── vercel.json
├── firebase.json
├── .editorconfig
├── .codacy
└── codacy.yaml
├── .dockerignore
├── .vscode
└── extensions.json
├── storage.rules
└── turbo.json
/profile.log:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.husky/.gitignore:
--------------------------------------------------------------------------------
1 | _
2 |
--------------------------------------------------------------------------------
/apps/portal/public/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tools/generators/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/.nvmrc:
--------------------------------------------------------------------------------
1 | v18.12.1
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | auto-install-peers = true
2 |
--------------------------------------------------------------------------------
/.sentryclirc:
--------------------------------------------------------------------------------
1 | [defaults]
2 | org = ever-co
3 |
--------------------------------------------------------------------------------
/apps/extensions/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true
3 | }
4 |
--------------------------------------------------------------------------------
/apps/extensions/.eslintignore:
--------------------------------------------------------------------------------
1 | build
2 | mode_modules
3 |
--------------------------------------------------------------------------------
/apps/portal/.sentryclirc:
--------------------------------------------------------------------------------
1 | [defaults]
2 | org = ever-co
3 |
--------------------------------------------------------------------------------
/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "babelrcRoots": ["*"]
3 | }
4 |
--------------------------------------------------------------------------------
/apps/portal/pages/video/SaveToCloudModal/SaveToCloudModal.module.scss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/api/src/utils/nano-id.ts:
--------------------------------------------------------------------------------
1 | export const NANO_ID_REGEX = /^[A-Za-z0-9_-]+$/;
2 |
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | # npm test
5 |
--------------------------------------------------------------------------------
/apps/api/src/module/email/view.models/email.view.model.ts:
--------------------------------------------------------------------------------
1 | export class EmailViewModel {}
2 |
--------------------------------------------------------------------------------
/apps/portal/pagesScss/media/Videos.module.scss:
--------------------------------------------------------------------------------
1 | @use 'pagesScss/media/Images.module.scss';
2 |
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | packages:
2 | - 'apps/*'
3 | - 'packages/**'
4 | - 'tools/**'
5 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/utilities/browser.ts:
--------------------------------------------------------------------------------
1 | const browser = chrome;
2 | export default browser;
3 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | # Add files here to ignore them from prettier formatting
2 |
3 | /dist
4 | /coverage
5 |
--------------------------------------------------------------------------------
/apps/extensions/icons/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/icons/16.png
--------------------------------------------------------------------------------
/apps/extensions/icons/48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/icons/48.png
--------------------------------------------------------------------------------
/apps/extensions/src/content/popup/assets/react-multi-email.scss:
--------------------------------------------------------------------------------
1 | @import '~react-multi-email/style.css';
2 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/ILoaderType.ts:
--------------------------------------------------------------------------------
1 | export type LoaderTypes = 'idle' | 'loading' | 'complete';
2 |
--------------------------------------------------------------------------------
/apps/extensions/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "trailingComma": "all",
4 | "semi": true
5 | }
--------------------------------------------------------------------------------
/apps/extensions/icons/128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/icons/128.png
--------------------------------------------------------------------------------
/apps/extensions/src/app/interfaces/ILoaderType.ts:
--------------------------------------------------------------------------------
1 | export type LoaderTypes = 'idle' | 'loading' | 'complete'
2 |
--------------------------------------------------------------------------------
/apps/portal/public/sign/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/portal/public/sign/1.png
--------------------------------------------------------------------------------
/apps/portal/public/sign/22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/portal/public/sign/22.png
--------------------------------------------------------------------------------
/apps/api/src/enums/ResStatusEnum.ts:
--------------------------------------------------------------------------------
1 | export enum ResStatusEnum {
2 | error = 'error',
3 | success = 'success',
4 | }
--------------------------------------------------------------------------------
/apps/api/src/module/firebase/firebase.constants.ts:
--------------------------------------------------------------------------------
1 | export const FIREBASE_ADMIN = Symbol('FirebaseAdminToken');
2 |
--------------------------------------------------------------------------------
/apps/portal/pagesScss/workspaces/Settngs.module.scss:
--------------------------------------------------------------------------------
1 | .section {
2 | height: 33%;
3 | background: #ffffff;
4 | }
--------------------------------------------------------------------------------
/apps/portal/public/icons/128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/portal/public/icons/128.png
--------------------------------------------------------------------------------
/apps/portal/public/icons/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/portal/public/icons/16.png
--------------------------------------------------------------------------------
/apps/portal/public/icons/48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/portal/public/icons/48.png
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "apps/desktop"]
2 | path = apps/desktop
3 | url = git@github.com:ever-co/ever-rec-desktop.git
4 |
--------------------------------------------------------------------------------
/apps/api/public/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/favicon.ico
--------------------------------------------------------------------------------
/apps/extensions/dev_images/edge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/dev_images/edge.png
--------------------------------------------------------------------------------
/apps/portal/pagesScss/partials/_dotSeparator.scss:
--------------------------------------------------------------------------------
1 | .dotSeparator {
2 | font-size: 0.5rem;
3 | opacity: 0.9;
4 | }
5 |
--------------------------------------------------------------------------------
/apps/api/public/images/email/drive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/email/drive.png
--------------------------------------------------------------------------------
/apps/api/public/images/email/insta.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/email/insta.png
--------------------------------------------------------------------------------
/apps/api/public/images/email/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/email/logo.png
--------------------------------------------------------------------------------
/apps/api/public/images/email/slack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/email/slack.png
--------------------------------------------------------------------------------
/apps/extensions/dev_images/chrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/dev_images/chrome.png
--------------------------------------------------------------------------------
/apps/extensions/dev_images/mozilla.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/dev_images/mozilla.png
--------------------------------------------------------------------------------
/apps/extensions/dev_images/opera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/dev_images/opera.png
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/IDriveDbData.ts:
--------------------------------------------------------------------------------
1 | export interface IDriveDbData {
2 | driveId: string;
3 | email: string;
4 | }
5 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/ISettingsPage.ts:
--------------------------------------------------------------------------------
1 | export default interface ISettingsPageProps {
2 | imagePath?: string;
3 | }
4 |
--------------------------------------------------------------------------------
/sentry.properties:
--------------------------------------------------------------------------------
1 | defaults.url=https://sentry.io/
2 | defaults.org=ever-co
3 | defaults.project=ever-rec
4 | auth.token=
5 |
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": 2,
3 | "public": false,
4 | "github": {
5 | "enabled": false
6 | }
7 | }
--------------------------------------------------------------------------------
/apps/api/public/fonts/Avenir/Avenir.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Avenir/Avenir.otf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Roboto/Roboto.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Roboto/Roboto.ttf
--------------------------------------------------------------------------------
/apps/api/public/images/email/github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/email/github.png
--------------------------------------------------------------------------------
/apps/api/public/images/email/medium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/email/medium.png
--------------------------------------------------------------------------------
/apps/api/public/images/email/reddit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/email/reddit.png
--------------------------------------------------------------------------------
/apps/api/src/enums/tmpPathsEnums.ts:
--------------------------------------------------------------------------------
1 | export const TMP_PATH = 'tmp_videos/';
2 | export const TMP_PATH_FIXED = 'tmp_videos_fixed/';
3 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/overlay/components/selectArea/select-area.scss:
--------------------------------------------------------------------------------
1 | .select-area-overlay {
2 | z-index: 2147483620;
3 | }
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/ActionType.ts:
--------------------------------------------------------------------------------
1 | export default interface ActionType {
2 | type: string;
3 | payload?: any;
4 | }
5 |
--------------------------------------------------------------------------------
/apps/portal/public/edit/leak_bg-min.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/portal/public/edit/leak_bg-min.png
--------------------------------------------------------------------------------
/apps/portal/public/fonts/Roboto-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/portal/public/fonts/Roboto-Bold.ttf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Laila/Laila-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Laila/Laila-Light.ttf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Lato/Lato-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Lato/Lato-Light.ttf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Octavia/Octavia.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Octavia/Octavia.otf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Roboto/Robotobold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Roboto/Robotobold.ttf
--------------------------------------------------------------------------------
/apps/api/public/images/email/linkedin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/email/linkedin.png
--------------------------------------------------------------------------------
/apps/api/public/images/email/play-btn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/email/play-btn.png
--------------------------------------------------------------------------------
/apps/extensions/images/images/leak_bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/images/images/leak_bg.jpg
--------------------------------------------------------------------------------
/apps/extensions/src/content/utilities/partials/_dotSeparator.scss:
--------------------------------------------------------------------------------
1 | .dotSeparator {
2 | font-size: 0.5rem;
3 | opacity: 0.9;
4 | }
5 |
--------------------------------------------------------------------------------
/apps/portal/public/fonts/Roboto-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/portal/public/fonts/Roboto-Medium.ttf
--------------------------------------------------------------------------------
/apps/portal/public/fonts/Roboto-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/portal/public/fonts/Roboto-Regular.ttf
--------------------------------------------------------------------------------
/apps/portal/store/auth/actions/actionTypes.ts:
--------------------------------------------------------------------------------
1 | export const SET_USER = 'SET_USER';
2 | export const SET_DRIVE_USER = 'SET_DRIVE_USER';
3 |
--------------------------------------------------------------------------------
/apps/api/public/fonts/Octavia/README.txt:
--------------------------------------------------------------------------------
1 | To learn more about the font family and its license, visit https://www.fontmirror.com/octavia-script
--------------------------------------------------------------------------------
/apps/api/public/images/email/page-bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/email/page-bottom.png
--------------------------------------------------------------------------------
/apps/api/public/images/email/page-example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/email/page-example.png
--------------------------------------------------------------------------------
/apps/api/public/images/gifs/grant-access.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/gifs/grant-access.gif
--------------------------------------------------------------------------------
/apps/api/tsconfig.build.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
4 | }
5 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/interfaces/ActionType.ts:
--------------------------------------------------------------------------------
1 | export default interface ActionType {
2 | type: string;
3 | payload?: any;
4 | }
5 |
--------------------------------------------------------------------------------
/apps/portal/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "trailingComma": "all",
4 | "semi": true,
5 | "bracketSpacing": true
6 | }
7 |
--------------------------------------------------------------------------------
/apps/portal/pages/video/ShareItemModal/ShareItemModal.module.scss:
--------------------------------------------------------------------------------
1 | .localAppSpinnerWrapper {
2 | width: 25px;
3 | height: 25px;
4 | }
5 |
--------------------------------------------------------------------------------
/apps/api/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "trailingComma": "all",
4 | "bracketSpacing": true,
5 | "endOfLine": "auto"
6 | }
7 |
--------------------------------------------------------------------------------
/apps/api/public/fonts/Poppins/Poppins-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Poppins/Poppins-Medium.ttf
--------------------------------------------------------------------------------
/apps/api/public/images/email/page-example-sc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/email/page-example-sc.png
--------------------------------------------------------------------------------
/apps/api/public/images/email/register-main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/email/register-main.png
--------------------------------------------------------------------------------
/apps/api/src/config/instrument.ts:
--------------------------------------------------------------------------------
1 | import * as Sentry from '@sentry/nestjs';
2 |
3 | Sentry.init({
4 | dsn: process.env.SENTRY_DSN,
5 | });
6 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/images/leak_bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/images/panel/images/leak_bg.jpg
--------------------------------------------------------------------------------
/apps/extensions/src/app/interfaces/IDriveDbData.ts:
--------------------------------------------------------------------------------
1 | export interface IDriveDbData {
2 | driveId: string;
3 | email: string;
4 | }
5 |
--------------------------------------------------------------------------------
/apps/extensions/src/background/utilities/enums/AppThemesEnum.ts:
--------------------------------------------------------------------------------
1 | export enum AppThemesEnum {
2 | light = 'light',
3 | dark = 'dark',
4 | }
5 |
--------------------------------------------------------------------------------
/apps/portal/app/enums/itemTypeEnum.ts:
--------------------------------------------------------------------------------
1 | export enum ItemTypeEnum {
2 | images = 'images',
3 | videos = 'videos',
4 | mixed = 'mixed',
5 | }
6 |
--------------------------------------------------------------------------------
/apps/portal/public/preferences/preferences.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/portal/public/preferences/preferences.png
--------------------------------------------------------------------------------
/apps/api/README.md:
--------------------------------------------------------------------------------
1 | # Ever Rec API
2 |
3 | ## Description
4 |
5 | [Nest](https://github.com/nestjs/nest) framework TypeScript starter repository.
6 |
--------------------------------------------------------------------------------
/apps/api/public/fonts/Lobster/Lobster-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Lobster/Lobster-Regular.ttf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Marker_Felt/Marker Felt.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Marker_Felt/Marker Felt.ttf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Poppins/Poppins-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Poppins/Poppins-SemiBold.ttf
--------------------------------------------------------------------------------
/apps/portal/pagesScss/partials/_mixins.scss:
--------------------------------------------------------------------------------
1 | @mixin truncate {
2 | overflow: hidden;
3 | text-overflow: ellipsis;
4 | white-space: nowrap;
5 | }
6 |
--------------------------------------------------------------------------------
/apps/portal/public/videos/chapter-placeholder.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/portal/public/videos/chapter-placeholder.jpg
--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "storage": {
3 | "rules": "storage.rules"
4 | },
5 | "database": {
6 | "rules": "database.rules.json"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/apps/api/public/fonts/Limelight/Limelight-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Limelight/Limelight-Regular.ttf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Rasa/Rasa-VariableFont_wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Rasa/Rasa-VariableFont_wght.ttf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Righteous/Righteous-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Righteous/Righteous-Regular.ttf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Rochester/Rochester-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Rochester/Rochester-Regular.ttf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Stalemate/Stalemate-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Stalemate/Stalemate-Regular.ttf
--------------------------------------------------------------------------------
/apps/extensions/src/content/popup/assets/hidden-scrollbar.scss:
--------------------------------------------------------------------------------
1 | .rec-hidden-scrollbar {
2 | &::-webkit-scrollbar {
3 | display: none;
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/apps/portal/public/contentImages/permission-arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/portal/public/contentImages/permission-arrow.png
--------------------------------------------------------------------------------
/apps/api/public/fonts/Bebas_Neue/BebasNeue-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Bebas_Neue/BebasNeue-Regular.ttf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Yellowtail/Yellowtail-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Yellowtail/Yellowtail-Regular.ttf
--------------------------------------------------------------------------------
/apps/api/src/services/utils/models/helper.view.model.ts:
--------------------------------------------------------------------------------
1 | export class UserViewModel {
2 | email: string;
3 | name: string;
4 | photoUrl: string;
5 | }
6 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/utilities/destination.ts:
--------------------------------------------------------------------------------
1 | export const audioCtx = new AudioContext();
2 | export const destination = audioCtx.createMediaStreamDestination();
--------------------------------------------------------------------------------
/apps/portal/app/utilities/destination.ts:
--------------------------------------------------------------------------------
1 | export const audioCtx = new AudioContext();
2 | export const destination = audioCtx.createMediaStreamDestination();
3 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/editorHelpers/imgSrcLoader.ts:
--------------------------------------------------------------------------------
1 | export const imgSrcLoader = ({ src }) => {
2 | return `${src}`;
3 | };
4 |
--------------------------------------------------------------------------------
/apps/portal/public/sign/setup_finished_screen_guide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/portal/public/sign/setup_finished_screen_guide.png
--------------------------------------------------------------------------------
/apps/api/public/fonts/Crafty_Girls/CraftyGirls-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Crafty_Girls/CraftyGirls-Regular.ttf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Leckerli_One/LeckerliOne-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Leckerli_One/LeckerliOne-Regular.ttf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Oswald/Oswald-VariableFont_wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Oswald/Oswald-VariableFont_wght.ttf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Puppies_Play/PuppiesPlay-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Puppies_Play/PuppiesPlay-Regular.ttf
--------------------------------------------------------------------------------
/apps/api/public/fonts/Style_Script/StyleScript-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Style_Script/StyleScript-Regular.ttf
--------------------------------------------------------------------------------
/apps/api/public/images/gifs/pin_extention_screen_guide.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/images/gifs/pin_extention_screen_guide.gif
--------------------------------------------------------------------------------
/apps/extensions/images/contentImages/permission-arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/images/contentImages/permission-arrow.png
--------------------------------------------------------------------------------
/apps/extensions/images/panel/preferences/preferences.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/images/panel/preferences/preferences.png
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/settingsScreen/interface/ISettingsPage.ts:
--------------------------------------------------------------------------------
1 | export default interface ISettingsPageProps {
2 | imagePath?: string;
3 | }
4 |
--------------------------------------------------------------------------------
/apps/portal/app/store/drive/actions/actionTypes.ts:
--------------------------------------------------------------------------------
1 | export const SET_DRIVE_FOLDERS = 'SET_DRIVE_FOLDERS';
2 | export const SET_WORKING_FOLDER = 'SET_WORKING_FOLDER';
3 |
--------------------------------------------------------------------------------
/apps/portal/store/drive/actions/actionTypes.ts:
--------------------------------------------------------------------------------
1 | export const SET_DRIVE_FOLDERS = 'SET_DRIVE_FOLDERS';
2 | export const SET_WORKING_FOLDER = 'SET_WORKING_FOLDER';
3 |
--------------------------------------------------------------------------------
/apps/api/public/fonts/Abhaya_Libre/AbhayaLibre-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Abhaya_Libre/AbhayaLibre-ExtraBold.ttf
--------------------------------------------------------------------------------
/apps/api/src/module/gauzy/index.ts:
--------------------------------------------------------------------------------
1 | export * from './gauzy.module';
2 | export * from './services/gauzy-auth.service';
3 | export * from './services/gauzy-rest.service';
4 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/videos/chapter-placeholder.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/images/panel/videos/chapter-placeholder.jpg
--------------------------------------------------------------------------------
/apps/extensions/src/app/store/drive/actions/actionTypes.ts:
--------------------------------------------------------------------------------
1 | export const SET_DRIVE_FOLDERS = 'SET_DRIVE_FOLDERS';
2 | export const SET_WORKING_FOLDER = 'SET_WORKING_FOLDER';
--------------------------------------------------------------------------------
/apps/extensions/src/content/overlay/components/visiblePartTimer/visible-part-timer.scss:
--------------------------------------------------------------------------------
1 | .rec {
2 | .custom-visible-z-index {
3 | z-index: 145000;
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/utilities/partials/_mixins.scss:
--------------------------------------------------------------------------------
1 | @mixin truncate {
2 | overflow: hidden;
3 | text-overflow: ellipsis;
4 | white-space: nowrap;
5 | }
6 |
--------------------------------------------------------------------------------
/apps/portal/app/enums/itemOrderEnum.ts:
--------------------------------------------------------------------------------
1 | export enum ItemOrderEnum {
2 | name = 'Name',
3 | dateNewest = 'Date - newest',
4 | dateOldest = 'Date - oldest',
5 | }
6 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/ISharedItem.ts:
--------------------------------------------------------------------------------
1 | import { IUser } from './IUserData';
2 |
3 | export interface ISharedItem {
4 | user: IUser | null;
5 | ip: string;
6 | }
7 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/tools_interfaces/IPencilGroupOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IPencilGroupOptions {
2 | strokeColor: string;
3 | strokeWidth: number;
4 | }
5 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_imagesScreen/pages/myVideos/VideosContainer.module.scss:
--------------------------------------------------------------------------------
1 | @use '../myImages/screenshotsContainer/ScreenshotsContainer.module.scss';
2 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/toolsPanel/ToolBtn/components/popupButton.module.scss:
--------------------------------------------------------------------------------
1 | .tooltipWrapper span {
2 | cursor: pointer !important;
3 | }
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/videoEditorScreen/shareItemModal/ShareItemModal.module.scss:
--------------------------------------------------------------------------------
1 | .localAppSpinnerWrapper {
2 | width: 25px;
3 | height: 25px;
4 | }
5 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/popup/assets/fonts/Roboto-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/src/content/popup/assets/fonts/Roboto-Bold.ttf
--------------------------------------------------------------------------------
/apps/portal/app/services/helpers/getWorkspaceParam.ts:
--------------------------------------------------------------------------------
1 | export const getWorkspaceParam = (isWorkspace: boolean) => {
2 | return isWorkspace ? '?isWorkspace=true' : '';
3 | };
4 |
--------------------------------------------------------------------------------
/apps/portal/misc/browserCompatible.ts:
--------------------------------------------------------------------------------
1 | import { isChrome, isEdge, isOpera } from 'react-device-detect';
2 | export const isBrowserCompatible = isChrome || isEdge || isOpera;
3 |
--------------------------------------------------------------------------------
/apps/api/public/fonts/Berkshire_Swash/BerkshireSwash-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/api/public/fonts/Berkshire_Swash/BerkshireSwash-Regular.ttf
--------------------------------------------------------------------------------
/apps/extensions/images/panel/sign/setup_finished_screen_guide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/images/panel/sign/setup_finished_screen_guide.png
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/IntegrationsScreen/Integrations.module.scss:
--------------------------------------------------------------------------------
1 | @use '@/content/panel/screens/imagesScreen/pages/integrations/IntegrationPage.module.scss';
2 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/myVideos/MyVideos.module.scss:
--------------------------------------------------------------------------------
1 | @use '/src/content/panel/screens/imagesScreen/pages/myImages/MyImages.module.scss';
2 |
3 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/popup/assets/fonts/Roboto-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/src/content/popup/assets/fonts/Roboto-Medium.ttf
--------------------------------------------------------------------------------
/apps/extensions/src/content/popup/assets/fonts/Roboto-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/src/content/popup/assets/fonts/Roboto-Regular.ttf
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_imagesScreen/pages/workspace/WorkspaceItemsContainer.module.scss:
--------------------------------------------------------------------------------
1 | @use '../myImages/screenshotsContainer/ScreenshotsContainer.module.scss';
2 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/tools_interfaces/IEmojiOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IEmojiOptions {
2 | id:number,
3 | url: string;
4 | filename: string;
5 | emoji: string;
6 | }
7 |
--------------------------------------------------------------------------------
/apps/api/src/interfaces/IChapter.ts:
--------------------------------------------------------------------------------
1 | export interface IChapter {
2 | id: string;
3 | timestamp: string;
4 | content: string;
5 | thumbnailURL: string;
6 | refName?: string;
7 | }
8 |
--------------------------------------------------------------------------------
/apps/api/src/module/gauzy/gauzy.config.ts:
--------------------------------------------------------------------------------
1 | import { registerAs } from '@nestjs/config';
2 |
3 | export default registerAs('gauzy', () => ({
4 | apiUrl: process.env.GAUZY_API_URL,
5 | }));
6 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/shared/enums/itemTypeEnum.ts:
--------------------------------------------------------------------------------
1 | export enum ItemTypeEnum {
2 | images = 'images',
3 | videos = 'videos',
4 | mixed = 'mixed',
5 | }
--------------------------------------------------------------------------------
/apps/portal/sentry.properties:
--------------------------------------------------------------------------------
1 | defaults.url=https://sentry.io/
2 | defaults.org=ever-co
3 | defaults.project=rec
4 | auth.token=1cba60dee01d44b7b0d9ffd6477381753776bced2694488b9a929e0285cefb9c
5 |
--------------------------------------------------------------------------------
/apps/api/src/module/firebase/index.ts:
--------------------------------------------------------------------------------
1 | export * from './firebase.bootstrap';
2 | export * from './firebase.config';
3 | export * from './firebase.constants';
4 | export * from './firebase.module';
5 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/IUniqueView.ts:
--------------------------------------------------------------------------------
1 | export interface UniqueView {
2 | id: string;
3 | email: string;
4 | displayName?: string;
5 | photoURL?: string;
6 | timestamp?: number;
7 | }
8 |
--------------------------------------------------------------------------------
/apps/portal/public/new-design-v2/single-video-buttons/like-thumb-filled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/portal/public/new-design-v2/single-video-buttons/like-thumb-filled.png
--------------------------------------------------------------------------------
/apps/extensions/src/app/interfaces/IUniqueView.ts:
--------------------------------------------------------------------------------
1 | export interface UniqueView {
2 | id: string;
3 | email: string;
4 | displayName?: string;
5 | photoURL?: string;
6 | timestamp?: number;
7 | }
8 |
--------------------------------------------------------------------------------
/apps/portal/app/store/whiteboard/actions/actionTypes.ts:
--------------------------------------------------------------------------------
1 | export const SET_WHITEBOARDS = 'SET_WHITEBOARDS';
2 | export const ADD_WHITEBOARD = 'ADD_WHITEBOARD';
3 | export const SET_LOADING = 'SET_LOADING';
4 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/toolsPanel/toolsOptions/interface/IPencilGroupOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IPencilGroupOptions {
2 | strokeColor: string,
3 | strokeWidth: number,
4 | }
--------------------------------------------------------------------------------
/apps/api/src/module/log/view.models/LoggerEventModel.ts:
--------------------------------------------------------------------------------
1 | export interface LoggerEventModel {
2 | timestamp: number;
3 | ip?: string;
4 | userId?: string;
5 | message?: string;
6 | payload?: any;
7 | }
8 |
--------------------------------------------------------------------------------
/apps/extensions/images/new-design-v2/single-video-buttons/like-thumb-filled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ever-co/ever-rec/HEAD/apps/extensions/images/new-design-v2/single-video-buttons/like-thumb-filled.png
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/toolsPanel/toolsOptions/interface/IPencilGroupOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IPencilGroupOptions {
2 | strokeColor: string,
3 | strokeWidth: number,
4 | }
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/toolsPanel/toolsOptions/interface/IEmojiOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IEmojiOptions {
2 | url: string;
3 | filename: string;
4 | emoji: string;
5 | }
6 |
--------------------------------------------------------------------------------
/apps/portal/index.d.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable @typescript-eslint/no-explicit-any */
2 | declare module '*.svg' {
3 | const content: any;
4 | export const ReactComponent: any;
5 | export default content;
6 | }
7 |
--------------------------------------------------------------------------------
/apps/api/src/config/email.ts:
--------------------------------------------------------------------------------
1 | export enum PostmarkTemplate {
2 | welcome = 'welcome',
3 | reset = 'password-reset',
4 | image = 'image',
5 | video = 'video',
6 | workspaceInvite = 'workspace-invite',
7 | }
8 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/shared/enums/itemOrderEnum.ts:
--------------------------------------------------------------------------------
1 | export enum ItemOrderEnum {
2 | name = 'Name',
3 | dateNewest = 'Date - newest',
4 | dateOldest = 'Date - oldest',
5 | }
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/tools_interfaces/ICommentsGroupOptions.ts:
--------------------------------------------------------------------------------
1 | export interface ICommentsOptions {
2 | id: string;
3 | fill: string;
4 | position: { x: number; y: number };
5 | text: string;
6 | }
7 |
--------------------------------------------------------------------------------
/apps/portal/components/containers/appContainer/AppContainer.module.scss:
--------------------------------------------------------------------------------
1 | .wrapper {
2 | -webkit-box-shadow: -1px 9px 15px -4px rgba(0, 0, 0, 0.42);
3 | box-shadow: -1px 9px 15px -4px rgba(0, 0, 0, 0.42);
4 | }
5 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/teams/add-team.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsString, MaxLength } from 'class-validator';
2 |
3 | export class AddTeamDto {
4 | @IsString()
5 | @MaxLength(256)
6 | teamName: string;
7 | }
8 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/teams/update-team.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsString, MaxLength } from 'class-validator';
2 |
3 | export class UpdateTeamDto {
4 | @IsString()
5 | @MaxLength(256)
6 | name: string;
7 | }
8 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/IChapter.ts:
--------------------------------------------------------------------------------
1 | export type IChapter = {
2 | id: string;
3 | content: string;
4 | timestamp: string;
5 | timestampSeconds: number;
6 | thumbnailURL: string;
7 | refName: string;
8 | };
9 |
--------------------------------------------------------------------------------
/apps/api/nest-cli.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json.schemastore.org/nest-cli",
3 | "collection": "@nestjs/schematics",
4 | "sourceRoot": "src",
5 | "compilerOptions": {
6 | "deleteOutDir": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/folders/update-folder.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsObject } from 'class-validator';
2 |
3 | export class UpdateFolderDto {
4 | @IsObject()
5 | folder: any; // TODO add dto for validation
6 | }
7 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/myVideos/videosContainer/video.scss:
--------------------------------------------------------------------------------
1 | .rec {
2 | .screenshot-item:hover {
3 | .screenshot-item-overlay {
4 | visibility: visible;
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/workspace/WorkspaceItemsContainer.module.scss:
--------------------------------------------------------------------------------
1 | @use '@/content/panel/screens/imagesScreen/pages/myImages/screenshotsContainer/ScreenshotsContainer.module.scss';
2 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/popup/routes/app.route.ts:
--------------------------------------------------------------------------------
1 | import { FC } from 'react';
2 |
3 | export interface AppRoute {
4 | name: string;
5 | screen: FC;
6 | private?: boolean;
7 | hideAuthenticated?: boolean;
8 | }
9 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/video-play-btn.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/api/src/interfaces/ISharedData.ts:
--------------------------------------------------------------------------------
1 | import { ISharedDataImage } from './IEditorImage';
2 | import { ISharedDataVideo } from './IEditorVideo';
3 |
4 | export interface ISharedData extends ISharedDataImage, ISharedDataVideo {}
5 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/interfaces/IComments.ts:
--------------------------------------------------------------------------------
1 | export interface IComment {
2 | id: string;
3 | content: string;
4 | timestamp: string | number;
5 | user: {
6 | id: string;
7 | photoUrl: string | null;
8 | };
9 | }
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/toolsPanel/toolsOptions/interface/IEmojiOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IEmojiOptions {
2 | id: number
3 | url: string;
4 | filename: string;
5 | emoji: string;
6 | }
7 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/tools_interfaces/IMarkerGroupOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IMarkerOptions {
2 | id: string;
3 | type: string;
4 | fill: string;
5 | text: string;
6 | position: { x: number; y: number };
7 | }
8 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/play.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/api/src/interfaces/IComments.ts:
--------------------------------------------------------------------------------
1 | export interface IComment {
2 | id: string;
3 | content: string;
4 | timestamp: string | number;
5 | user: {
6 | id: string;
7 | photoUrl: string | null;
8 | };
9 | }
10 |
--------------------------------------------------------------------------------
/apps/api/src/interfaces/IResponseMetadata.ts:
--------------------------------------------------------------------------------
1 | import { ResStatusEnum } from '../enums/ResStatusEnum';
2 |
3 | export interface IResponseMetadata {
4 | status: ResStatusEnum;
5 | message: string;
6 | error: Error | null;
7 | }
8 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/workspaces/create-workspace.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsString, MaxLength } from 'class-validator';
2 |
3 | export class CreateWorkspaceDto {
4 | @IsString()
5 | @MaxLength(256)
6 | name: string;
7 | }
8 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/video-play-btn.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/myVideos/videosContainer/VideosContainer.module.scss:
--------------------------------------------------------------------------------
1 | @use '/src/content/panel/screens/imagesScreen/pages/myImages/screenshotsContainer/ScreenshotsContainer.module.scss';
2 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/IComments.ts:
--------------------------------------------------------------------------------
1 | export interface IComment {
2 | id: string;
3 | content: string;
4 | timestamp: string | number;
5 | user: {
6 | id: string;
7 | photoUrl: string | null;
8 | };
9 | }
10 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/files/like.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsNumber, IsString } from 'class-validator';
2 |
3 | export class LikeDto {
4 | @IsString()
5 | uid: string;
6 |
7 | @IsNumber()
8 | timestamp: number;
9 | }
10 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/folders/delete-folder.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsOptionalId } from '../../validators/id.validator';
2 |
3 | export class DeleteFolderDto {
4 | @IsOptionalId()
5 | currentFolderId: string | false = false;
6 | }
7 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/workspaces/rename-workspace.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsString, MaxLength } from 'class-validator';
2 |
3 | export class RenameWorkspaceDto {
4 | @IsString()
5 | @MaxLength(256)
6 | newName: string;
7 | }
8 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/play.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/components/containers/appContainer/AppContainer.module.scss:
--------------------------------------------------------------------------------
1 | .wrapper {
2 | -webkit-box-shadow: -1px 9px 15px -4px rgba(0, 0, 0, 0.4);
3 | box-shadow: -1px 9px 15px -4px rgba(0, 0, 0, 0.4) !important;
4 | }
5 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/shared/imagesAndVideosContainer/ImagesAndVideos.module.scss:
--------------------------------------------------------------------------------
1 | @use '/src/content/panel/screens/imagesScreen/pages/myImages/screenshotsContainer/ScreenshotsContainer.module.scss';
2 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/triangle.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/api/src/module/auth/services/register/index.ts:
--------------------------------------------------------------------------------
1 | export * from './interfaces/register-state.interface';
2 | export * from './register.chain';
3 | export * from './state/firebase-register.state';
4 | export * from './state/gauzy-register.state';
5 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/teams/add-member.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsId } from '../../validators/id.validator';
2 |
3 | export class AddTeamMemberDto {
4 | @IsId()
5 | teamId: string;
6 |
7 | @IsId()
8 | memberId: string;
9 | }
10 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/types/types.ts:
--------------------------------------------------------------------------------
1 | export type ICommandTypes =
2 | | 'stop'
3 | | 'pause'
4 | | 'cancel'
5 | | 'resume'
6 | | 'unmute'
7 | | 'mute';
8 |
9 | export type IStatusTypes = 'recording' | 'paused' | 'stopped';
10 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/myImages/screenshotsContainer/ScreenshotItem/ScreenshotItem.module.scss:
--------------------------------------------------------------------------------
1 | .wrapper {
2 | border: 3px solid transparent;
3 |
4 | &:hover {
5 | //border: 3px solid #8576FF;
6 | }
7 | }
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/teams/delete-member.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsId } from '../../validators/id.validator';
2 |
3 | export class DeleteTeamMemberDto {
4 | @IsId()
5 | teamId: string;
6 |
7 | @IsId()
8 | memberId: string;
9 | }
10 |
--------------------------------------------------------------------------------
/apps/api/test/jest-e2e.json:
--------------------------------------------------------------------------------
1 | {
2 | "moduleFileExtensions": ["js", "json", "ts"],
3 | "rootDir": ".",
4 | "testEnvironment": "node",
5 | "testRegex": ".e2e-spec.ts$",
6 | "transform": {
7 | "^.+\\.(t|j)s$": "ts-jest"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/triangle.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/recording/helpers/setBadgeText.ts:
--------------------------------------------------------------------------------
1 | import browser from '@/app/utilities/browser';
2 |
3 |
4 | export const setBadgeText = async (text: string) => {
5 | return browser.action.setBadgeText({
6 | text,
7 | });
8 | };
9 |
--------------------------------------------------------------------------------
/apps/portal/@types/i18next.d.ts:
--------------------------------------------------------------------------------
1 | import en from '../i18n/locales/en.json';
2 |
3 | declare module 'i18next' {
4 | interface CustomTypeOptions {
5 | defaultNS: 'en';
6 | resources: {
7 | en: typeof en;
8 | };
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/apps/extensions/src/@types/i18next.d.ts:
--------------------------------------------------------------------------------
1 | import en from '../../i18n/locales/en.json';
2 |
3 | declare module 'i18next' {
4 | interface CustomTypeOptions {
5 | defaultNS: '';
6 | nsSeparator: '.';
7 | resources: typeof en;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/toolsPanel/toolsOptions/interface/ICommentsGroupOptions.ts:
--------------------------------------------------------------------------------
1 | export interface ICommentsOptions {
2 | id: string;
3 | fill: string;
4 | position: { x: number; y: number };
5 | text: string;
6 | }
7 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/IMarker.ts:
--------------------------------------------------------------------------------
1 | import { IMarkerComment } from './IMarkerComment';
2 |
3 | export interface IMarker {
4 | id: string;
5 | admin: string;
6 | imageId: string;
7 | created: number;
8 | comments: IMarkerComment[];
9 | }
10 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/tools_interfaces/IToolsOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IToolsOptions {
2 | fillColor: string,
3 | strokeColor: string,
4 | strokeWidth: number,
5 | numPoints?: number,
6 | innerRadius?: number,
7 | outerRadius?: number,
8 | }
--------------------------------------------------------------------------------
/apps/api/src/common/pipeline/types.ts:
--------------------------------------------------------------------------------
1 | /** Supported pipelines */
2 | export enum PipelineType {
3 | UPLOAD_IMAGE = 'upload → image',
4 | UPLOAD_VIDEO = 'upload → video',
5 | UPLOAD_SOUNDSHOT = 'upload → audio',
6 | UPLOAD_CAMSHOT = 'upload → photo',
7 | }
8 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/line.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/public/contentImages/play.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/apps/portal/specs/index.spec.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | describe('Index', () => {
4 | it('should render successfully', () => {
5 | // const { baseElement } = render();
6 | // expect(baseElement).toBeTruthy();
7 | });
8 | });
9 |
--------------------------------------------------------------------------------
/apps/api/src/services/shared/shared.module.ts:
--------------------------------------------------------------------------------
1 | import { Module } from '@nestjs/common';
2 | import { SharedService } from './shared.service';
3 |
4 | @Module({
5 | providers: [SharedService],
6 | exports: [SharedService],
7 | })
8 | export class SharedModule {}
9 |
--------------------------------------------------------------------------------
/apps/extensions/images/contentImages/play.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/apps/portal/app/enums/folderTypeEnum.ts:
--------------------------------------------------------------------------------
1 | export enum FolderTypeEnum {
2 | videoFolders = 'videoFolders',
3 | imageFolders = 'imageFolders',
4 | sharedFolders = 'sharedFolders',
5 | trashFolders = 'trashFolders',
6 | workspaceFolders = 'workspaceFolders',
7 | }
8 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/IWhiteboard.ts:
--------------------------------------------------------------------------------
1 | export interface IWhiteboard {
2 | id: string;
3 | name: string;
4 | admin: string;
5 | created: number;
6 | trash: boolean;
7 | favorite: boolean;
8 | isPublic: boolean;
9 | thumbnail?: string;
10 | }
11 |
--------------------------------------------------------------------------------
/apps/portal/public/sidebar/delete.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/line.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/toolsPanel/toolsOptions/interface/IMarkerGroupOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IMarkerOptions {
2 | id: string;
3 | type: string;
4 | fill: string;
5 | text: string;
6 | position: { x: number; y: number };
7 | }
8 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/trashed/TrashedImagesVideos.module.scss:
--------------------------------------------------------------------------------
1 | @use '/src/content/panel/screens/imagesScreen/pages/myImages/screenshotsContainer/ScreenshotsContainer.module.scss';
2 |
3 | .noPadding {
4 | padding: 0 !important;
5 | }
6 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/IAppControl.ts:
--------------------------------------------------------------------------------
1 | export default interface IAppControl {
2 | value: string;
3 | errors: string[];
4 | touched: boolean;
5 | }
6 |
7 | export interface IAppControlData {
8 | value: string;
9 | errors?: string[] | undefined;
10 | }
11 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/tools_interfaces/IShapeGroupOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IShapeGroupOptions {
2 | fillColor: string;
3 | strokeColor: string;
4 | strokeWidth: number;
5 | numPoints?: number;
6 | innerRadius?: number;
7 | outerRadius?: number;
8 | }
9 |
--------------------------------------------------------------------------------
/apps/portal/public/common/file_download.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/public/images/file_download.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/sidebar/delete.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/popup/assets/tailwind.scss:
--------------------------------------------------------------------------------
1 | .rec {
2 | @import 'tailwindcss/base';
3 | @import 'tailwindcss/components';
4 | @import 'tailwindcss/utilities';
5 | }
6 |
7 | // @tailwind base;
8 | // @tailwind components;
9 | // @tailwind utilities;
10 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/toolsPanel/ToolBtn/customToolBtn/EraserTool/eraserTool.module.scss:
--------------------------------------------------------------------------------
1 | .container {
2 | color: rgb(0 0 0);
3 | }
4 |
5 | .flexContainer {
6 | display: flex;
7 | justify-content: center;
8 | color: rgb(0 0 0);
9 | }
--------------------------------------------------------------------------------
/apps/api/src/module/whiteboards/interfaces/Whiteboard.ts:
--------------------------------------------------------------------------------
1 | export interface IWhiteboard {
2 | id: string;
3 | name: string;
4 | admin: string;
5 | created: number;
6 | trash: boolean;
7 | favorite: boolean;
8 | isPublic: boolean;
9 | thumbnail?: string;
10 | }
11 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/common/file_download.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/public/sidebar/folder.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/workspaces/get-workspace.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsOptionalId } from '../../validators/id.validator';
2 | import { Transform } from 'class-transformer';
3 |
4 | export class GetWorkspaceDto {
5 | @IsOptionalId()
6 | folderId: string | false = false;
7 | }
8 |
--------------------------------------------------------------------------------
/apps/extensions/images/popup/capture/stop-cam-only.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/app/utilities/cn.ts:
--------------------------------------------------------------------------------
1 | import clsx, { ClassValue } from 'clsx';
2 | import { twMerge } from 'tailwind-merge';
3 |
4 | /** Merge classes with tailwind-merge with clsx full feature */
5 | export function cn(...classes: ClassValue[]) {
6 | return twMerge(clsx(...classes));
7 | }
8 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_imagesScreen/pages/myImages/screenshotsContainer/ScreenshotItem/ScreenshotItem.module.scss:
--------------------------------------------------------------------------------
1 | .wrapper {
2 | box-sizing: border-box;
3 | border: 3px solid transparent;
4 |
5 | &:hover {
6 | //border: 3px solid #8576FF;
7 | }
8 | }
--------------------------------------------------------------------------------
/apps/portal/hooks/useFirstRender.ts:
--------------------------------------------------------------------------------
1 | import { useRef } from 'react';
2 |
3 | const useFirstRender = () => {
4 | const ref = useRef(true);
5 | const firstRender = ref.current;
6 | ref.current = false;
7 | return firstRender;
8 | };
9 |
10 | export default useFirstRender;
11 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/blob.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/sidebar/folder.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/store/popup/actions/actionTypes.ts:
--------------------------------------------------------------------------------
1 | export const CHANGE_ACTIVE_ROUTE = 'CHANGE_ACTIVE_ROUTE';
2 | export const CHANGE_ACTIVE_URL = 'CHANGE_ACTIVE_URL';
3 | export const SET_CAPTURING_TIME = 'SET_CAPTURING_TIME';
4 | export const SET_RECORDING_VIDEO = 'SET_RECORDING_VIDEO';
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/tools_interfaces/IArrowGroupOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IArrowGroupOptions {
2 | color: string;
3 | width: number;
4 | points: [number, number, number, number, number, number, number, number];
5 | points1: [number, number, number, number];
6 | }
7 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/toolsPanel/toolsOptions/IToolsOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IToolsOptions {
2 | fillColor: string,
3 | strokeColor: string,
4 | strokeWidth: number,
5 |
6 | numPoints?: number,
7 | innerRadius?: number,
8 | outerRadius?: number,
9 | }
--------------------------------------------------------------------------------
/apps/portal/misc/fallbackVideoURL.ts:
--------------------------------------------------------------------------------
1 | export const fallbackVideoURL = async (url: string, fallbackURL: string) => {
2 | return fetch(url).then((response) => {
3 | if (response.status !== 404) {
4 | return url;
5 | }
6 |
7 | return fallbackURL;
8 | });
9 | };
10 |
--------------------------------------------------------------------------------
/apps/api/src/module/editor-websocket-module/editor-websocket.module.ts:
--------------------------------------------------------------------------------
1 | import { Module } from '@nestjs/common';
2 | import { EditorGateway } from './editor.gateway';
3 |
4 | @Module({
5 | providers: [EditorGateway],
6 | exports: [EditorGateway],
7 | })
8 | export class EditorWebsocketModule {}
9 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/files/move-personal-item.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsId, IsOptionalId } from '../../validators/id.validator';
2 |
3 | export class MovePersonalItemDto {
4 | @IsId()
5 | itemId: string;
6 |
7 | @IsOptionalId()
8 | folderId: string | false = false;
9 | }
10 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/interfaces/IAppControl.ts:
--------------------------------------------------------------------------------
1 | export default interface IAppControl {
2 | value: string;
3 | errors: string[];
4 | touched: boolean;
5 | }
6 |
7 | export interface IAppControlData {
8 | value: string;
9 | errors?: string[] | undefined;
10 | }
11 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/blob.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/toolsPanel/toolsOptions/IToolsOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IToolsOptions {
2 | fillColor: string,
3 | strokeColor: string,
4 | strokeWidth: number,
5 |
6 | numPoints?: number,
7 | innerRadius?: number,
8 | outerRadius?: number,
9 | }
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/videoEditorScreen/chapters/VideoChapterContentInput/VideoChapterContentInput.module.scss:
--------------------------------------------------------------------------------
1 | .ContentInput {
2 | border: 1px solid rgb(150, 150, 150) !important;
3 | margin-right: 0.5rem;
4 | height: 51px !important;
5 | width: 165px !important;
6 | }
7 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/pause.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/rect.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/square2.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/public/common/folder-v2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/portal/public/contentImages/recordingWindowIcons/button-play-grey.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/apps/extensions/images/contentImages/recordingWindowIcons/button-play-grey.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/common/folder-v2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/pause.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/rect.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/square2.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/IPreferences.ts:
--------------------------------------------------------------------------------
1 | export type ImageExtention = 'png' | 'jpg';
2 |
3 | export default interface IPreferences {
4 | imageExt: ImageExtention;
5 | showSharedGDriveLink: boolean;
6 | defaultSave: boolean;
7 | defaultSavePath: string;
8 | addInfoOnTop: boolean;
9 | }
10 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_signScreen/LinksDivider.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const LinksDivider: React.FC = () => {
4 | return (
5 |
6 | );
7 | };
8 |
9 | export default LinksDivider;
10 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_whiteboardScreen/whiteboardToolbar/toolButton.module.scss:
--------------------------------------------------------------------------------
1 | .toolButton {
2 | background-color: '#5B4DBE';
3 | &:hover {
4 | background-color: #363071 !important;
5 | }
6 | &:active {
7 | background-color: #363071 !important;
8 | }
9 | }
--------------------------------------------------------------------------------
/apps/extensions/src/app/interfaces/IPreferences.ts:
--------------------------------------------------------------------------------
1 | export type ImageExtention = 'png' | 'jpg';
2 |
3 | export default interface IPreferences {
4 | imageExt: ImageExtention;
5 | showSharedGDriveLink: boolean;
6 | defaultSave: boolean;
7 | defaultSavePath: string;
8 | addInfoOnTop: boolean;
9 | }
--------------------------------------------------------------------------------
/apps/extensions/src/app/services/lang.ts:
--------------------------------------------------------------------------------
1 | import browser from '@/app/utilities/browser';
2 |
3 | export const setLang = (lang: string) => {
4 | browser.storage.local.set({ lang: lang });
5 | };
6 |
7 | export const getLang = async () => {
8 | return await browser.storage.local.get('lang');
9 | };
10 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/hooks/useFirstRender.ts:
--------------------------------------------------------------------------------
1 | import { useRef } from 'react';
2 |
3 | const useFirstRender = () => {
4 | const ref = useRef(true);
5 | const firstRender = ref.current;
6 | ref.current = false;
7 | return firstRender;
8 | };
9 |
10 | export default useFirstRender;
11 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/IPageMenuItems.ts:
--------------------------------------------------------------------------------
1 | import { ReactElement } from 'react';
2 |
3 | interface IPageMenuItems {
4 | type: string; // overwritten
5 | title: string;
6 | icon: ReactElement;
7 | route: string;
8 | isWorkspaceRoute?: boolean;
9 | }
10 |
11 | export default IPageMenuItems;
12 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/toolsPanel/toolsOptions/interface/IShapeGroupOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IShapeGroupOptions {
2 | fillColor: string;
3 | strokeColor: string;
4 | strokeWidth: number;
5 | numPoints?: number;
6 | innerRadius?: number;
7 | outerRadius?: number;
8 | }
9 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_workspacesScreen/WorkspaceMembersModal.module.scss:
--------------------------------------------------------------------------------
1 | @use 'pagesScss/partials/_reactTabs.scss';
2 |
3 | .Heading {
4 | font-size: 1.5rem;
5 | padding-left: 0.65rem;
6 | margin-bottom: 0.5rem;
7 | }
8 |
9 | .margin-right {
10 | margin-right: 0.5rem;
11 | }
12 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/profileScreen/ProfileAccountPhoto.module.scss:
--------------------------------------------------------------------------------
1 | .profileUserPhoto {
2 | display: flex;
3 | border-radius: 100%;
4 | overflow: hidden;
5 | cursor: pointer;
6 |
7 | img {
8 | width: 100%;
9 | height: 100%;
10 | object-fit: cover;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apps/extensions/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | [
4 | "@babel/preset-env",
5 | {
6 | "modules": true
7 | }
8 | ],
9 | "@babel/preset-react"
10 | ],
11 | "plugins": [
12 | "react-hot-loader/babel"
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/toolsPanel/toolsOptions/interface/IShapeGroupOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IShapeGroupOptions {
2 | fillColor: string;
3 | strokeColor: string;
4 | strokeWidth: number;
5 | numPoints?: number;
6 | innerRadius?: number;
7 | outerRadius?: number;
8 | }
9 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/utilities/misc/fallbackVideoURL.ts:
--------------------------------------------------------------------------------
1 | export const fallbackVideoURL = async (url: string, fallbackURL: string) => {
2 | return fetch(url).then((response) => {
3 | if (response.status !== 404) {
4 | return url;
5 | }
6 |
7 | return fallbackURL;
8 | });
9 | };
10 |
--------------------------------------------------------------------------------
/apps/portal/public/common/add-workspace.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/apps/portal/public/new-design-v2/bookmark-solid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | max_line_length = off
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/shared/enums/folderTypeEnum.ts:
--------------------------------------------------------------------------------
1 | export enum FolderTypeEnum {
2 | videoFolders = 'videoFolders',
3 | imageFolders = 'imageFolders',
4 | sharedFolders = 'sharedFolders',
5 | trashFolders = 'trashFolders',
6 | workspaceFolders = 'workspaceFolders',
7 | }
8 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/toolsPanel/toolsOptions/interface/IArrowGroupOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IArrowGroupOptions {
2 | color: string;
3 | width: number;
4 | points: [number, number, number, number, number, number, number, number];
5 | points1: [number, number, number, number];
6 | }
7 |
--------------------------------------------------------------------------------
/apps/api/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | max_line_length = off
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/common/add-workspace.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/toolsPanel/toolsOptions/interface/IArrowGroupOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IArrowGroupOptions {
2 | color: string;
3 | width: number;
4 | points: [number, number, number, number, number, number, number, number];
5 | points1: [number, number, number, number];
6 | }
7 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/settingsScreen/components/ProfileAccountPhoto.module.scss:
--------------------------------------------------------------------------------
1 | .profileUserPhoto {
2 | display: flex;
3 | border-radius: 100%;
4 | overflow: hidden;
5 | cursor: pointer;
6 |
7 | img {
8 | width: 100%;
9 | height: 100%;
10 | object-fit: cover;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apps/portal/misc/appConstConfig.ts:
--------------------------------------------------------------------------------
1 | export const CHAPTER_MIN_CHAPTERS = 3;
2 | export const CHAPTER_MIN_REQUIRED_SECONDS = 10;
3 | export const CHAPTER_MIN_VIDEO_LENGTH =
4 | CHAPTER_MIN_CHAPTERS * CHAPTER_MIN_REQUIRED_SECONDS;
5 | export const CHAPTER_THUMBNAIL_WIDTH = 1000;
6 | export const CHAPTER_THUMBNAIL_HEIGHT = 562;
7 |
--------------------------------------------------------------------------------
/apps/extensions/images/new-design-v2/chapters/bookmark-solid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/signScreen/signFlow/linksDivider/LinksDivider.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 |
4 | const LinksDivider: React.FC = () => {
5 | return (
6 |
7 | );
8 | }
9 |
10 | export default LinksDivider;
--------------------------------------------------------------------------------
/apps/extensions/src/content/popup/utilities/interfaces/IProgressIndicatorData.ts:
--------------------------------------------------------------------------------
1 | export enum ProgressTypeEnum {
2 | FLC = 'Full Page Capture',
3 | GIF = 'GIF Animation',
4 | }
5 |
6 | export interface IProgressIndicatorData {
7 | value: number;
8 | maxValue: number;
9 | progressType: ProgressTypeEnum;
10 | }
11 |
--------------------------------------------------------------------------------
/apps/portal/public/videos/play-button.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/tools/tsconfig.tools.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.base.json",
3 | "compilerOptions": {
4 | "outDir": "../dist/out-tsc/tools",
5 | "rootDir": ".",
6 | "module": "commonjs",
7 | "target": "es5",
8 | "types": ["node"],
9 | "importHelpers": false
10 | },
11 | "include": ["**/*.ts"]
12 | }
13 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/Interfaces/Folders.ts:
--------------------------------------------------------------------------------
1 | import { IDbFolder } from '../../../interfaces/IEditorImage';
2 | import { IAccess } from './Workspace';
3 |
4 | export interface IWorkspaceFolder extends IDbFolder {
5 | isPublic: boolean;
6 | creator: string;
7 | access?: IAccess;
8 | isFavoredBy?: string[];
9 | }
10 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/interfaces/IMarker.ts:
--------------------------------------------------------------------------------
1 | import { IMarkerComment } from '@/content/panel/screens/editorScreen/toolsPanel/toolsOptions/interface/IMarkerComment';
2 |
3 | export interface IMarker {
4 | id: string;
5 | admin: string;
6 | imageId: string;
7 | created: number;
8 | comments: IMarkerComment[];
9 | }
10 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/panelRouter/panel.route.ts:
--------------------------------------------------------------------------------
1 | import { FC } from 'react';
2 |
3 | export interface PanelRoute {
4 | name: PanelRoutesNames;
5 | screen: FC;
6 | private?: boolean;
7 | }
8 |
9 | export enum PanelRoutesNames {
10 | main,
11 | screenshots,
12 | edit,
13 | signIn,
14 | grand,
15 | }
16 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/popup/assets/toastify.scss:
--------------------------------------------------------------------------------
1 | @import '~react-toastify/dist/ReactToastify.css';
2 | :root {
3 | --toastify-color-info: #5b4dbe;
4 | --toastify-color-success: #5b4dbe;
5 |
6 | --toastify-icon-color-info: var(--toastify-color-info);
7 | --toastify-icon-color-success: var(--toastify-color-success);
8 | }
9 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/utilities/scripts/removeWindow.ts:
--------------------------------------------------------------------------------
1 | import browser from '@/app/utilities/browser';
2 |
3 |
4 | const removeWindow = async (winId: number) => {
5 | try {
6 | await browser.windows.remove(winId);
7 | } catch (e) {
8 | console.log(e);
9 | }
10 | };
11 |
12 | export default removeWindow;
13 |
--------------------------------------------------------------------------------
/apps/portal/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 | ///
4 |
5 | // NOTE: This file should not be edited
6 | // see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.
7 |
--------------------------------------------------------------------------------
/apps/portal/store/panel/panelUtils/index.ts:
--------------------------------------------------------------------------------
1 | import IExplorerData from 'app/interfaces/IExplorerData';
2 | import { IUser } from 'app/interfaces/IUserData';
3 |
4 | export const isRootFolder = (
5 | user: IUser,
6 | explorerData: IExplorerData,
7 | ): boolean => {
8 | return !user || !explorerData.currentFolder;
9 | };
10 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/files/delete-video.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsVideoFilename } from '../../validators/video-filename.validator';
2 | import { IsId } from '../../validators/id.validator';
3 |
4 | export class DeleteVideoDto {
5 | @IsVideoFilename()
6 | refName: string;
7 |
8 | @IsId()
9 | videoId: string;
10 | }
11 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/videos/play-button.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/toolsPanel/toolsOptions/strokeWidthSelector/stroke-width-selector.css:
--------------------------------------------------------------------------------
1 | .stroke-selector .ant-select-selection-item .title {
2 | color: rgb(0, 0, 0) !important;
3 | }
4 |
5 | .stroke-selector .ant-select-selection-item .bottom-line {
6 | background-color: rgb(0, 0, 0) !important;
7 | }
8 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/workspaces/WorkspaceMembersModal.module.scss:
--------------------------------------------------------------------------------
1 | @use '/src/content/utilities/partials/reactTabs.scss';
2 |
3 | .Heading {
4 | font-size: 1.5rem;
5 | padding-left: 0.65rem;
6 | margin-bottom: 0.5rem;
7 | }
8 |
9 | .margin-right {
10 | margin-right: 0.5rem;
11 | }
12 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/IApiResponse.ts:
--------------------------------------------------------------------------------
1 | interface IResponseMetadata {
2 | status: ResStatusEnum;
3 | message: string;
4 | error: Error | null;
5 | }
6 |
7 | export type IDataResponse = IResponseMetadata & { data: T };
8 |
9 | export enum ResStatusEnum {
10 | error = 'error',
11 | success = 'success',
12 | }
13 |
--------------------------------------------------------------------------------
/apps/api/src/enums/StreamingServicesEnums.ts:
--------------------------------------------------------------------------------
1 | export enum VideoServicesEnum {
2 | MUX = 'mux',
3 | API_VIDEO = 'api.video',
4 | CLOUDINARY = 'cloudinary',
5 | LOCAL_STORAGE = 'local storage',
6 | }
7 |
8 | export enum PlaybackStatusEnum {
9 | PREPARING = 'preparing',
10 | READY = 'ready',
11 | ERRORED = 'errored',
12 | }
13 |
--------------------------------------------------------------------------------
/apps/api/src/module/auth/services/password-reset/password-reset.strategy.ts:
--------------------------------------------------------------------------------
1 | import { IDataResponse } from '../../../../interfaces/_types';
2 |
3 | export interface PasswordResetEmailStrategy {
4 | execute(email: string): Promise;
5 | }
6 |
7 | export const PASSWORD_RESET_EMAIL_STRATEGY = Symbol('PASSWORD_RESET_EMAIL_STRATEGY');
8 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/interfaces/IDataResponse.ts:
--------------------------------------------------------------------------------
1 | interface IResponseMetadata {
2 | status: ResStatusEnum;
3 | message: string;
4 | error: Error | null;
5 | }
6 |
7 | export type IDataResponse = IResponseMetadata & { data: T };
8 |
9 | export enum ResStatusEnum {
10 | error = 'error',
11 | success = 'success',
12 | }
--------------------------------------------------------------------------------
/apps/extensions/src/app/interfaces/IPageMenuItems.ts:
--------------------------------------------------------------------------------
1 | import { ReactElement } from 'react';
2 |
3 | interface IPageMenuItems {
4 | type: string; // overwritten
5 | title: string;
6 | icon: ReactElement;
7 | route: string;
8 | isWorkspaceRoute?: boolean;
9 | imgName?: string;
10 | }
11 |
12 | export default IPageMenuItems;
13 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/utilities/initiateSentryJs.ts:
--------------------------------------------------------------------------------
1 | // Check https://docs.sentry.io/platforms/javascript/configuration/webworkers/
2 | import * as Sentry from "@sentry/browser";
3 |
4 | Sentry.init({
5 | dsn: process.env.SENTRY_DSN || "https://5afbf303d711453cb6fd6b08951d5c70@o998199.ingest.sentry.io/6604566", tracesSampleRate: 1.0,
6 | });
7 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/utilities/scripts/getPercentageFromRange.ts:
--------------------------------------------------------------------------------
1 | const getPercentageFromRange = (value: number, maxValue: number) => {
2 | let percentage = ((value / maxValue) * 100).toFixed(0);
3 | if (parseInt(percentage) > 100) percentage = '100';
4 |
5 | return percentage;
6 | };
7 |
8 | export default getPercentageFromRange;
9 |
--------------------------------------------------------------------------------
/apps/portal/app/enums/StreamingServicesEnums.ts:
--------------------------------------------------------------------------------
1 | export enum VideoServicesEnum {
2 | MUX = 'mux',
3 | API_VIDEO = 'api.video',
4 | CLOUDINARY = 'cloudinary',
5 | LOCAL_STORAGE = 'local storage',
6 | }
7 |
8 | export enum PlaybackStatusEnum {
9 | PREPARING = 'preparing',
10 | READY = 'ready',
11 | ERRORED = 'errored',
12 | }
13 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/tools_interfaces/ITextOptions.ts:
--------------------------------------------------------------------------------
1 | export interface ITextOptions {
2 | fontFamily: string;
3 | fontSize: number;
4 | fontStyle: string;
5 | fill: string;
6 | stroke: string;
7 | shadow: boolean;
8 | align: string;
9 | textDecoration: string;
10 | fontVariant: string;
11 | text:string
12 | }
13 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/stop.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/uploadScreen/UploadScreen.module.scss:
--------------------------------------------------------------------------------
1 | .uploadBackground {
2 | min-height: 100vh;
3 | min-width: 100vw;
4 | background: radial-gradient(
5 | ellipse at 25% 92%,
6 | rgba(101, 99, 255, 0.35) 0%,
7 | rgba(236, 234, 244, 0.4) 42%,
8 | rgba(236, 234, 244, 0.7) 100%
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/utilities/misc/appConstConfig.ts:
--------------------------------------------------------------------------------
1 | export const CHAPTER_MIN_CHAPTERS = 3;
2 | export const CHAPTER_MIN_REQUIRED_SECONDS = 10;
3 | export const CHAPTER_MIN_VIDEO_LENGTH =
4 | CHAPTER_MIN_CHAPTERS * CHAPTER_MIN_REQUIRED_SECONDS;
5 | export const CHAPTER_THUMBNAIL_WIDTH = 1000;
6 | export const CHAPTER_THUMBNAIL_HEIGHT = 562;
7 |
--------------------------------------------------------------------------------
/apps/extensions/images/contentImages/pause-light.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/enums/StreamingServicesEnums.ts:
--------------------------------------------------------------------------------
1 | export enum VideoServicesEnum {
2 | MUX = 'mux',
3 | API_VIDEO = 'api.video',
4 | CLOUDINARY = 'cloudinary',
5 | LOCAL_STORAGE = 'local storage',
6 | }
7 |
8 | export enum PlaybackStatusEnum {
9 | PREPARING = 'preparing',
10 | READY = 'ready',
11 | ERRORED = 'errored',
12 | }
13 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/IExplorerData.ts:
--------------------------------------------------------------------------------
1 | import IEditorImage, { IDbFolderData } from './IEditorImage';
2 |
3 | export default interface IExplorerData {
4 | allFolders: IDbFolderData[];
5 | currentFolder: IDbFolderData | null;
6 | files: IEditorImage[];
7 | folders: IDbFolderData[];
8 | navigationFromFavoriteFolder?: boolean;
9 | }
10 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/ItemType.ts:
--------------------------------------------------------------------------------
1 | import { IWorkspaceImage, IWorkspaceVideo } from './IWorkspace';
2 |
3 | export type ItemType = 'image' | 'video';
4 | export type PermissionsItemType = 'screenshots' | 'videos' | 'folders';
5 | export type WorkspaceItemType = IWorkspaceImage | IWorkspaceVideo;
6 | export type MixedItemType = 'image' | 'video' | 'mixed'
--------------------------------------------------------------------------------
/apps/portal/public/contentImages/pause-light.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/.codacy/codacy.yaml:
--------------------------------------------------------------------------------
1 | runtimes:
2 | - dart@3.7.2
3 | - go@1.22.3
4 | - java@17.0.10
5 | - node@22.2.0
6 | - python@3.11.11
7 | tools:
8 | - dartanalyzer@3.7.2
9 | - eslint@8.57.0
10 | - lizard@1.17.19
11 | - pmd@6.55.0
12 | - pylint@3.3.6
13 | - revive@1.7.0
14 | - semgrep@1.78.0
15 | - trivy@0.59.1
16 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/interfaces/IExplorerData.ts:
--------------------------------------------------------------------------------
1 | import IEditorImage, { IDbFolderData } from './IEditorImage';
2 |
3 | export default interface IExplorerData {
4 | allFolders: IDbFolderData[];
5 | currentFolder: IDbFolderData | null;
6 | files: IEditorImage[];
7 | folders: IDbFolderData[];
8 | navigationFromFavoriteFolder?: boolean;
9 | }
10 |
--------------------------------------------------------------------------------
/apps/portal/public/new-design-v2/comment-more-options/more-vertical.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/images/new-design-v2/comment-more-options/more-vertical.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/interfaces/ItemTypes.ts:
--------------------------------------------------------------------------------
1 | import { IWorkspaceImage, IWorkspaceVideo } from './IWorkspace';
2 |
3 | export type ItemType = 'image' | 'video';
4 | export type PermissionsItemType = 'screenshots' | 'videos' | 'folders';
5 | export type WorkspaceItemType = IWorkspaceImage | IWorkspaceVideo;
6 | export type MixedItemType = 'image' | 'video' | 'mixed'
--------------------------------------------------------------------------------
/apps/extensions/src/content/recording/components/RecordingHeader/RecordingHeader.tsx:
--------------------------------------------------------------------------------
1 | import Logo from '@/content/components/elements/Logo';
2 |
3 | const RecordingHeader: React.FC = () => {
4 | return (
5 |
6 |
7 |
8 | );
9 | };
10 |
11 | export default RecordingHeader;
12 |
--------------------------------------------------------------------------------
/apps/portal/public/common/circle-solid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | .git
2 | node_modules
3 | **/node_modules/*
4 | **/npm-debug.log
5 | **/.husky
6 | .venv
7 | **/.next
8 | **/.turbo
9 | **/build
10 | **/dist
11 | **/out
12 | **/uploads
13 | **/tmp_videos
14 | **/tmp_videos_fixed
15 | **/*.log
16 |
17 | **/.vscode
18 | **/.env.local
19 | **/apps/portal/.env*
20 | **/apps/api/.env*
21 | **/apps/extensions/.env*
22 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/folders/move-items.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsId, IsOptionalId } from '../../validators/id.validator';
2 | import { IsArray } from 'class-validator';
3 |
4 | export class MoveItemsDto {
5 | @IsOptionalId()
6 | fromFolderId: string | false = false;
7 |
8 | @IsArray()
9 | @IsId({ each: true })
10 | itemIds: string[];
11 | }
12 |
--------------------------------------------------------------------------------
/apps/portal/components/shared/modalComponents/ModalSaveChangesFooter.module.scss:
--------------------------------------------------------------------------------
1 | @import 'pagesScss/partials/_colors.scss';
2 |
3 | .footerContainer {
4 | display: flex;
5 | justify-content: space-between;
6 | align-items: center;
7 | margin-top: 1.7rem;
8 |
9 | .cancelLink {
10 | color: $primary-violet;
11 | cursor: pointer;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/apps/portal/public/sidebar/backup.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/api/src/interfaces/Folders.ts:
--------------------------------------------------------------------------------
1 | export interface SingleFavFolder {
2 | name: string;
3 | id: string;
4 | }
5 |
6 | export interface IFavoriteFolders {
7 | images: { [id: string]: SingleFavFolder }[];
8 | videos: { [id: string]: SingleFavFolder }[];
9 | workspaces: {
10 | [workspaceId: string]: { [id: string]: SingleFavFolder }[];
11 | };
12 | }
13 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/common/circle-solid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/toolsPanel/ToolBtn/customToolBtn/ArrowTool/arrowTool.module.scss:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | justify-content: center;
4 | margin-bottom: 1rem;
5 | }
6 |
7 | .flexContainer {
8 | display: flex;
9 | justify-content: center;
10 | }
11 |
12 | .selector {
13 | margin-right: 0.5rem;
14 | }
--------------------------------------------------------------------------------
/apps/portal/public/images/dropbox-1.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/portal/public/sidebar/sidebar-myimages.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/sidebar/backup.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/interfaces/IStreamState.ts:
--------------------------------------------------------------------------------
1 | import {
2 | PlaybackStatusEnum,
3 | VideoServicesEnum,
4 | } from '../enums/StreamingServicesEnums';
5 |
6 | export interface IStreamState {
7 | service: VideoServicesEnum;
8 | assetId: string;
9 | playbackStatus: PlaybackStatusEnum;
10 | downloadStatus: PlaybackStatusEnum;
11 | downloadUrl: string;
12 | }
13 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/utilities/initiateSentryReact.ts:
--------------------------------------------------------------------------------
1 | import * as Sentry from "@sentry/react";
2 | import { BrowserTracing } from "@sentry/tracing";
3 |
4 | Sentry.init({
5 | dsn: process.env.SENTRY_DSN || "https://5afbf303d711453cb6fd6b08951d5c70@o998199.ingest.sentry.io/6604566",
6 | debug: false,
7 | integrations: [new BrowserTracing()],
8 | tracesSampleRate: 1.0,
9 | });
--------------------------------------------------------------------------------
/apps/portal/app/services/helpers/videoDuration.ts:
--------------------------------------------------------------------------------
1 | const videoDurationConverter = (length: number) => {
2 | const date = new Date(0);
3 | date.setSeconds(length);
4 | let durationMain = date.toISOString().substr(11, 8);
5 | durationMain = durationMain.substr(3, durationMain.length);
6 |
7 | return durationMain;
8 | };
9 |
10 | export { videoDurationConverter };
11 |
--------------------------------------------------------------------------------
/apps/portal/public/contentImages/recordingWindowIcons/button-pause-grey.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "nrwl.angular-console",
4 | "deepscan.vscode-deepscan",
5 | "folke.vscode-monorepo-workspace",
6 | "seatonjiang.gitmoji-vscode",
7 | "dbaeumer.vscode-eslint",
8 | "jondot.vscode-hygen",
9 | "esbenp.prettier-vscode",
10 | "firsttris.vscode-jest-runner",
11 | "vscode-icons-team.vscode-icons"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/pipes/parse-on-false.pipe.ts:
--------------------------------------------------------------------------------
1 | import { Injectable, PipeTransform } from '@nestjs/common';
2 |
3 | @Injectable()
4 | export class ParseOnFalse implements PipeTransform {
5 | transform(value: string): string | false {
6 | if (value === 'false') {
7 | return false;
8 | }
9 | return value;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/apps/extensions/.env.sample:
--------------------------------------------------------------------------------
1 | EXTENSION_NAME=Rec [DEV]
2 | EXTENTION_ID=gneepehahiglangakfifnpdlppijdkck
3 | GOOGLE_CLIENT_ID=
4 | EXTENSION_REDIRECT_URL=
5 | REBRANDLY_API_KEY=
6 |
7 | API_BASE_URL=http://localhost:3000
8 | WEBSITE_URL=http://localhost:4200
9 | STATIC_FILES_URL=http://localhost:3000
10 |
11 | SENTRY_DSN=
12 |
13 | API_VIDEO_SERVICE_HOST=sandbox.api.video
14 |
--------------------------------------------------------------------------------
/apps/extensions/images/contentImages/recordingWindowIcons/button-pause-grey.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/sidebar/sidebar-myimages.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/toolsPanel/toolsOptions/interface/ITextOptions.ts:
--------------------------------------------------------------------------------
1 | export interface ITextOptions {
2 | fontFamily: string;
3 | fontSize: number;
4 | fontStyle: string;
5 | fill: string;
6 | stroke: string;
7 | shadow: boolean;
8 | align: string;
9 | textDecoration: string;
10 | fontVariant: string;
11 | text:string
12 | }
13 |
--------------------------------------------------------------------------------
/storage.rules:
--------------------------------------------------------------------------------
1 | rules_version = '2';
2 |
3 | // Craft rules based on data in your Firestore database
4 | // allow write: if firestore.get(
5 | // /databases/(default)/documents/users/$(request.auth.uid)).data.isAdmin;
6 | service firebase.storage {
7 | match /b/{bucket}/o {
8 | match /{allPaths=**} {
9 | allow read, write: if false;
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/settings/icon-dropbox.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/services/helpers/videoDuration.ts:
--------------------------------------------------------------------------------
1 | const videoDurationConverter = (length: number) => {
2 | const date = new Date(0);
3 | date.setSeconds(length);
4 | let durationMain = date.toISOString().substr(11, 8);
5 | durationMain = durationMain.substr(3, durationMain.length);
6 |
7 | return durationMain;
8 | };
9 |
10 | export { videoDurationConverter };
11 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/toolsPanel/toolsOptions/interface/ITextOptions.ts:
--------------------------------------------------------------------------------
1 | export interface ITextOptions {
2 | fontFamily: string;
3 | fontSize: number;
4 | fontStyle: string;
5 | fill: string;
6 | stroke: string;
7 | shadow: boolean;
8 | align: string;
9 | textDecoration: string;
10 | fontVariant: string;
11 | text:string
12 | }
13 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/shared/modalComponents/ModalSaveChangesFooter.module.scss:
--------------------------------------------------------------------------------
1 | @import '@/content/utilities/partials/_colors.scss';
2 |
3 | .footerContainer {
4 | display: flex;
5 | justify-content: space-between;
6 | align-items: center;
7 | margin-top: 1.7rem;
8 |
9 | .cancelLink {
10 | color: $primary-violet;
11 | cursor: pointer;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/store/popup/index.ts:
--------------------------------------------------------------------------------
1 | import { combineReducers, createStore } from 'redux';
2 | import AuthReducer from '../auth/reducers/AuthReducer';
3 | import CommonReducer from './reducers/CommonReducer';
4 |
5 |
6 | export const mainReducer = combineReducers({
7 | common: CommonReducer,
8 | auth: AuthReducer,
9 | });
10 |
11 | export default createStore(mainReducer);
--------------------------------------------------------------------------------
/apps/portal/components/controls/AppButton2.module.scss:
--------------------------------------------------------------------------------
1 | @import 'pagesScss/partials/_colors.scss';
2 |
3 | .appButton2 {
4 | display: flex;
5 | align-items: center;
6 | justify-content: space-between;
7 | padding: 1rem;
8 | border: 2px solid $grey-light04;
9 | border-radius: 0.5rem;
10 | font-weight: bold;
11 | gap: 1rem;
12 | transition: all 0.1s ease-in-out;
13 | }
14 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/T(Fill).svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/files/update-image.dto.ts:
--------------------------------------------------------------------------------
1 | import { CanBe } from '../../../../utils/validator';
2 | import { IsImageFilename } from '../../validators/image-filename.validator';
3 |
4 | export class UpdateImageDto {
5 | @CanBe(undefined)
6 | @IsImageFilename()
7 | refName?: string;
8 |
9 | @CanBe(undefined)
10 | @IsImageFilename()
11 | location?: string;
12 | }
13 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/star.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/T(Fill).svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/PanelRoutesWrapper.tsx:
--------------------------------------------------------------------------------
1 | import useFetchWorkspacesData from '@/content/panel/hooks/useFetchWorkspacesData';
2 |
3 | // put here functionality that has to run wrapper on the whole project, but also needs router to work.
4 | const PanelRoutesWrapper = () => {
5 | useFetchWorkspacesData();
6 |
7 | return null;
8 | };
9 |
10 | export default PanelRoutesWrapper;
11 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/IMarkerComment.ts:
--------------------------------------------------------------------------------
1 | export interface IMarkerComment {
2 | id: string;
3 | markerId: string;
4 | content: string;
5 | timestamp: string | number;
6 | imageSrc: string;
7 | audioSrc?: string;
8 | videoSrc: string;
9 | audioDuration?: string;
10 | user: {
11 | id: string;
12 | photoUrl: string | null;
13 | displayName: string;
14 | };
15 | }
16 |
--------------------------------------------------------------------------------
/apps/portal/app/store/panel/panelUtils/utials.ts:
--------------------------------------------------------------------------------
1 | import IExplorerData from 'app/interfaces/IExplorerData';
2 | import { IUser } from 'app/interfaces/IUserData';
3 | import { IWorkspace } from '../../../interfaces/IWorkspace';
4 |
5 | export const isRootFolder = (
6 | user: IUser,
7 | data: IExplorerData | IWorkspace,
8 | ): boolean => {
9 | return !user || !data?.currentFolder;
10 | };
11 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/toolsPanel/toolsOptions/toolsOptions.module.scss:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | align-items: center;
4 | }
5 |
6 | .selector {
7 | margin-right: 0.5rem;
8 | }
9 |
10 | .font {
11 | font-size: 0.75rem;
12 | line-height: 1rem;
13 | }
14 |
15 | .inputContainer {
16 | margin-right: 0.25rem;
17 | width: 7rem;
18 | }
--------------------------------------------------------------------------------
/apps/portal/public/images/sendemail.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/portal/public/whiteboards/ContextMenuItems/newtab.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/star.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/IStreamState.ts:
--------------------------------------------------------------------------------
1 | import { PlaybackStatusEnum } from 'app/enums/StreamingServicesEnums';
2 | import { VideoServicesEnum } from 'app/enums/StreamingServicesEnums';
3 |
4 | export interface IStreamState {
5 | service: VideoServicesEnum;
6 | assetId: string;
7 | playbackStatus: PlaybackStatusEnum;
8 | downloadStatus: PlaybackStatusEnum;
9 | downloadUrl: string;
10 | }
11 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/toolsPanel/PanelSplitter.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const PanelSplitter: React.FC = () => {
4 | return (
5 |
13 | );
14 | };
15 |
16 | export default PanelSplitter;
17 |
--------------------------------------------------------------------------------
/apps/portal/pages/404.tsx:
--------------------------------------------------------------------------------
1 | import AppSpinner from 'components/containers/appSpinner/AppSpinner';
2 | import { useEffect } from 'react';
3 | import { useRouter } from 'next/router';
4 |
5 | function Custom404() {
6 | const router = useRouter();
7 |
8 | useEffect(() => {
9 | router.push('/');
10 | }, []);
11 | return ;
12 | }
13 |
14 | export default Custom404;
15 |
--------------------------------------------------------------------------------
/apps/api/src/common/pipeline/handler.interface.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Wrap whatever context you need (token, DTO, metadata…).
3 | */
4 | export interface IRequestCtx {
5 | context: TCtx;
6 | }
7 |
8 | /** Handlers implement canHandle/process on that context. */
9 | export interface IHandler {
10 | canHandle(ctx: TCtx): Promise;
11 | process(ctx: TCtx): Promise;
12 | }
13 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/members/get-populated-members.dto.ts:
--------------------------------------------------------------------------------
1 | import { Transform } from 'class-transformer';
2 | import { IsNumberString } from 'class-validator';
3 | import { CanBe } from '../../../../utils/validator';
4 |
5 | export class GetPopulatedMembersDto {
6 | @CanBe(undefined)
7 | @IsNumberString()
8 | @Transform(({ value }) => parseInt(value, 10))
9 | limit?: number;
10 | }
11 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/common/sendemail.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/portal/public/common/collection-fill.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/portal/public/settings/account_box.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/api/src/module/auth/services/password-reset/interfaces/password-request.interface.ts:
--------------------------------------------------------------------------------
1 | import { AuthState } from "../../../interfaces/auth.interface";
2 | import { AuthContext } from "../../auth.context";
3 |
4 | export interface PasswordRequest {
5 | message: string;
6 | }
7 |
8 | export type Email = string;
9 |
10 | export type PasswordRequestState = AuthState, Email>;
11 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/files/delete-image.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsId, IsOptionalId } from '../../validators/id.validator';
2 | import { IsImageFilename } from '../../validators/image-filename.validator';
3 |
4 | export class DeleteImageDto {
5 | @IsImageFilename()
6 | refName: string;
7 |
8 | @IsId()
9 | imageId: string;
10 |
11 | @IsOptionalId()
12 | folderId: string | false = false;
13 | }
14 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/store/panel/panelUtils/index.ts:
--------------------------------------------------------------------------------
1 | import IExplorerData from '@/app/interfaces/IExplorerData';
2 | import { IUser } from '@/app/interfaces/IUserData';
3 | import { IWorkspace } from '@/app/interfaces/IWorkspace';
4 |
5 | export const isRootFolder = (
6 | user: IUser,
7 | data: IExplorerData | IWorkspace | null,
8 | ): boolean => {
9 | return !user || !data?.currentFolder;
10 | };
11 |
--------------------------------------------------------------------------------
/apps/portal/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | displayName: 'portal',
3 | preset: '../../jest.preset.js',
4 | transform: {
5 | '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': '@nrwl/react/plugins/jest',
6 | '^.+\\.[tj]sx?$': ['babel-jest', { presets: ['@nrwl/next/babel'] }],
7 | },
8 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
9 | coverageDirectory: '../../coverage/apps/portal',
10 | };
11 |
--------------------------------------------------------------------------------
/apps/api/src/module/auth/decorators/user.decorator.ts:
--------------------------------------------------------------------------------
1 | import { createParamDecorator, ExecutionContext } from '@nestjs/common';
2 | import { IRequestUser } from '../guards/auth.guard';
3 |
4 | export const User = createParamDecorator(
5 | async (data: unknown, context: ExecutionContext) => {
6 | const req = context.switchToHttp().getRequest<{ user?: IRequestUser }>();
7 | return req.user;
8 | },
9 | );
10 |
--------------------------------------------------------------------------------
/apps/api/src/module/log/view.models/LogEventEnum.ts:
--------------------------------------------------------------------------------
1 | export enum LogEventEnum {
2 | FirstLaunch = 'FirstLaunch',
3 | SingleLaunch = 'SingleLaunch',
4 | Reinstall = 'Reinstall',
5 | AppWasDeleted = 'AppWasDeleted',
6 | UserEnterEmail = 'UserEnterEmail',
7 | UserEnterPassword = 'UserEnterPassword',
8 | UserSignedUpViaGoogle = 'UserSignedUpViaGoogle',
9 | UserResetPassword = 'UserResetPassword',
10 | }
11 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/settings/account_box.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/images/popup/capture/Tab_inactive.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/app/store/auth/actions/actionTypes.ts:
--------------------------------------------------------------------------------
1 | export const SET_USER = 'SET_USER';
2 | export const SET_DRIVE_USER = 'SET_DRIVE_USER';
3 | export const REMOVE_SLACK_USER = 'REMOVE_SLACK_USER';
4 | export const REMOVE_DROP_BOX_USER = 'REMOVE_DROP_BOX_USER';
5 | export const REMOVE_JIRA_USER = 'REMOVE_JIRA_USER';
6 | export const REMOVE_TRELLO_USER = 'REMOVE_TRELLO_USER';
7 | export const SET_TRELLO_USER = 'SET_TRELLO_USER';
8 |
--------------------------------------------------------------------------------
/apps/portal/public/common/workspace-icon.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/Interfaces/Invites.ts:
--------------------------------------------------------------------------------
1 | export interface IWorkspaceInvite {
2 | id: string;
3 | inviterId: string;
4 | workspaceId: string;
5 | expires?: number;
6 | }
7 |
8 | export interface IWorkspaceInviteData {
9 | id: string;
10 | workspaceInviter: string;
11 | workspaceName: string;
12 | workspaceMembers: string[]; // todo member data interface - (photoURL, displayName, email)
13 | }
14 |
--------------------------------------------------------------------------------
/apps/extensions/images/popup/navigation/profile.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/store/auth/actions/actionTypes.ts:
--------------------------------------------------------------------------------
1 | export const SET_USER = 'SET_USER';
2 | export const SET_DRIVE_USER = 'SET_DRIVE_USER';
3 | export const REMOVE_SLACK_USER = 'REMOVE_SLACK_USER';
4 | export const REMOVE_DROP_BOX_USER = 'REMOVE_DROP_BOX_USER';
5 | export const REMOVE_JIRA_USER = 'REMOVE_JIRA_USER';
6 | export const REMOVE_TRELLO_USER = 'REMOVE_TRELLO_USER';
7 | export const SET_TRELLO_USER = 'SET_TRELLO_USER';
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/tools_interfaces/IConversationOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IConversationOptions {
2 | filename: string;
3 | category: string;
4 | data: string;
5 | fillColor: string;
6 | strokeColor: string;
7 | strokeWidth: number;
8 | textColor: string;
9 | textStrokeColor: string;
10 | textStrokeWidth: number;
11 | textSize: number;
12 | fontFamily: string;
13 | dash: number[];
14 | }
15 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/common/workspace-icon.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_videoEditorScreen/chapters/VideoChapterContentInput/VideoChapterContentInput.module.scss:
--------------------------------------------------------------------------------
1 | .ContentInput {
2 | border: 1px solid rgb(150, 150, 150) !important;
3 | margin-right: 0.5rem;
4 | height: 51px !important;
5 | width: 165px;
6 | }
7 |
8 | .disabled {
9 | color: black !important;
10 | background-color: transparent !important;
11 | cursor: default !important;
12 | }
13 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/align-center.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/align-right.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/apps/portal/public/new-design-v2/single-video-buttons/like-thumb.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/api/src/module/auth/services/tokens/index.ts:
--------------------------------------------------------------------------------
1 | export * from './interfaces/token.interface';
2 | export * from './refresh/firebase-refresh.strategy';
3 | export * from './refresh/unified-refresh.strategy';
4 | export * from './refresh/validations/firebase-validate.strategy';
5 | export * from './token-storage.service';
6 | export * from './token-strategy.chain';
7 | export * from './token.service';
8 | export * from './user.factory';
9 |
--------------------------------------------------------------------------------
/apps/api/src/module/image/view.models/image.view.model.ts:
--------------------------------------------------------------------------------
1 | import {
2 | DbCommentIntF,
3 | LikeIntF,
4 | ResponseComment,
5 | } from '../../../services/utils/models/shared.model';
6 |
7 | export class ImageViewModel {
8 | link: string;
9 | created: string;
10 | title: string;
11 | commentsLength?: number;
12 | comments?: DbCommentIntF[] | ResponseComment[];
13 | likes: LikeIntF[];
14 | views: number;
15 | }
16 |
--------------------------------------------------------------------------------
/apps/extensions/images/new-design-v2/single-video-buttons/like-thumb.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/images/tools/ZoomOut.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/align-center.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/align-right.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/components/controls/AppButton2/AppButton2.module.scss:
--------------------------------------------------------------------------------
1 | @import '@/content/utilities/partials/_colors.scss';
2 |
3 | .appButton2 {
4 | display: flex;
5 | align-items: center;
6 | justify-content: space-between;
7 | padding: 1rem !important;
8 | border: 2px solid $grey-light04;
9 | border-radius: 0.5rem;
10 | font-weight: bold;
11 | gap: 1rem;
12 | transition: all 0.1s ease-in-out;
13 | }
14 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/components/containers/dashboardLayout/DashboardLayout.module.scss:
--------------------------------------------------------------------------------
1 | .dashboardLayoutWrapper {
2 | max-height: 100vh;
3 | height: 100vh;
4 | display: flex;
5 | justify-content: center;
6 | align-items: center;
7 | background-color: #f5f4f7;
8 | }
9 |
10 | @media screen and (max-width: 767px) {
11 | .dashboardLayoutWrapper {
12 | max-height: unset;
13 | height: auto;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/ZoomOut.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/whiteboard-tools-panel/rect.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/apps/portal/public/common/check.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/components/containers/dashboardLayout/DashboardLayout.module.scss:
--------------------------------------------------------------------------------
1 | .dashboardLayoutWrapper {
2 | // minHeight: '100vh',
3 | max-height: 100vh;
4 | height: 100vh;
5 | display: flex;
6 | justify-content: center;
7 | align-items: center;
8 | background-color: #f5f4f7;
9 | }
10 |
11 | @media screen and (max-width: 767px) {
12 | .dashboardLayoutWrapper {
13 | max-height: unset;
14 | height: auto;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/apps/portal/public/common/more_horiz_black.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/api/src/module/auth/dto/send-email-verification.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsEmail, IsNotEmpty } from 'class-validator';
2 | import { ApiProperty } from '@nestjs/swagger';
3 |
4 | export class GenerateEmailVerificationLinkDto {
5 | @ApiProperty({
6 | description: 'Email address to generate verification link for',
7 | example: 'user@example.com',
8 | required: true,
9 | })
10 | @IsEmail()
11 | @IsNotEmpty()
12 | email: string;
13 | }
14 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/common/check.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/toolsPanel/PanelSplitter.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const PanelSplitter: React.FC = () => {
4 | return (
5 |
11 | );
12 | };
13 |
14 | export default PanelSplitter;
15 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/utilities/scripts/sendBadgeTextMessagePort.ts:
--------------------------------------------------------------------------------
1 | import { AppMessagesEnum } from '@/app/messagess';
2 |
3 |
4 | const sendBadgeTextMessagePort = async (text: string) => {
5 | const port = chrome.runtime.connect();
6 |
7 | port.postMessage({
8 | action: AppMessagesEnum.setBadgeTextPort,
9 | payload: { text },
10 | });
11 |
12 | port.disconnect();
13 | };
14 |
15 | export default sendBadgeTextMessagePort;
16 |
--------------------------------------------------------------------------------
/apps/portal/app/enums/itemActionsEnum.ts:
--------------------------------------------------------------------------------
1 | export enum ItemActionsEnum {
2 | share = 'share',
3 | shareSlack = 'shareSlack',
4 | shareWhatsApp = 'shareWhatsApp',
5 | download = 'download',
6 | move = 'move',
7 | delete = 'delete',
8 | createJiraIssue = 'createJiraIssue',
9 | createTrelloIssue = 'createTrelloIssue',
10 | moveToWorkspace = 'moveToWorkspace',
11 | editPermissions = 'editPermissions',
12 | restore = 'restore',
13 | }
14 |
--------------------------------------------------------------------------------
/apps/portal/public/common/collection.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/api/src/module/video/view.models/video.view.model.ts:
--------------------------------------------------------------------------------
1 | import {
2 | DbCommentIntF,
3 | LikeIntF,
4 | ResponseComment,
5 | } from '../../../services/utils/models/shared.model';
6 |
7 | export class VideoViewModel {
8 | link: string;
9 | created: string;
10 | title: string;
11 | commentsLength?: number;
12 | email?: string;
13 | comments?: DbCommentIntF[] | ResponseComment[];
14 | likes?: LikeIntF[];
15 | views?: number;
16 | }
17 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/common/more_horiz_black.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/@types/index.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.svg' {
2 | import React = require('react');
3 | export const ReactComponent: React.SFC>;
4 | const src: string;
5 | export default src;
6 | }
7 |
8 | declare module '*.module.scss' {
9 | const styles: {
10 | [className: string]: string;
11 | };
12 | export = styles;
13 | }
14 |
15 | declare module '@emoji-mart/react';
16 | declare module 'howler';
17 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/toolsPanel/toolsOptions/interface/IMarkerComment.ts:
--------------------------------------------------------------------------------
1 | export interface IMarkerComment {
2 | id: string;
3 | markerId: string;
4 | content: string;
5 | timestamp: string | number;
6 | imageSrc: string;
7 | audioSrc: string;
8 | videoSrc: string;
9 | audioDuration: string;
10 | user: {
11 | id: string;
12 | photoUrl: string | null;
13 | displayName: string;
14 | };
15 | }
16 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_whiteboardScreen/whiteboardToolbar/customToolBtns/SubPanel.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | interface IToolSubPanelProp {
4 | children?: React.ReactNode;
5 | }
6 |
7 | const SubPanel: React.FC = ({ children }) => {
8 | return (
9 |
10 | {children}
11 |
12 | );
13 | };
14 |
15 | export default SubPanel;
16 |
--------------------------------------------------------------------------------
/apps/portal/public/settings/success.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/store/panel/index.ts:
--------------------------------------------------------------------------------
1 | import { combineReducers, createStore } from 'redux';
2 | import AuthReducer from '../auth/reducers/AuthReducer';
3 | import DriveReducer from '../drive/reducers/DriveReducer';
4 | import PanelReducer from './reducers/PanelReducer';
5 |
6 | export const mainReducer = combineReducers({
7 | auth: AuthReducer,
8 | panel: PanelReducer,
9 | drive: DriveReducer,
10 | });
11 |
12 | export default createStore(mainReducer);
13 |
--------------------------------------------------------------------------------
/turbo.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://turbo.build/schema.json",
3 | "ui": "stream",
4 | "tasks": {
5 | "build": {
6 | "dependsOn": [
7 | "^build"
8 | ],
9 | "outputs": [
10 | ".next/**",
11 | "dist/**",
12 | "!.next/cache/**"
13 | ]
14 | },
15 | "check-types": {
16 | "dependsOn": [
17 | "^check-types"
18 | ]
19 | },
20 | "dev": {
21 | "persistent": true,
22 | "cache": false
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/common/collection.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/enums/itemActionsEnum.ts:
--------------------------------------------------------------------------------
1 | export enum ItemActionsEnum {
2 | shareSlack = 'shareSlack',
3 | shareWhatsApp = 'shareWhatsApp',
4 | share = 'share',
5 | download = 'download',
6 | move = 'move',
7 | delete = 'delete',
8 | createJiraIssue = 'createJiraIssue',
9 | createTrelloIssue = 'createTrelloIssue',
10 | moveToWorkspace = 'moveToWorkspace',
11 | editPermissions = 'editPermissions',
12 | restore = 'restore'
13 | }
14 |
--------------------------------------------------------------------------------
/apps/portal/public/settings/icon-wallet.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/folders/create-folder.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsNumber, IsString, MaxLength } from 'class-validator';
2 | import { IsOptionalId } from '../../validators/id.validator';
3 |
4 | export class CreateFolderDto {
5 | @IsString()
6 | @MaxLength(256)
7 | name: string;
8 |
9 | @IsString()
10 | color: string;
11 |
12 | @IsNumber()
13 | nestLevel: number;
14 |
15 | @IsOptionalId()
16 | parentId: string | false = false;
17 | }
18 |
--------------------------------------------------------------------------------
/apps/extensions/images/tools/success-tick.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/editorHelpers/alphabet.ts:
--------------------------------------------------------------------------------
1 | export const alphabet = [
2 | 'a',
3 | 'b',
4 | 'c',
5 | 'd',
6 | 'e',
7 | 'f',
8 | 'g',
9 | 'h',
10 | 'i',
11 | 'j',
12 | 'k',
13 | 'l',
14 | 'm',
15 | 'n',
16 | 'o',
17 | 'p',
18 | 'q',
19 | 'r',
20 | 's',
21 | 't',
22 | 'u',
23 | 'v',
24 | 'w',
25 | 'x',
26 | 'y',
27 | 'z',
28 | ];
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/toolsPanel/toolsOptions/interface/IConversationOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IConversationOptions {
2 | filename: string;
3 | category: string;
4 | data: string;
5 | fillColor: string;
6 | strokeColor: string;
7 | strokeWidth: number;
8 | textColor: string;
9 | textStrokeColor: string;
10 | textStrokeWidth: number;
11 | textSize: number;
12 | fontFamily: string;
13 | dash: number[];
14 | }
15 |
--------------------------------------------------------------------------------
/apps/portal/app/services/helpers/getCookies.ts:
--------------------------------------------------------------------------------
1 | import cookie from 'js-cookie';
2 | import { ITokens } from 'app/interfaces/IUserData';
3 |
4 | export const getCookies = (): ITokens => {
5 | const idToken = cookie.get('idToken');
6 | const refreshToken = cookie.get('refreshToken');
7 |
8 | return { idToken, refreshToken };
9 | };
10 |
11 | export const removeCookies = () => {
12 | cookie.remove('idToken');
13 | cookie.remove('refreshToken');
14 | };
15 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/editorHelpers/alphabet.ts:
--------------------------------------------------------------------------------
1 | export const alphabet = [
2 | 'a',
3 | 'b',
4 | 'c',
5 | 'd',
6 | 'e',
7 | 'f',
8 | 'g',
9 | 'h',
10 | 'i',
11 | 'j',
12 | 'k',
13 | 'l',
14 | 'm',
15 | 'n',
16 | 'o',
17 | 'p',
18 | 'q',
19 | 'r',
20 | 's',
21 | 't',
22 | 'u',
23 | 'v',
24 | 'w',
25 | 'x',
26 | 'y',
27 | 'z',
28 | ];
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/toolsPanel/toolsOptions/interface/IConversationOptions.ts:
--------------------------------------------------------------------------------
1 | export interface IConversationOptions {
2 | filename: string;
3 | category: string;
4 | data: string;
5 | fillColor: string;
6 | strokeColor: string;
7 | strokeWidth: number;
8 | textColor: string;
9 | textStrokeColor: string;
10 | textStrokeWidth: number;
11 | textSize: number;
12 | fontFamily: string;
13 | dash: number[];
14 | }
15 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/settings/icon-wallet.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/api/src/module/auth/services/register/interfaces/register-state.interface.ts:
--------------------------------------------------------------------------------
1 | import { AuthState, TokenContainer } from "../../../interfaces/auth.interface";
2 | import { AuthContext } from "../../auth.context";
3 | import { IRegisterProps } from "../../authentication.service";
4 | import { IUser } from '../../../../../interfaces/IUser';
5 |
6 | export type Register = TokenContainer;
7 |
8 | export type RegisterState = AuthState, IRegisterProps>;
9 |
--------------------------------------------------------------------------------
/apps/portal/public/settings/icon-passsword.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_imagesScreen/pages/myVideos/VideoItem/PlayButton.tsx:
--------------------------------------------------------------------------------
1 | import { FC } from 'react';
2 | import AppSvg from 'components/elements/AppSvg';
3 |
4 | const PlayButton: FC = () => (
5 |
14 | );
15 |
16 | export default PlayButton;
17 |
--------------------------------------------------------------------------------
/apps/portal/hooks/useInfiniteScroll.ts:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 |
3 | const ITEMS_PER_PAGE = 9;
4 |
5 | const useInfiniteScroll = (toLoad?: number) => {
6 | const [itemsToLoad, setItemsToLoad] = useState(toLoad ?? ITEMS_PER_PAGE);
7 |
8 | const loadMoreItems = () => {
9 | setItemsToLoad((prevNumber) => prevNumber + (toLoad ?? ITEMS_PER_PAGE));
10 | };
11 |
12 | return { itemsToLoad, loadMoreItems };
13 | };
14 |
15 | export default useInfiniteScroll;
16 |
--------------------------------------------------------------------------------
/apps/api/src/app.controller.ts:
--------------------------------------------------------------------------------
1 | import { Controller, Get, Render } from '@nestjs/common';
2 | import { AppService } from './app.service';
3 |
4 | @Controller()
5 | export class AppController {
6 | constructor(private readonly appService: AppService) {}
7 |
8 | @Get('hello')
9 | async getHello(): Promise {
10 | return await this.appService.getHello();
11 | }
12 |
13 | @Get('404')
14 | @Render('404')
15 | async notFound() {
16 | return;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/settings/icon-passsword.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/app/interfaces/Folders.ts:
--------------------------------------------------------------------------------
1 | import { ItemTypeEnum } from 'app/enums/itemTypeEnum';
2 |
3 | export interface SingleFavFolder {
4 | name: string;
5 | id: string;
6 | type: ItemTypeEnum;
7 | workspaceId?: string;
8 | }
9 |
10 | export interface IFavoriteFolders {
11 | images: { [id: string]: SingleFavFolder };
12 | videos: { [id: string]: SingleFavFolder };
13 | workspaces: {
14 | [workspaceId: string]: { [id: string]: SingleFavFolder };
15 | };
16 | }
17 |
--------------------------------------------------------------------------------
/apps/portal/hooks/useEnterKeyPress.ts:
--------------------------------------------------------------------------------
1 | import { useEffect } from 'react';
2 |
3 | const useEnterKeyPress = (callback: () => void) => {
4 | useEffect(() => {
5 | const keyPress = (e: KeyboardEvent) => {
6 | if (e.code === 'Enter') {
7 | callback();
8 | }
9 | };
10 |
11 | window.addEventListener('keydown', keyPress);
12 | return () => window.removeEventListener('keydown', keyPress);
13 | });
14 | };
15 |
16 | export default useEnterKeyPress;
17 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/components/containers/dashboardLayout/elements/Slidedown/Slidedown.module.scss:
--------------------------------------------------------------------------------
1 | .react-slidedown {
2 | height: 0;
3 | transition-property: none;
4 | transition-duration: 0.4s;
5 | transition-timing-function: ease-in-out;
6 | }
7 |
8 | .transitioning {
9 | overflow-y: hidden;
10 | transition-property: none;
11 | transition-duration: 0.4s;
12 | transition-timing-function: ease-in-out;
13 | }
14 |
15 | .closed {
16 | display: none;
17 | }
18 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/toolsPanel/ToolsRow.tsx:
--------------------------------------------------------------------------------
1 | import classNames from 'classnames';
2 | import React from 'react';
3 |
4 |
5 | interface IToolsRowProps {
6 | className?: string;
7 | }
8 |
9 | const ToolsRow: React.FC = ({ className, children }) => {
10 | return (
11 |
12 | {children}
13 |
14 | );
15 | };
16 |
17 | export default ToolsRow;
18 |
--------------------------------------------------------------------------------
/apps/portal/public/item/options.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/apps/portal/public/sidebar/gallery-image.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../../dist/out-tsc",
5 | "module": "commonjs",
6 | "types": ["jest", "node"],
7 | "jsx": "react"
8 | },
9 | "include": [
10 | "**/*.test.ts",
11 | "**/*.spec.ts",
12 | "**/*.test.tsx",
13 | "**/*.spec.tsx",
14 | "**/*.test.js",
15 | "**/*.spec.js",
16 | "**/*.test.jsx",
17 | "**/*.spec.jsx",
18 | "**/*.d.ts"
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/apps/api/src/module/auth/services/login/interfaces/login-state.interface.ts:
--------------------------------------------------------------------------------
1 | import { ILoginProps } from "../../authentication.service";
2 | import { AuthState, TokenContainer } from '../../../interfaces/auth.interface';
3 | import { AuthContext } from "../../auth.context";
4 | import { IUser } from '../../../../../interfaces/IUser';
5 |
6 |
7 | export type Login = TokenContainer;
8 |
9 | export type LoginState = AuthState, ILoginProps>;
10 |
--------------------------------------------------------------------------------
/apps/portal/.env.sample:
--------------------------------------------------------------------------------
1 | NEXT_PUBLIC_EXTENSION_NAME=Rec
2 | NEXT_PUBLIC_EXTENSION_ID=gneepehahiglangakfifnpdlppijdkck
3 | NEXT_PUBLIC_GOOGLE_CLIENT_ID=
4 | NEXT_PUBLIC_EXTENSION_REDIRECT_URL=
5 | NEXT_PUBLIC_REBRANDLY_API_KEY=
6 |
7 | NEXT_PUBLIC_API_BASE_URL=http://localhost:3000
8 | NEXT_PUBLIC_WEBSITE_URL=http://localhost:4200
9 | NEXT_PUBLIC_STATIC_FILES_URL=http://localhost:3000
10 |
11 | NEXT_PUBLIC_DESKTOP_PROTOCOL=ever-rec:
12 |
13 | NEXT_PUBLIC_SENTRY_DSN=
14 | SENTRY_ORG=ever-co
15 |
--------------------------------------------------------------------------------
/apps/portal/public/settings/trello.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/portal/public/whiteboards/check.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/api/src/module/video-services/mux/mux.module.ts:
--------------------------------------------------------------------------------
1 | import { Module } from '@nestjs/common';
2 | import { HttpModule } from 'nestjs-http-promise';
3 | import { AuthModule } from '../../auth/auth.module';
4 | import { MuxController } from './mux.controller';
5 | import { MuxService } from './mux.service';
6 |
7 | @Module({
8 | imports: [HttpModule, AuthModule],
9 | controllers: [MuxController],
10 | providers: [MuxService],
11 | exports: [MuxService],
12 | })
13 | export class MuxModule {}
14 |
--------------------------------------------------------------------------------
/apps/extensions/images/logo/trello-logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/common/dropbox-icon-dark.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/item/options.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/sidebar/gallery-image.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/overlay/components/videoCamera/video-camera.scss:
--------------------------------------------------------------------------------
1 | .rec {
2 | .video-container-main {
3 | width: 175px;
4 |
5 | .video-container {
6 | position: absolute;
7 | top: 20px;
8 | left: 105px;
9 | right: 0;
10 | bottom: 0;
11 | height: 175px;
12 | width: 175px;
13 | border-radius: 999px;
14 | transform: translateX(-50%);
15 | background-color: #3f4049;
16 | z-index: 2147483647;
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/myVideos/PlayButton/PlayButton.tsx:
--------------------------------------------------------------------------------
1 | import { FC } from 'react';
2 | import AppSvg from '@/content/components/elements/AppSvg';
3 |
4 | const PlayButton: FC = () => (
5 |
14 | );
15 |
16 | export default PlayButton;
17 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/workspace/MoveToWorkspaceModal/MoveToWorkspaceModal.module.scss:
--------------------------------------------------------------------------------
1 | .workspaceItem {
2 | background: #b8b1f8;
3 | padding: 10px;
4 | padding-left: 20px;
5 | color: black;
6 | border-radius: 5px;
7 | cursor: pointer;
8 | border: 1px solid #5b4dbe;
9 | transition: all 0.5s ease;
10 | margin-bottom: 10px;
11 |
12 | &.active, &:hover{
13 | transition: all 0.5s ease;
14 | color: white;
15 | background: #5b4dbe;
16 | }
17 | }
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_imagesScreen/pages/myVideos/VideoItem/ThumbnailSkeletonLoader.tsx:
--------------------------------------------------------------------------------
1 | import styles from './ThumbnailSkeletonLoader.module.scss';
2 |
3 | const SkeletonLoader = ({
4 | width,
5 | height,
6 | }: {
7 | width?: number;
8 | height?: number;
9 | }) => (
10 |
17 | );
18 |
19 | export default SkeletonLoader;
20 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_imagesScreen/pages/workspace/MoveToWorkspaceModal/MoveToWorkspaceModal.module.scss:
--------------------------------------------------------------------------------
1 | .workspaceItem {
2 | background: #b8b1f8;
3 | padding: 10px;
4 | padding-left: 20px;
5 | color: black;
6 | border-radius: 5px;
7 | cursor: pointer;
8 | border: 1px solid #5b4dbe;
9 | transition: all 0.5s ease;
10 | margin-bottom: 10px;
11 |
12 | &.active, &:hover{
13 | transition: all 0.5s ease;
14 | color: white;
15 | background: #5b4dbe;
16 | }
17 | }
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_videoEditorScreen/ItemTitleAuthor/ItemTitleAuthor.module.scss:
--------------------------------------------------------------------------------
1 | @use 'pagesScss/partials/_dotSeparator.scss';
2 |
3 | .itemAuthor {
4 | display: flex;
5 | flex-direction: column;
6 | gap: 1rem;
7 |
8 | h3 {
9 | font-size: 1.3rem;
10 | font-weight: 600;
11 | }
12 | }
13 |
14 | .itemAuthorDetails {
15 | display: flex;
16 | gap: 0.5rem;
17 |
18 | img {
19 | width: 25px;
20 | height: 25px;
21 | border-radius: 100%;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/settings/icon-trello.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/videoEditorScreen/chapters/VideoChapterCaveatPopover/VideoChapterCaveatPopover.module.scss:
--------------------------------------------------------------------------------
1 | .Caveats {
2 | padding: 1rem;
3 | border-radius: 1rem;
4 |
5 | h3 {
6 | font-weight: 600;
7 | margin-bottom: 0.5rem;
8 | }
9 |
10 | ul {
11 | list-style-type: disc;
12 | margin-left: 1rem;
13 | }
14 |
15 | p {
16 | max-width: 350px;
17 | }
18 | }
19 |
20 | .Paragraph {
21 | margin-top: 0.5rem;
22 | font-size: 0.9rem !important;
23 | }
24 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/recording/interfaces/IRecordingActionsProps.ts:
--------------------------------------------------------------------------------
1 | import { StatusMessages } from '@/content/utilities/hooks/useReactMediaRecorder';
2 |
3 | export default interface IRecordingActionsProps {
4 | recordingStatus: StatusMessages;
5 | microphoneMuted: boolean;
6 | microphoneEnabled: boolean;
7 | stopRecording: () => void;
8 | pauseRecording: () => void;
9 | resumeRecording: () => void;
10 | muteOrUnmute: (mute: boolean) => void;
11 | cancelRecording: () => void;
12 | }
13 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/utilities/hooks/useEnterKeyPress.ts:
--------------------------------------------------------------------------------
1 | import { useEffect } from 'react';
2 |
3 | const useEnterKeyPress = (callback: () => void) => {
4 | useEffect(() => {
5 | const keyPress = (e: KeyboardEvent) => {
6 | if (e.code === 'Enter') {
7 | callback();
8 | }
9 | };
10 |
11 | window.addEventListener('keydown', keyPress);
12 | return () => window.removeEventListener('keydown', keyPress);
13 | });
14 | };
15 |
16 | export default useEnterKeyPress;
17 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_videoEditorScreen/chapters/VideoChapterCaveatPopover/VideoChapterCaveatPopover.module.scss:
--------------------------------------------------------------------------------
1 | .Caveats {
2 | padding: 1rem;
3 | border-radius: 1rem;
4 |
5 | h3 {
6 | font-weight: 600;
7 | margin-bottom: 0.5rem;
8 | }
9 |
10 | ul {
11 | list-style-type: disc;
12 | margin-left: 1rem;
13 | }
14 |
15 | p {
16 | max-width: 350px;
17 | }
18 | }
19 |
20 | .Paragraph {
21 | margin-top: 0.5rem;
22 | font-size: 0.9rem !important;
23 | }
24 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/arrow.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/blackTT.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/whiteTT.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/public/images/icon-image.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/public/settings/dropbox.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/images/images/icon-image.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/images/logo/dropbox-logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/myVideos/Thumbnail/ThumbnailSkeletonLoader.tsx:
--------------------------------------------------------------------------------
1 | import * as styles from './ThumbnailSkeletonLoader.module.scss';
2 |
3 | const SkeletonLoader = ({
4 | width,
5 | height,
6 | }: {
7 | width?: number;
8 | height?: number;
9 | }) => (
10 |
17 | );
18 |
19 | export default SkeletonLoader;
20 |
--------------------------------------------------------------------------------
/apps/portal/public/common/trello.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/files/upload-image.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsString, MaxLength } from 'class-validator';
2 | import { IsImageFilename } from '../../validators/image-filename.validator';
3 | import { IsOptionalId } from '../../validators/id.validator';
4 |
5 | export class UploadImageDto {
6 | @IsString()
7 | @MaxLength(256)
8 | title: string;
9 |
10 | @IsImageFilename()
11 | @MaxLength(256)
12 | fullFileName: string;
13 |
14 | @IsOptionalId()
15 | folderId: string | false = false;
16 | }
17 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/files/upload-video.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsString, MaxLength } from 'class-validator';
2 | import { IsVideoFilename } from '../../validators/video-filename.validator';
3 | import { IsOptionalId } from '../../validators/id.validator';
4 |
5 | export class UploadVideoDto {
6 | @IsString()
7 | @MaxLength(256)
8 | title: string;
9 |
10 | @IsVideoFilename()
11 | @MaxLength(256)
12 | fullFileName: string;
13 |
14 | @IsOptionalId()
15 | folderId: string | false = false;
16 | }
17 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/pipes/validate-image-filename.pipe.ts:
--------------------------------------------------------------------------------
1 | import { BadRequestException, Injectable, PipeTransform } from '@nestjs/common';
2 | import { is_image_filename } from '../validators/image-filename.validator';
3 |
4 | @Injectable()
5 | export class ValidateImageFilename implements PipeTransform {
6 | transform(value: string): string {
7 | if (is_image_filename(value)) {
8 | return value;
9 | }
10 | throw new BadRequestException('Invalid image filename');
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/pipes/validate-video-filename.pipe.ts:
--------------------------------------------------------------------------------
1 | import { BadRequestException, Injectable, PipeTransform } from '@nestjs/common';
2 | import { is_video_filename } from '../validators/video-filename.validator';
3 |
4 | @Injectable()
5 | export class ValidateVideoFilename implements PipeTransform {
6 | transform(value: string): string {
7 | if (is_video_filename(value)) {
8 | return value;
9 | }
10 | throw new BadRequestException('Invalid video filename');
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/images/icon-image.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/arrow.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/blackTT.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/whiteTT.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/videoEditorScreen/ItemTitleAuthor/ItemTitleAuthor.module.scss:
--------------------------------------------------------------------------------
1 | @import '@/content/utilities/partials/_dotSeparator.scss';
2 |
3 | .itemAuthor {
4 | display: flex;
5 | flex-direction: column;
6 | gap: 1rem;
7 |
8 | h3 {
9 | font-size: 1.3rem;
10 | font-weight: 600;
11 | }
12 | }
13 |
14 | .itemAuthorDetails {
15 | display: flex;
16 | gap: 0.5rem;
17 |
18 | img {
19 | width: 25px;
20 | height: 25px;
21 | border-radius: 100%;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/popup/assets/emojitoolPanel.scss:
--------------------------------------------------------------------------------
1 | .rec {
2 | em-emoji-picker {
3 | --background-rgb: 'transparent';
4 | --border-radius: 5px;
5 | --category-icon-size: 18px;
6 | --color-border-hover: rgba(0, 0, 0, 0.1);
7 | --color-border: rgba(0, 0, 0, 0.05);
8 | --rgb-accent: 91, 77, 190;
9 | --rgb-background: 'transparent';
10 | --rgb-color: 0, 0, 0;
11 | --shadow: 'none';
12 | height: 50vh;
13 | min-height: 300px;
14 | max-height: 500px;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/common/google-drive-logo-dark.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/item/trello.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/extensions/images/popup/navigation/myimages.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/public/settings/icon-trello.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/portal/app/services/email.ts:
--------------------------------------------------------------------------------
1 | import { sendWorkspaceInviteLinkAPI } from './api/email';
2 | import { iDataResponseParser } from './helpers/iDataResponseParser';
3 |
4 | export const sendWorkspaceInviteLink = async (
5 | emails: string[],
6 | inviteId: string,
7 | inviterDisplayName: string,
8 | ) => {
9 | const response = await sendWorkspaceInviteLinkAPI(
10 | emails,
11 | inviteId,
12 | inviterDisplayName,
13 | );
14 | const data = iDataResponseParser(response, false);
15 | return data;
16 | };
17 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/blackT_2.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/whiteT_2.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/interfaces/Folders.ts:
--------------------------------------------------------------------------------
1 | import { ItemTypeEnum } from '@/content/panel/screens/imagesScreen/pages/shared/enums/itemTypeEnum';
2 |
3 | export interface SingleFavFolder {
4 | name: string;
5 | id: string;
6 | type: ItemTypeEnum;
7 | workspaceId?: string;
8 | }
9 |
10 | export interface IFavoriteFolders {
11 | images: { [id: string]: SingleFavFolder };
12 | videos: { [id: string]: SingleFavFolder };
13 | workspaces: {
14 | [workspaceId: string]: { [id: string]: SingleFavFolder };
15 | };
16 | }
17 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/services/email.ts:
--------------------------------------------------------------------------------
1 | import { sendWorkspaceInviteLinkAPI } from './api/email';
2 | import { iDataResponseParser } from './helpers/iDataResponseParser';
3 |
4 | export const sendWorkspaceInviteLink = async (
5 | emails: string[],
6 | inviteId: string,
7 | inviterDisplayName: string,
8 | ) => {
9 | const response = await sendWorkspaceInviteLinkAPI(
10 | emails,
11 | inviteId,
12 | inviterDisplayName,
13 | );
14 | const data = iDataResponseParser(response, false);
15 | return data;
16 | };
17 |
--------------------------------------------------------------------------------
/apps/portal/app/services/helpers/iDataResponseParser.ts:
--------------------------------------------------------------------------------
1 | import { IDataResponse, ResStatusEnum } from '../../interfaces/IApiResponse';
2 | import { errorHandler } from './errors';
3 |
4 | export const iDataResponseParser = (
5 | response: IDataResponse,
6 | showNotification = true,
7 | ): null | typeof response.data => {
8 | if (response.status === ResStatusEnum.error) {
9 | window && showNotification && errorHandler(response);
10 | return null;
11 | } else {
12 | return response.data as T;
13 | }
14 | };
15 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/toolsPanel/ToolBtn/customToolBtn/ShareToolBtn/shareToolBtn.module.scss:
--------------------------------------------------------------------------------
1 | .mainContainer {
2 | transition-property: all;
3 | transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
4 | transition-duration: 150ms;
5 | }
6 |
7 | .title {
8 | font-size: 1rem;
9 | line-height: 1.5rem;
10 | font-weight: 600;
11 | margin-bottom: 0.5rem;
12 | }
13 |
14 | .container {
15 | display: flex;
16 | align-items: center;
17 | margin-bottom: 1rem;
18 | width: 300px;
19 | }
--------------------------------------------------------------------------------
/apps/api/src/module/auth/interfaces/auth.interface.ts:
--------------------------------------------------------------------------------
1 | export interface AuthState {
2 | handle(context: T, payload: U): Promise;
3 | }
4 |
5 | export type AuthStateResult = T;
6 |
7 | export type TokenContainer = {
8 | accessToken: string;
9 | refreshToken: string;
10 | data: T;
11 | }
12 |
13 | export type AuthContextResult = Map>;
14 |
15 | export enum AuthProviderId {
16 | FIREBASE = 'firebase',
17 | GAUZY = 'gauzy'
18 | }
19 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/Interfaces/AddToDbProps.ts:
--------------------------------------------------------------------------------
1 | import { IChapter } from 'src/interfaces/IChapter';
2 | import { IStreamingDbData } from 'src/interfaces/IEditorVideo';
3 |
4 | export interface AddToDbProps {
5 | id: string;
6 | uid: string;
7 | title: string;
8 | refName: string;
9 | folderId: string | false;
10 | workspaceId: string;
11 | metadata: any;
12 | streamData?: IStreamingDbData;
13 | chapters?: IChapter[];
14 | chaptersEnabled?: boolean;
15 | stage?: any;
16 | originalImage?: string;
17 | }
18 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/blackT_2.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/whiteT_2.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/shared/hooks/useInfiniteScroll.ts:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 |
3 |
4 | const ITEMS_PER_PAGE = 9;
5 |
6 | const useInfiniteScroll = (toLoad?: number) => {
7 | const [itemsToLoad, setItemsToLoad] = useState(toLoad ?? ITEMS_PER_PAGE);
8 |
9 | const loadMoreItems = () => {
10 | setItemsToLoad((prevNumber) => prevNumber + (toLoad ?? ITEMS_PER_PAGE));
11 | };
12 |
13 | return { itemsToLoad, loadMoreItems };
14 | };
15 |
16 | export default useInfiniteScroll;
17 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/toolsPanel/ToolsRow.tsx:
--------------------------------------------------------------------------------
1 | import classNames from 'classnames';
2 | import React from 'react';
3 |
4 | interface IToolsRowProps {
5 | className?: string;
6 | children?: React.ReactNode;
7 | }
8 |
9 | const ToolsRow: React.FC = ({ className, children }) => {
10 | return (
11 |
12 | {children}
13 |
14 | );
15 | };
16 |
17 | export default ToolsRow;
18 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/recording/recording.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Rec
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_whiteboardScreen/whiteboardHelpers/commentsPopup/commentContentPopup.module.scss:
--------------------------------------------------------------------------------
1 | .whiteboardComment {
2 | width: 344px;
3 | height: 42px;
4 | background: #ffffff;
5 | border: 1px solid #f2f2f7;
6 | box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
7 | border-radius: 5px;
8 | padding: 6px;
9 | textarea {
10 | resize: none;
11 | &::placeholder {
12 | color: #d1d1d6;
13 | font-weight: 400;
14 | font-size: 13px;
15 | line-height: 16px;
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/apps/portal/public/assets/svg/tools-panel/heart.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/api/src/common/pipeline/pipeline.module.ts:
--------------------------------------------------------------------------------
1 | import { Module, Global } from '@nestjs/common';
2 | import { DiscoveryModule, Reflector } from '@nestjs/core';
3 | import { PipelineExplorer } from './pipeline.explorer';
4 | import { HandlerFactory } from './factory';
5 | import { PipelineService } from './pipeline.service';
6 |
7 | @Global()
8 | @Module({
9 | imports: [DiscoveryModule],
10 | providers: [Reflector, PipelineExplorer, HandlerFactory, PipelineService],
11 | exports: [PipelineService],
12 | })
13 | export class PipelineModule {}
14 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/folders/update-member-permissions.dto.ts:
--------------------------------------------------------------------------------
1 | import { Equals, IsBoolean, IsIn } from 'class-validator';
2 | import { IsId } from '../../validators/id.validator';
3 |
4 | export class UpdateFolderMemberPermissionsDto {
5 | @IsIn(['member', 'team'])
6 | permissionType: 'member' | 'team';
7 |
8 | @IsId()
9 | id: string; // user or team id
10 |
11 | @Equals('folders')
12 | permissionItemType: 'folders';
13 |
14 | @IsBoolean()
15 | write: boolean;
16 |
17 | @IsBoolean()
18 | read: boolean;
19 | }
20 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/imagesScreen/pages/myVideos/Thumbnail/Thumbnail.module.scss:
--------------------------------------------------------------------------------
1 | .thumbnail {
2 | display: flex;
3 | align-items: center;
4 | height: 176px;
5 | overflow: hidden;
6 |
7 | & > * {
8 | position: absolute;
9 | top: 0;
10 | left: 0;
11 | width: 100% !important;
12 | height: 100% !important;
13 | }
14 | }
15 |
16 | .paddingTop {
17 | padding-top: 49%;
18 | }
19 |
20 | .video {
21 | width: 100%;
22 | min-height: 100%;
23 | max-height: 100%;
24 | object-fit: cover;
25 | }
26 |
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_imagesScreen/pages/myVideos/VideoItem/Thumbnail.module.scss:
--------------------------------------------------------------------------------
1 | .thumbnail {
2 | display: flex;
3 | align-items: center;
4 | height: 176px;
5 | position: relative;
6 | overflow: hidden;
7 |
8 | & > * {
9 | position: absolute;
10 | top: 0;
11 | left: 0;
12 | width: 100%;
13 | height: 100%;
14 | }
15 | }
16 |
17 | .paddingTop {
18 | padding-top: 49%;
19 | }
20 |
21 | .video {
22 | width: 100%;
23 | min-height: 100%;
24 | max-height: 100%;
25 | object-fit: cover;
26 | }
27 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/validators/image-filename.validator.ts:
--------------------------------------------------------------------------------
1 | import { matches, Matches } from 'class-validator';
2 | import { ValidationOptions } from 'class-validator/types/decorator/ValidationOptions';
3 |
4 | export const IMAGE_FILENAME_REGEX = /^([A-Za-z0-9_-]*).(jpg|jpeg|png|gif)$/;
5 |
6 | export function is_image_filename(value: string) {
7 | return matches(value, IMAGE_FILENAME_REGEX);
8 | }
9 |
10 | export const IsImageFilename = (validationOptions?: ValidationOptions) =>
11 | Matches(IMAGE_FILENAME_REGEX, validationOptions);
12 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/validators/video-filename.validator.ts:
--------------------------------------------------------------------------------
1 | import { matches, Matches } from 'class-validator';
2 | import { ValidationOptions } from 'class-validator/types/decorator/ValidationOptions';
3 |
4 | export const VIDEO_FILENAME_REGEX = /^([A-Za-z0-9_-]*).(mp4|webm|mov|ogg)$/;
5 |
6 | export function is_video_filename(value: string) {
7 | return matches(value, VIDEO_FILENAME_REGEX);
8 | }
9 |
10 | export const IsVideoFilename = (validationOptions?: ValidationOptions) =>
11 | Matches(VIDEO_FILENAME_REGEX, validationOptions);
12 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/assests/svg/tools-panel/heart.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/components/controls/AppButtonSecond.module.scss:
--------------------------------------------------------------------------------
1 | @import 'pagesScss/partials/_colors.scss';
2 |
3 | .appButtonSecond {
4 | background-color: $primary-violet;
5 | padding: 0.7rem 1.5rem;
6 | border-radius: 1.5rem;
7 | color: white;
8 | cursor: pointer;
9 | }
10 |
11 | .appButtonDisabled {
12 | background-color: $grey-light03;
13 | }
14 |
15 | .appButtonDanger {
16 | background-color: $accessible-red;
17 | }
18 |
19 | .appButtonDanger.appButtonDisabled {
20 | background-color: $accessible-red;
21 | opacity: 0.5;
22 | }
23 |
--------------------------------------------------------------------------------
/apps/portal/public/common/more_horiz.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/portal/public/images/more_horiz.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/editorScreen/editorHelpers/pdf.ts:
--------------------------------------------------------------------------------
1 | import jsPDF from 'jspdf';
2 | import { Stage } from 'konva/lib/Stage';
3 |
4 |
5 | export const pdfFormation = (stage: Stage):Blob => {
6 | const width = stage.width();
7 | const height = stage.height();
8 | const orientation = width > height ? 'l' : 'p'
9 | const pdf = new jsPDF(orientation, 'px', [stage.width(), stage.height()]);
10 | pdf.addImage(stage.toDataURL(), 0, 0, stage.width(), stage.height());
11 | const blob: Blob = pdf.output('blob');
12 | return blob;
13 | }
--------------------------------------------------------------------------------
/apps/portal/components/pagesComponents/_editorScreen/editorHelpers/pdf.ts:
--------------------------------------------------------------------------------
1 | import jsPDF from 'jspdf';
2 | import { Stage } from 'konva/lib/Stage';
3 |
4 |
5 | export const pdfFormation = (stage: Stage):Blob => {
6 | const width = stage.width();
7 | const height = stage.height();
8 | const orientation = width > height ? 'l' : 'p'
9 | const pdf = new jsPDF(orientation, 'px', [stage.width(), stage.height()]);
10 | pdf.addImage(stage.toDataURL(), 0, 0, stage.width(), stage.height());
11 | const blob: Blob = pdf.output('blob');
12 | return blob;
13 | }
--------------------------------------------------------------------------------
/apps/api/src/module/video-services/api-video/api-video.module.ts:
--------------------------------------------------------------------------------
1 | import { Module } from '@nestjs/common';
2 | import { HttpModule } from 'nestjs-http-promise';
3 | import { ApiVideoController } from './api-video.controller';
4 | import { ApiVideoService } from './api-video.service';
5 | import { AuthModule } from '../../../module/auth/auth.module';
6 |
7 | @Module({
8 | imports: [HttpModule, AuthModule],
9 | controllers: [ApiVideoController],
10 | providers: [ApiVideoService],
11 | exports: [ApiVideoService],
12 | })
13 | export class ApiVideoModule {}
14 |
--------------------------------------------------------------------------------
/apps/api/src/module/workspace/dto/files/update-member-permissions.dto.ts:
--------------------------------------------------------------------------------
1 | import { IsBoolean, IsIn } from 'class-validator';
2 | import { IsId } from '../../validators/id.validator';
3 |
4 | export class UpdateFileMemberPermissionsDto {
5 | @IsIn(['member', 'team'])
6 | permissionType: 'member' | 'team';
7 |
8 | @IsId()
9 | id: string; // user or team id
10 |
11 | @IsIn(['screenshots', 'videos'])
12 | permissionItemType: 'screenshots' | 'videos';
13 |
14 | @IsBoolean()
15 | write: boolean;
16 |
17 | @IsBoolean()
18 | read: boolean;
19 | }
20 |
--------------------------------------------------------------------------------
/apps/extensions/images/panel/common/more_horiz.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/apps/extensions/src/app/services/helpers/iDataResponseParser.ts:
--------------------------------------------------------------------------------
1 | import { IDataResponse, ResStatusEnum } from '@/app/interfaces/IDataResponse';
2 | import { errorHandler } from '@/app/services/helpers/errors';
3 |
4 | export const iDataResponseParser = (
5 | response: IDataResponse,
6 | showNotification = true,
7 | ): null | typeof response.data => {
8 | if (response.status === ResStatusEnum.error) {
9 | window && showNotification && errorHandler(response);
10 | return null;
11 | } else {
12 | return response.data as T;
13 | }
14 | };
15 |
--------------------------------------------------------------------------------
/apps/extensions/src/content/panel/screens/singleImageScreen/imageActions/ImageActionsCard.tsx:
--------------------------------------------------------------------------------
1 | import classNames from 'classnames';
2 |
3 |
4 | const ImageActionsCard: React.FC<{ className?: string }> = ({
5 | children,
6 | className = '',
7 | }) => {
8 | return (
9 |
15 | {children}
16 |
17 | );
18 | };
19 |
20 | export default ImageActionsCard;
21 |
--------------------------------------------------------------------------------
/apps/portal/public/item/video-item.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------