├── .browserslistrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.cjs ├── .git-blame-ignore-revs ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── ci.yml │ ├── release.yml │ └── staging.yml ├── .gitignore ├── .husky ├── .gitignore └── pre-commit ├── .mergify.yml ├── .npmrc ├── .postcssrc.cjs ├── .prettierignore ├── .prettierrc.json ├── .storybook ├── main.js └── preview.js ├── CONTRIBUTING.md ├── DEVELOPMENT.md ├── LICENSE ├── README.md ├── RELEASE.md ├── cypress.json ├── docs ├── contributing.md └── translation.md ├── index.html ├── jsconfig.json ├── package-lock.json ├── package.json ├── public ├── css │ └── bulma.css ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── fonts │ └── Lato.woff2 └── robots.txt ├── scripts ├── missinglocales.js └── release.sh ├── src ├── App.vue ├── assets │ ├── avatar-wrapper.png │ ├── background │ │ ├── player-timeslider.png │ │ ├── schedule-dark-1-weekend.svg │ │ ├── schedule-dark-1.svg │ │ ├── schedule-dark-2-weekend.svg │ │ ├── schedule-dark-3-weekend.svg │ │ ├── schedule-dark-4-weekend.svg │ │ ├── schedule-white-1-weekend.svg │ │ ├── schedule-white-1.svg │ │ ├── schedule-white-2-weekend.svg │ │ ├── schedule-white-3-weekend.svg │ │ └── schedule-white-4-weekend.svg │ ├── icons │ │ ├── assets.png │ │ ├── casting-not-ready.png │ │ ├── casting-ready.png │ │ ├── fi-add-preview.svg │ │ ├── fi-add-thumbnail.svg │ │ ├── fi-alert-circle.svg │ │ ├── fi-annotations.svg │ │ ├── fi-asset-stats.svg │ │ ├── fi-asset.svg │ │ ├── fi-assets.svg │ │ ├── fi-assign-1.svg │ │ ├── fi-automations.svg │ │ ├── fi-big-thumbnail.svg │ │ ├── fi-box.svg │ │ ├── fi-breakdown.svg │ │ ├── fi-calendar.svg │ │ ├── fi-check-circle.svg │ │ ├── fi-check-square.svg │ │ ├── fi-compare.svg │ │ ├── fi-copy.svg │ │ ├── fi-delete.svg │ │ ├── fi-departments.svg │ │ ├── fi-download.svg │ │ ├── fi-edit-2.svg │ │ ├── fi-edit.svg │ │ ├── fi-edits.svg │ │ ├── fi-entity-search.svg │ │ ├── fi-episode-stats.svg │ │ ├── fi-episodes.svg │ │ ├── fi-export-csv.svg │ │ ├── fi-export-ligne.svg │ │ ├── fi-export-lines.svg │ │ ├── fi-eye.svg │ │ ├── fi-filter.svg │ │ ├── fi-image.svg │ │ ├── fi-import-csv.svg │ │ ├── fi-import-edl.svg │ │ ├── fi-import-files.svg │ │ ├── fi-info-hide.svg │ │ ├── fi-info.svg │ │ ├── fi-laser.svg │ │ ├── fi-layers.svg │ │ ├── fi-logs.svg │ │ ├── fi-maximize.svg │ │ ├── fi-message-square.svg │ │ ├── fi-my-productions.svg │ │ ├── fi-my-tasks.svg │ │ ├── fi-news.svg │ │ ├── fi-play.svg │ │ ├── fi-playlist.svg │ │ ├── fi-playlists.svg │ │ ├── fi-productions.svg │ │ ├── fi-quotas.svg │ │ ├── fi-repeat.svg │ │ ├── fi-rotate-ccw.svg │ │ ├── fi-sequence-stats.svg │ │ ├── fi-sequences.svg │ │ ├── fi-settings.svg │ │ ├── fi-shots.svg │ │ ├── fi-skip-forward-1.svg │ │ ├── fi-skip-forward.svg │ │ ├── fi-skybox-desactive.svg │ │ ├── fi-skybox.svg │ │ ├── fi-sliders.svg │ │ ├── fi-sound-off.svg │ │ ├── fi-sound-on.svg │ │ ├── fi-task-status.svg │ │ ├── fi-task-types.svg │ │ ├── fi-team-schedule.svg │ │ ├── fi-text.svg │ │ ├── fi-timesheets.svg │ │ ├── fi-trash-2.svg │ │ ├── fi-user-check.svg │ │ ├── fi-user.svg │ │ ├── fi-users.svg │ │ ├── fi-waveform.svg │ │ ├── fi-zoom-in.svg │ │ ├── fi-zoom-out.svg │ │ ├── fi_user-bot.svg │ │ ├── movie-thumbnail.png │ │ ├── sequences.png │ │ ├── shots.png │ │ └── trash.svg │ ├── illustrations │ │ ├── 404.png │ │ ├── 500.png │ │ ├── empty_asset.png │ │ ├── empty_edit.png │ │ ├── empty_production.png │ │ ├── empty_shot.png │ │ ├── empty_todo.png │ │ ├── kitsu-band.png │ │ └── kitsu-with-body.png │ ├── kitsu-text-dark.svg │ ├── kitsu-text.png │ ├── kitsu-text.svg │ ├── kitsu.png │ ├── kitsu.svg │ ├── logo-dark.svg │ ├── logo.png │ ├── logo.svg │ ├── spinner-white.svg │ └── spinner.svg ├── components │ ├── Main.vue │ ├── cells │ │ ├── BooleanCell.vue │ │ ├── DepartmentNamesCell.vue │ │ ├── DescriptionCell.vue │ │ ├── LastCommentCell.vue │ │ ├── MetadataHeader.vue │ │ ├── MetadataInput.vue │ │ ├── PeopleNameCell.vue │ │ ├── ProductionNameCell.vue │ │ ├── RowActionsCell.vue │ │ ├── StatsCell.vue │ │ ├── TaskStatusCell.vue │ │ ├── TaskTypeCell.vue │ │ ├── TimeSliderCell.vue │ │ ├── ValidationCell.vue │ │ └── ValidationHeader.vue │ ├── layouts │ │ ├── PageLayout.vue │ │ └── PageLeftSideLayout.vue │ ├── lists │ │ ├── AllTaskList.vue │ │ ├── AssetList.vue │ │ ├── AssetTypeList.vue │ │ ├── BackgroundList.vue │ │ ├── CustomActionList.vue │ │ ├── DayOffList.vue │ │ ├── DepartmentList.vue │ │ ├── EditList.vue │ │ ├── EntityTaskList.vue │ │ ├── EpisodeList.vue │ │ ├── EpisodeStatsList.vue │ │ ├── KanbanBoard.vue │ │ ├── PeopleList.vue │ │ ├── PeopleTimesheetList.vue │ │ ├── PreviewFileList.vue │ │ ├── ProductionAssetTypeList.vue │ │ ├── ProductionList.vue │ │ ├── ProductionTeamList.vue │ │ ├── QuotaShotList.vue │ │ ├── SequenceList.vue │ │ ├── SequenceStatsList.vue │ │ ├── ShotList.vue │ │ ├── StatusAutomationList.vue │ │ ├── StudioList.vue │ │ ├── TaskList.vue │ │ ├── TaskStatusList.vue │ │ ├── TaskTypeList.vue │ │ ├── TimeSpentTaskList.vue │ │ ├── TimesheetList.vue │ │ └── TodosList.vue │ ├── mixins │ │ ├── annotation.js │ │ ├── descriptors.js │ │ ├── dom.js │ │ ├── entities.js │ │ ├── entity.js │ │ ├── entity_list.js │ │ ├── format.js │ │ ├── fullscreen.js │ │ ├── grablist.js │ │ ├── page.js │ │ ├── parameters.js │ │ ├── player.js │ │ ├── previewRoom.js │ │ ├── search.js │ │ ├── selection.js │ │ ├── task.js │ │ └── time.js │ ├── modals │ │ ├── AddAttachmentModal.vue │ │ ├── AddMetadataModal.vue │ │ ├── AddPreviewModal.vue │ │ ├── AddThumbnailsModal.vue │ │ ├── BaseModal.vue │ │ ├── BuildFilterModal.vue │ │ ├── BuildPeopleFilterModal.vue │ │ ├── ChangeAvatarModal.vue │ │ ├── ChangePasswordModal.vue │ │ ├── ConfirmModal.vue │ │ ├── CreateTasksModal.vue │ │ ├── DayOffModal.vue │ │ ├── DeleteModal.vue │ │ ├── EditAssetModal.vue │ │ ├── EditAssetTypeModal.vue │ │ ├── EditAvatarModal.vue │ │ ├── EditBackgroundModal.vue │ │ ├── EditBudgetEntryModal.vue │ │ ├── EditBudgetModal.vue │ │ ├── EditCommentModal.vue │ │ ├── EditCustomActionModal.vue │ │ ├── EditDepartmentsModal.vue │ │ ├── EditEditModal.vue │ │ ├── EditEpisodeModal.vue │ │ ├── EditHistoryModal.vue │ │ ├── EditLabelModal.vue │ │ ├── EditMilestoneModal.vue │ │ ├── EditPersonModal.vue │ │ ├── EditPlaylistModal.vue │ │ ├── EditProductionModal.vue │ │ ├── EditSearchFilterGroupModal.vue │ │ ├── EditSearchFilterModal.vue │ │ ├── EditSequenceModal.vue │ │ ├── EditShotModal.vue │ │ ├── EditStatusAutomationModal.vue │ │ ├── EditStudiosModal.vue │ │ ├── EditTaskStatusModal.vue │ │ ├── EditTaskTypeModal.vue │ │ ├── HardDeleteModal.vue │ │ ├── ImportEdlModal.vue │ │ ├── ImportModal.vue │ │ ├── ImportRenderModal.vue │ │ ├── ManageShotsModal.vue │ │ ├── ModalFooter.vue │ │ ├── NewTokenModal.vue │ │ ├── PreviewModal.vue │ │ ├── SelectTaskTypeModal.vue │ │ ├── SetFramesFromTaskTypePreviewsModal.vue │ │ ├── ShortcutModal.vue │ │ ├── ShotHistoryModal.vue │ │ ├── ViewPlaylistModal.vue │ │ └── base_modal.js │ ├── pages │ │ ├── AllTasks.vue │ │ ├── Asset.vue │ │ ├── AssetLibrary.vue │ │ ├── AssetTypes.vue │ │ ├── Assets.vue │ │ ├── Backgrounds.vue │ │ ├── Bots.vue │ │ ├── Breakdown.vue │ │ ├── Brief.vue │ │ ├── Concepts.vue │ │ ├── CustomActions.vue │ │ ├── Departments.vue │ │ ├── Edit.vue │ │ ├── Edits.vue │ │ ├── EntityChats.vue │ │ ├── EntitySearch.vue │ │ ├── Episode.vue │ │ ├── EpisodeStats.vue │ │ ├── Episodes.vue │ │ ├── FirstConnection.vue │ │ ├── Login.vue │ │ ├── Logs.vue │ │ ├── MainSchedule.vue │ │ ├── MyChecks.vue │ │ ├── NotFound.vue │ │ ├── Notifications.vue │ │ ├── OpenProductions.vue │ │ ├── People.vue │ │ ├── Person.vue │ │ ├── Playlist.vue │ │ ├── ProductionAssetTypes.vue │ │ ├── ProductionNewsFeed.vue │ │ ├── ProductionQuota.vue │ │ ├── ProductionSchedule.vue │ │ ├── ProductionSettings.vue │ │ ├── Productions.vue │ │ ├── Profile.vue │ │ ├── ResetChangePassword.vue │ │ ├── ResetPassword.vue │ │ ├── Sequence.vue │ │ ├── SequenceStats.vue │ │ ├── Sequences.vue │ │ ├── ServerDown.vue │ │ ├── Settings.vue │ │ ├── Shot.vue │ │ ├── Shots.vue │ │ ├── StatusAutomations.vue │ │ ├── Studios.vue │ │ ├── Task.vue │ │ ├── TaskStatus.vue │ │ ├── TaskType.vue │ │ ├── TaskTypes.vue │ │ ├── Team.vue │ │ ├── TeamSchedule.vue │ │ ├── Timesheets.vue │ │ ├── Todos.vue │ │ ├── WrongBrowser.vue │ │ ├── breakdown │ │ │ ├── AssetBlock.vue │ │ │ ├── AvailableAssetBlock.vue │ │ │ └── ShotLine.vue │ │ ├── budget │ │ │ ├── Budget.vue │ │ │ ├── BudgetAnalytics.vue │ │ │ ├── BudgetHeader.vue │ │ │ ├── BudgetList.vue │ │ │ └── SalaryScale.vue │ │ ├── entities │ │ │ ├── EntityChat.vue │ │ │ ├── EntityChatDays.vue │ │ │ ├── EntityNews.vue │ │ │ ├── EntityOutputFiles.vue │ │ │ ├── EntityPreviewFileCard.vue │ │ │ ├── EntityPreviewFiles.vue │ │ │ └── EntityTimeLogs.vue │ │ ├── logs │ │ │ ├── Events.vue │ │ │ └── PreviewFiles.vue │ │ ├── playlists │ │ │ ├── PlaylistPlayer.vue │ │ │ ├── PlaylistedEntity.vue │ │ │ └── RawVideoPlayer.vue │ │ ├── production │ │ │ ├── NewProduction.vue │ │ │ ├── ProductionBackgrounds.vue │ │ │ ├── ProductionBoard.vue │ │ │ ├── ProductionBrief.vue │ │ │ ├── ProductionParameters.vue │ │ │ ├── ProductionStats.vue │ │ │ ├── ProductionStatusAutomations.vue │ │ │ ├── ProductionTaskType.vue │ │ │ ├── ProductionTaskTypes.vue │ │ │ └── TimelineItem.vue │ │ ├── quota │ │ │ └── Quota.vue │ │ └── tasktype │ │ │ └── EstimationHelper.vue │ ├── previews │ │ ├── BrowsingBar.vue │ │ ├── MultiPictureViewer.vue │ │ ├── ObjectViewer.vue │ │ ├── PictureViewer.vue │ │ ├── PlaylistProgress.vue │ │ ├── PreviewPlayer.vue │ │ ├── PreviewViewer.vue │ │ ├── PreviewsPerTaskType.vue │ │ ├── RevisionPreview.vue │ │ ├── SoundViewer.vue │ │ ├── VideoProgress.vue │ │ └── VideoViewer.vue │ ├── sides │ │ ├── ManageLibrary.vue │ │ ├── PeopleQuotaInfo.vue │ │ ├── PeopleTimesheetInfo.vue │ │ ├── Sidebar.vue │ │ └── TaskInfo.vue │ ├── spinners │ │ ├── Origami.vue │ │ └── SquareGrid.vue │ ├── tops │ │ ├── ActionPanel.vue │ │ ├── GlobalSearchField.vue │ │ ├── Topbar.vue │ │ ├── TopbarEpisodeList.vue │ │ ├── TopbarProductionList.vue │ │ ├── TopbarSectionList.vue │ │ └── actions │ │ │ └── DeleteEntities.vue │ └── widgets │ │ ├── AddComment.vue │ │ ├── AssignationItem.vue │ │ ├── BigThumbnailsButton.vue │ │ ├── BooleanField.vue │ │ ├── BooleanRep.vue │ │ ├── ButtonHrefLink.vue │ │ ├── ButtonLink.vue │ │ ├── ButtonSimple.vue │ │ ├── Checkbox.vue │ │ ├── Checklist.vue │ │ ├── ColorField.vue │ │ ├── ColorPicker.vue │ │ ├── Combobox.vue │ │ ├── ComboboxBoolean.vue │ │ ├── ComboboxDepartment.vue │ │ ├── ComboboxMask.vue │ │ ├── ComboboxModel.vue │ │ ├── ComboboxNumber.vue │ │ ├── ComboboxProduction.vue │ │ ├── ComboboxSimple.vue │ │ ├── ComboboxStatus.vue │ │ ├── ComboboxStatusAutomation.vue │ │ ├── ComboboxStudio.vue │ │ ├── ComboboxStyled.vue │ │ ├── ComboboxTag.vue │ │ ├── ComboboxTaskType.vue │ │ ├── Comment.vue │ │ ├── CommentMenu.vue │ │ ├── ConceptCard.vue │ │ ├── DateField.vue │ │ ├── DepartmentName.vue │ │ ├── EntityPreview.vue │ │ ├── EntityThumbnail.vue │ │ ├── ErrorText.vue │ │ ├── FileUpload.vue │ │ ├── GroupButton.vue │ │ ├── InfoQuestionMark.vue │ │ ├── KitsuIcon.vue │ │ ├── LightEntityThumbnail.vue │ │ ├── ListPageHeader.vue │ │ ├── MetadataField.vue │ │ ├── MonthField.vue │ │ ├── NotificationBell.vue │ │ ├── PageSubtitle.vue │ │ ├── PageTitle.vue │ │ ├── PencilPicker.vue │ │ ├── PeopleAvatar.vue │ │ ├── PeopleAvatarWithMenu.vue │ │ ├── PeopleField.vue │ │ ├── PeopleName.vue │ │ ├── PreviewRoom.vue │ │ ├── PreviewRow.vue │ │ ├── ProductionName.vue │ │ ├── RouteSectionTabs.vue │ │ ├── RouteTabs.vue │ │ ├── Schedule.vue │ │ ├── SearchField.vue │ │ ├── SearchQueryList.vue │ │ ├── SettingImporter.vue │ │ ├── ShowAssignationsButton.vue │ │ ├── ShowInfosButton.vue │ │ ├── SortingInfo.vue │ │ ├── Spinner.vue │ │ ├── StatusAutomationItem.vue │ │ ├── StatusStats.vue │ │ ├── StudioName.vue │ │ ├── SubscribeButton.vue │ │ ├── TableHeaderMenu.vue │ │ ├── TableInfo.vue │ │ ├── TableMetadataHeaderMenu.vue │ │ ├── TableMetadataSelectorMenu.vue │ │ ├── TaskListNumbers.vue │ │ ├── TaskTypeName.vue │ │ ├── TextField.vue │ │ ├── TextareaField.vue │ │ ├── TwoFactorAuthentication.vue │ │ ├── UserCalendar.vue │ │ └── ValidationTag.vue ├── directives │ └── resizable-column.js ├── lib │ ├── array.js │ ├── auth.js │ ├── clipboard.js │ ├── color2.js │ ├── colors.js │ ├── crisp.js │ ├── csv.js │ ├── descriptors.js │ ├── drafts.js │ ├── emojis.js │ ├── errors.js │ ├── files.js │ ├── filtering.js │ ├── func.js │ ├── i18n.js │ ├── indexing.js │ ├── init.js │ ├── lang.js │ ├── models.js │ ├── pagination.js │ ├── path.js │ ├── playlist.js │ ├── preferences.js │ ├── productions.js │ ├── query.js │ ├── render.js │ ├── selection.js │ ├── sentry.js │ ├── sorting.js │ ├── stats.js │ ├── string.js │ ├── time.js │ ├── timezone.js │ ├── video.js │ └── webauthn.js ├── locales │ ├── da.json │ ├── de.js │ ├── en.js │ ├── en_nft.js │ ├── en_video-game.js │ ├── es.json │ ├── fa.json │ ├── fr.json │ ├── hu.json │ ├── index.js │ ├── ja.json │ ├── ko.json │ ├── nl.json │ ├── pt.json │ ├── ru.json │ ├── zh.json │ └── zh_tw.json ├── main.js ├── polyfills.js ├── router │ ├── index.js │ └── routes.js ├── store │ ├── api │ │ ├── assets.js │ │ ├── assettypes.js │ │ ├── backgrounds.js │ │ ├── breakdown.js │ │ ├── budget.js │ │ ├── client.js │ │ ├── concepts.js │ │ ├── customactions.js │ │ ├── departments.js │ │ ├── edits.js │ │ ├── entities.js │ │ ├── files.js │ │ ├── news.js │ │ ├── notifications.js │ │ ├── people.js │ │ ├── playlists.js │ │ ├── productions.js │ │ ├── schedule.js │ │ ├── shots.js │ │ ├── statusautomation.js │ │ ├── studios.js │ │ ├── tasks.js │ │ ├── taskstatus.js │ │ └── tasktypes.js │ ├── getters.js │ ├── index.js │ ├── modules │ │ ├── assets.js │ │ ├── assettypes.js │ │ ├── backgrounds.js │ │ ├── breakdown.js │ │ ├── budget.js │ │ ├── concepts.js │ │ ├── customactions.js │ │ ├── departments.js │ │ ├── edits.js │ │ ├── entities.js │ │ ├── episodes.js │ │ ├── files.js │ │ ├── login.js │ │ ├── main.js │ │ ├── news.js │ │ ├── notifications.js │ │ ├── people.js │ │ ├── playlists.js │ │ ├── productions.js │ │ ├── schedule.js │ │ ├── sequences.js │ │ ├── shots.js │ │ ├── statusautomation.js │ │ ├── studios.js │ │ ├── tasks.js │ │ ├── taskstatus.js │ │ ├── tasktypes.js │ │ └── user.js │ └── mutation-types.js ├── stories │ ├── Button.stories.js │ ├── Button.vue │ ├── Header.stories.js │ ├── Header.vue │ ├── Introduction.stories.mdx │ ├── Page.stories.js │ ├── Page.vue │ ├── assets │ │ ├── code-brackets.svg │ │ ├── colors.svg │ │ ├── comments.svg │ │ ├── direction.svg │ │ ├── flow.svg │ │ ├── plugin.svg │ │ ├── repo.svg │ │ └── stackalt.svg │ ├── button.css │ ├── header.css │ └── page.css ├── substituted-model-viewer.js ├── testrouter │ ├── index.js │ └── routes.js └── variables.scss ├── tests ├── .eslintrc.cjs ├── archive │ ├── assets.spec.js │ └── breakdown.spec.js ├── e2e │ ├── integration │ │ └── production.js │ ├── plugins │ │ └── index.js │ └── support │ │ └── index.js ├── fabric.js ├── setup.js ├── spinner.js ├── substituted-model-viewer.js ├── unit.setup.js └── unit │ ├── fixtures │ ├── person-store.js │ └── production-store.js │ ├── lib │ ├── array.spec.js │ ├── auth.spec.js │ ├── colors.spec.js │ ├── descriptor.spec.js │ ├── filtering.spec.js │ ├── func.spec.js │ ├── indexing.spec.js │ ├── lang.spec.js │ ├── models.spec.js │ ├── path.spec.js │ ├── query.spec.js │ ├── render.spec.js │ ├── selection.spec.js │ ├── sorting.spec.js │ ├── stats.spec.js │ ├── string.spec.js │ ├── time.spec.js │ └── video.spec.js │ ├── modals │ ├── addthumbnailsmodals.spec.js │ ├── buildfiltermodal.spec.js │ └── shothistorymodal.spec.js │ └── store │ ├── departments.spec.js │ ├── news.spec.js │ ├── productions.spec.js │ ├── studios.spec.js │ └── tasktypes.spec.js └── vite.config.js /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | src/locales/* 4 | src/stories/* 5 | -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true, 5 | es2021: true 6 | }, 7 | extends: [ 8 | 'eslint:recommended', 9 | 'plugin:vue/vue3-recommended', 10 | 'plugin:prettier/recommended' 11 | ], 12 | rules: { 13 | 'no-console': 14 | process.env.NODE_ENV === 'production' 15 | ? ['error', { allow: ['error', 'warn'] }] 16 | : 'off', 17 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', 18 | 'no-empty-pattern': ['error', { allowObjectPatternsAsParameters: true }], 19 | 'no-unused-vars': ['error', { args: 'none' }], 20 | 'no-var': 'error', 21 | eqeqeq: ['error', 'always', { null: 'ignore' }], 22 | 'prefer-const': [ 23 | 'error', 24 | { 25 | destructuring: 'all' 26 | } 27 | ], 28 | 29 | // additional rules for Vue 30 | 'vue/component-definition-name-casing': ['error', 'kebab-case'], 31 | 'vue/component-name-in-template-casing': ['error', 'kebab-case'], 32 | 'vue/custom-event-name-casing': ['error', 'kebab-case'], 33 | 'vue/eqeqeq': ['error', 'always', { null: 'ignore' }], 34 | 'vue/no-unused-emit-declarations': 'error', 35 | 'vue/prop-name-casing': ['error', 'camelCase'], 36 | 'vue/require-explicit-emits': 'error', 37 | 38 | // disabled vue/recommended rules 39 | 'vue/attributes-order': 'off', 40 | 'vue/multi-word-component-names': 'off', 41 | 'vue/no-v-html': 'off', 42 | 'vue/order-in-components': 'off', 43 | 'vue/require-default-prop': 'off', 44 | 'vue/require-prop-types': 'off', 45 | 'vue/no-template-shadow': 'off' 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | # https://git-scm.com/docs/git-blame#Documentation/git-blame.txt---ignore-revs-fileltfilegt 2 | # https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#ignore-commits-in-the-blame-view 3 | 4 | # nicopennec: format with eslint & prettier 5 | 52b161016c4d97f08cd50b01bfc61ac98f62ef92 6 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | liberapay: CGWire 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: NicoPennec 7 | 8 | --- 9 | 10 | **Context** 11 | 12 | Studio name: 13 | Kitsu version: 14 | Production type: 15 | 16 | **Describe the bug** 17 | 18 | A clear and concise description of what the bug is. 19 | 20 | **Screenshots** 21 | 22 | If applicable, add screenshots to help explain your problem. 23 | 24 | **Desktop (please complete the following information):** 25 | 26 | - OS: [e.g. iOS] 27 | - Browser [e.g. chrome, safari] 28 | - Version [e.g. 22] 29 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | --- 8 | 9 | Please use https://cgwire.canny.io for any feature request. Every feature request done on GitHub will be closed. 10 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | **Problem** 2 | 3 | 4 | **Solution** 5 | 6 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: 'Kitsu CI' 3 | 4 | on: [push, pull_request] 5 | 6 | jobs: 7 | ci: 8 | name: Test with Node ${{ matrix.node }} 9 | runs-on: ubuntu-latest 10 | strategy: 11 | matrix: 12 | node: [20, 22, current] 13 | env: 14 | NODE_OPTIONS: '--max_old_space_size=8192' 15 | HUSKY: 0 16 | steps: 17 | - uses: actions/checkout@v4 18 | - name: Setup node 19 | uses: actions/setup-node@v4 20 | with: 21 | node-version: ${{ matrix.node }} 22 | cache: 'npm' 23 | - name: Install dependencies 24 | run: | 25 | echo "Node.js $(node -v)" 26 | echo "npm v$(npm -v)" 27 | npm ci 28 | - name: Run linter 29 | if: ${{ matrix.node == 'current' }} 30 | run: | 31 | npm run lint -- --quiet 32 | - name: Run tests 33 | run: | 34 | npm run test:unit 35 | -------------------------------------------------------------------------------- /.github/workflows/staging.yml: -------------------------------------------------------------------------------- 1 | name: Deploy Kitsu to staging environment 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | build: 10 | if: github.repository_owner == 'cgwire' 11 | name: Build 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Update Kitsu on staging server 15 | uses: appleboy/ssh-action@v1 16 | env: 17 | HUSKY: 0 18 | NODE_OPTIONS: '--max_old_space_size=8192' 19 | with: 20 | host: ${{ secrets.HOST }} 21 | username: ${{ secrets.USERNAME }} 22 | key: ${{ secrets.KEY }} 23 | port: ${{ secrets.PORT }} 24 | script_stop: true 25 | envs: HUSKY, NODE_OPTIONS 26 | script: | 27 | echo "Node.js $(node -v)" 28 | echo "npm v$(npm -v)" 29 | cd /opt/kitsu 30 | git pull 31 | npm ci 32 | npm run build 33 | GIT_COMMIT="$(git rev-parse HEAD)" 34 | GIT_TAG="$(git describe --tags)" 35 | KITSU_VERSION="$(echo ${GIT_TAG} | sed 's/^v//;s/-build//')" 36 | echo "${KITSU_VERSION}" > dist/.version.txt 37 | echo "${GIT_COMMIT}" > dist/.commit.txt 38 | echo "${GIT_TAG}" > dist/.tag.txt 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | /logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # nyc test coverage 18 | .nyc_output 19 | 20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 21 | .grunt 22 | 23 | # node-waf configuration 24 | .lock-wscript 25 | 26 | # Compiled binary addons (http://nodejs.org/api/addons.html) 27 | build/Release 28 | 29 | # Dependency directories 30 | node_modules/ 31 | jspm_packages/ 32 | yarn.lock 33 | 34 | # Optional npm cache directory 35 | .npm 36 | 37 | # Optional REPL history 38 | .node_repl_history 39 | 40 | # Vue template artifacts to ignore 41 | .DS_Store 42 | dist/ 43 | selenium-debug.log 44 | test/unit/coverage 45 | test/e2e/reports 46 | test/test-bundle.js 47 | tests/test-bundle.js 48 | 49 | # IDE 50 | .idea/ 51 | .vscode/ 52 | .eslintcache 53 | 54 | # Custom 55 | TODO 56 | QA 57 | -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | lint-staged 2 | -------------------------------------------------------------------------------- /.mergify.yml: -------------------------------------------------------------------------------- 1 | pull_request_rules: 2 | - name: Automatic assign 3 | conditions: [] 4 | actions: 5 | assign: 6 | users: [frankrousseau] 7 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | legacy-peer-deps=true 3 | -------------------------------------------------------------------------------- /.postcssrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: {} 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | src/locales/* 2 | src/stories/* 3 | tests/* 4 | scripts/* 5 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "avoid", 3 | "semi": false, 4 | "singleQuote": true, 5 | "trailingComma": "none" 6 | } 7 | -------------------------------------------------------------------------------- /.storybook/main.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "stories": [ 3 | "../src/**/*.stories.mdx", 4 | "../src/**/*.stories.@(js|jsx|ts|tsx)" 5 | ], 6 | "addons": [ 7 | "@storybook/addon-links", 8 | "@storybook/addon-essentials", 9 | "@storybook/addon-interactions" 10 | ], 11 | "framework": "@storybook/vue" 12 | } -------------------------------------------------------------------------------- /.storybook/preview.js: -------------------------------------------------------------------------------- 1 | export const parameters = { 2 | actions: { argTypesRegex: "^on[A-Z].*" }, 3 | controls: { 4 | matchers: { 5 | color: /(background|color)$/i, 6 | date: /Date$/, 7 | }, 8 | }, 9 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Kitsu](https://zou.cg-wire.com/kitsu.png)](https://kitsu.cg-wire.com) 2 | 3 | # Kitsu, Collaboration Platform for Animation, VFX, and Video Game Studios 4 | 5 | Kitsu is a web application that allows you to collaborate on your creative productions and 6 | manage your deliveries. It improves the communication between all stakeholders. 7 | Which leads to better results and faster shipping. 8 | 9 | [![CI badge](https://github.com/cgwire/kitsu/actions/workflows/ci.yml/badge.svg)](https://github.com/cgwire/kitsu/actions/workflows/ci.yml) 10 | [![Discord](https://badgen.net/badge/icon/discord?icon=discord&label)](https://discord.com/invite/VbCxtKN) 11 | [![Donation](https://img.shields.io/liberapay/receives/CGWire.svg?logo=liberapay">)](https://liberapay.com/CGWire/donate) 12 | 13 | ## Documentation 14 | 15 | For further information about features and installation, please refer to the 16 | [documentation website](https://kitsu.cg-wire.com/). 17 | 18 | ## Contributing 19 | 20 | There are many ways to contribute to Kitsu, from simple tasks to most complex ones. We created a 21 | [contributing guide](https://github.com/cgwire/kitsu/blob/main/CONTRIBUTING.md) explaining everything. 22 | You will find all the information you are looking for! 23 | 24 | ## About authors 25 | 26 | Kitsu is written by CGWire, a company based in France. We help animation and VFX studios to collaborate better through efficient tooling. 27 | 28 | More than 300 studios around the world use Kitsu for their projects. 29 | 30 | Visit [cg-wire.com](https://cg-wire.com) for more information. 31 | 32 | [![CGWire Logo](https://zou.cg-wire.com/cgwire.png)](https://cg-wire.com) 33 | -------------------------------------------------------------------------------- /RELEASE.md: -------------------------------------------------------------------------------- 1 | # How to create a new release for Kitsu 2 | 3 | We release Kitsu versions through GitHub. 4 | Every time a new version is ready, we follow this process: 5 | 6 | 1. Rebase sources on the `main` branch. 7 | 2. Up the version number through the `npm` CLI. 8 | 3. Tag the commit with the Kitsu version. 9 | 4. Push changes to the `main` branch. 10 | 11 | You can run the following script to perform these commands at once: 12 | 13 | ```bash 14 | git pull --rebase origin main 15 | npm version patch 16 | git push origin main --tag 17 | ``` 18 | 19 | # Deployment 20 | 21 | Kitsu installation has to be updated via Git, your Kitsu folder. 22 | Run the following command to get the latest version of Kitsu: 23 | 24 | ```bash 25 | git pull --rebase origin build 26 | ``` 27 | -------------------------------------------------------------------------------- /cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "integrationFolder": "./tests/e2e/integration", 3 | "fixturesFolder": "./tests/e2e/fixtures", 4 | "pluginsFile": "./tests/e2e/plugins/index.js", 5 | "supportFile": "./tests/e2e/support/index.js", 6 | "watchForFileChanges" : false, 7 | "viewportWidth": 1200, 8 | "viewportHeight": 800, 9 | "baseUrl": "http://localhost:8080" 10 | } 11 | -------------------------------------------------------------------------------- /docs/contributing.md: -------------------------------------------------------------------------------- 1 | ## Recommandations 2 | 3 | Before coding on Kitsu we recommend to: 4 | 5 | * Know the ES6 syntax. 6 | * Read the Vue.js documentation main chapters. 7 | * Understand how Vuex works. 8 | 9 | ## Code guidelines 10 | 11 | * Make your best to keep your lines < 80 chars wide. 12 | * Respect configured ESLint rules. 13 | * Always order object fields in alphabetical order. 14 | * Use Vuex state only when necessary, prefer local state (vuex creates 15 | performance overhead). 16 | * Always use Vuex actions when doing remote API calls. 17 | -------------------------------------------------------------------------------- /docs/translation.md: -------------------------------------------------------------------------------- 1 | # Add a translation 2 | 3 | 4 | ## Add a language file 5 | 6 | 1. Get the json file from POEditor. 7 | 2. Store it in `src/locales`. 8 | 3. Add corresponding entry in the `src/locales/index.js` file. 9 | 4. Add an entry in the profile file at the option level. 10 | Be careful, you must use a locale name available in Python Babel or it will 11 | break the person entry. 12 | 13 | 14 | ## Add a translation key 15 | 16 | TODO 17 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Kitsu - Collaboration Platform For Animation Studios 10 | 11 | 12 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "checkJs": false, 5 | "moduleResolution": "bundler", 6 | "paths": { 7 | "@/*": ["src/*"] 8 | }, 9 | "resolveJsonModule": true, 10 | "target": "ES2021" 11 | }, 12 | "vueCompilerOptions": { 13 | "target": "auto" 14 | }, 15 | "include": ["src/**/*", "tests/**/*"] 16 | } 17 | -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/public/favicon.ico -------------------------------------------------------------------------------- /public/fonts/Lato.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/public/fonts/Lato.woff2 -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: / 3 | -------------------------------------------------------------------------------- /scripts/release.sh: -------------------------------------------------------------------------------- 1 | set -e 2 | git pull --rebase origin main 3 | npm version patch 4 | git push origin main --tags 5 | -------------------------------------------------------------------------------- /src/assets/avatar-wrapper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/avatar-wrapper.png -------------------------------------------------------------------------------- /src/assets/background/player-timeslider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/background/player-timeslider.png -------------------------------------------------------------------------------- /src/assets/background/schedule-dark-1-weekend.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/background/schedule-dark-1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/background/schedule-dark-2-weekend.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/background/schedule-dark-3-weekend.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/background/schedule-dark-4-weekend.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/background/schedule-white-1-weekend.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/background/schedule-white-1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/background/schedule-white-2-weekend.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/background/schedule-white-3-weekend.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/background/schedule-white-4-weekend.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/icons/assets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/icons/assets.png -------------------------------------------------------------------------------- /src/assets/icons/casting-not-ready.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/icons/casting-not-ready.png -------------------------------------------------------------------------------- /src/assets/icons/casting-ready.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/icons/casting-ready.png -------------------------------------------------------------------------------- /src/assets/icons/fi-add-preview.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-add-thumbnail.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/icons/fi-alert-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-annotations.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-asset-stats.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-assign-1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/icons/fi-automations.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/icons/fi-big-thumbnail.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/icons/fi-box.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-breakdown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-calendar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-check-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/icons/fi-check-square.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/icons/fi-compare.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/icons/fi-copy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/icons/fi-delete.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-departments.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/assets/icons/fi-download.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-edit-2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/fi-edit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/fi-edits.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/assets/icons/fi-entity-search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-episode-stats.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/icons/fi-episodes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/icons/fi-export-csv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-export-ligne.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-export-lines.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-eye.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/icons/fi-filter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/fi-image.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-import-files.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-info-hide.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-info.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-laser.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/fi-layers.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-logs.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-maximize.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/fi-message-square.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/fi-my-productions.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-my-tasks.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-news.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/fi-playlist.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-playlists.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-productions.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/icons/fi-quotas.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/fi-repeat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-rotate-ccw.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/icons/fi-sequence-stats.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-sequences.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-shots.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/icons/fi-skip-forward-1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/icons/fi-skip-forward.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/icons/fi-skybox-desactive.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/assets/icons/fi-skybox.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/icons/fi-sliders.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/icons/fi-sound-off.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-sound-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/icons/fi-task-status.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/assets/icons/fi-task-types.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/icons/fi-team-schedule.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/assets/icons/fi-text.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/icons/fi-timesheets.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-trash-2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-user-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi-user.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/fi-users.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-waveform.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/assets/icons/fi-zoom-in.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/icons/fi-zoom-out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fi_user-bot.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/icons/movie-thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/icons/movie-thumbnail.png -------------------------------------------------------------------------------- /src/assets/icons/sequences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/icons/sequences.png -------------------------------------------------------------------------------- /src/assets/icons/shots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/icons/shots.png -------------------------------------------------------------------------------- /src/assets/icons/trash.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/illustrations/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/illustrations/404.png -------------------------------------------------------------------------------- /src/assets/illustrations/500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/illustrations/500.png -------------------------------------------------------------------------------- /src/assets/illustrations/empty_asset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/illustrations/empty_asset.png -------------------------------------------------------------------------------- /src/assets/illustrations/empty_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/illustrations/empty_edit.png -------------------------------------------------------------------------------- /src/assets/illustrations/empty_production.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/illustrations/empty_production.png -------------------------------------------------------------------------------- /src/assets/illustrations/empty_shot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/illustrations/empty_shot.png -------------------------------------------------------------------------------- /src/assets/illustrations/empty_todo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/illustrations/empty_todo.png -------------------------------------------------------------------------------- /src/assets/illustrations/kitsu-band.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/illustrations/kitsu-band.png -------------------------------------------------------------------------------- /src/assets/illustrations/kitsu-with-body.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/illustrations/kitsu-with-body.png -------------------------------------------------------------------------------- /src/assets/kitsu-text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/kitsu-text.png -------------------------------------------------------------------------------- /src/assets/kitsu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/kitsu.png -------------------------------------------------------------------------------- /src/assets/kitsu.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgwire/kitsu/b572c9cef17db58729c59a8ecc3aff1927e76b95/src/assets/logo.png -------------------------------------------------------------------------------- /src/assets/spinner-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/assets/spinner.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/components/Main.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 28 | 29 | 36 | -------------------------------------------------------------------------------- /src/components/cells/BooleanCell.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 25 | 26 | 31 | -------------------------------------------------------------------------------- /src/components/cells/DepartmentNamesCell.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 47 | -------------------------------------------------------------------------------- /src/components/cells/PeopleNameCell.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 30 | 31 | 36 | -------------------------------------------------------------------------------- /src/components/cells/TaskStatusCell.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 55 | 56 | 67 | -------------------------------------------------------------------------------- /src/components/cells/TaskTypeCell.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 43 | 44 | 54 | -------------------------------------------------------------------------------- /src/components/layouts/PageLayout.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 24 | -------------------------------------------------------------------------------- /src/components/layouts/PageLeftSideLayout.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 17 | -------------------------------------------------------------------------------- /src/components/mixins/dom.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Helpers to access dom through vanilla javascript. 3 | */ 4 | export const domMixin = { 5 | methods: { 6 | isFocusTextArea() { 7 | return document.activeElement.nodeName === 'TEXTAREA' 8 | }, 9 | 10 | clearFocus() { 11 | document.activeElement.blur() 12 | }, 13 | 14 | focusInput(inputEl) { 15 | inputEl.focus() 16 | inputEl.select() 17 | inputEl.className = 'input' 18 | }, 19 | 20 | onInputBlur(event) { 21 | event.target.className = 'input stylehidden' 22 | }, 23 | 24 | onInputMouseOut(event) { 25 | if (document.activeElement !== event.target) { 26 | event.target.className = 'input stylehidden' 27 | } 28 | }, 29 | 30 | onInputMouseOver(event) { 31 | event.target.className = 'input' 32 | }, 33 | 34 | pauseEvent(e) { 35 | if (e.stopPropagation) e.stopPropagation() 36 | if (e.preventDefault) e.preventDefault() 37 | e.cancelBubble = true 38 | e.returnValue = false 39 | return false 40 | }, 41 | 42 | addEvents(events) { 43 | events.forEach(([type, listener]) => { 44 | document.addEventListener(type, listener) 45 | }) 46 | }, 47 | 48 | removeEvents(events) { 49 | events.forEach(([type, listener]) => { 50 | document.removeEventListener(type, listener) 51 | }) 52 | }, 53 | 54 | getClientX(event) { 55 | return event.touches?.[0].clientX || event.clientX 56 | }, 57 | 58 | getClientY(event) { 59 | return event.touches?.[0].clientY || event.clientY 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/components/mixins/fullscreen.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Utilities to deal with full screen state. 3 | */ 4 | export const fullScreenMixin = { 5 | computed: { 6 | isFullScreenEnabled() { 7 | return !!( 8 | document.fullscreenEnabled || 9 | document.mozFullScreenEnabled || 10 | document.msFullscreenEnabled || 11 | document.webkitSupportsFullscreen || 12 | document.webkitFullscreenEnabled || 13 | document.createElement('picture').webkitRequestFullScreen 14 | ) 15 | } 16 | }, 17 | 18 | methods: { 19 | isFullScreen() { 20 | return !!( 21 | document.fullscreen || 22 | document.webkitIsFullScreen || 23 | document.mozFullScreen || 24 | document.msFullscreenElement || 25 | document.fullscreenElement 26 | ) 27 | }, 28 | 29 | documentExitFullScreen() { 30 | if (document.exitFullscreen) { 31 | return document.exitFullscreen() 32 | } else if (document.mozCancelFullScreen) { 33 | document.mozCancelFullScreen() 34 | } else if (document.webkitCancelFullScreen) { 35 | document.webkitCancelFullScreen() 36 | } else if (document.msExitFullscreen) { 37 | document.msExitFullscreen() 38 | } 39 | }, 40 | 41 | documentSetFullScreen(element) { 42 | if (element.requestFullscreen) { 43 | return element.requestFullscreen() 44 | } else if (element.mozRequestFullScreen) { 45 | element.mozRequestFullScreen() 46 | } else if (element.webkitRequestFullScreen) { 47 | element.webkitRequestFullScreen() 48 | } else if (element.msRequestFullscreen) { 49 | element.msRequestFullscreen() 50 | } 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/components/mixins/page.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This mixin is used to format the page title based on the current context. 3 | */ 4 | import { mapGetters } from 'vuex' 5 | 6 | export const pageMixin = { 7 | computed: { 8 | ...mapGetters(['currentProduction, currentEpisode, isTVShow']) 9 | }, 10 | 11 | methods: {}, 12 | 13 | head() { 14 | if (this.currentProduction) { 15 | if (this.isTVSHow && this.currentEpisode) { 16 | return { 17 | title: 18 | `${this.currentProduction.name} - ` + 19 | `${this.currentEpisode.name} | {this.pageTitle} - Kitsu` 20 | } 21 | } else { 22 | return { 23 | title: `${this.currentProduction.name} | ${this.pageTitle} - Kitsu` 24 | } 25 | } 26 | } else { 27 | return { 28 | title: `${this.pageTitle} - Kitsu` 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/components/mixins/parameters.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Helpers to apply and save parameters to the url and local storage. 3 | */ 4 | import preferences from '@/lib/preferences' 5 | 6 | export const parametersMixin = { 7 | methods: { 8 | applyParametersToUrl() { 9 | const query = Object.keys(this.parameters).reduce((acc, key) => { 10 | if (this.parameters[key]) { 11 | acc[key] = this.parameters[key] 12 | if (acc[key] === 'true') { 13 | acc[key] = true 14 | } else if (acc[key] === 'false') { 15 | acc[key] = false 16 | } 17 | } 18 | return acc 19 | }, {}) 20 | this.$router.replace({ query }) 21 | }, 22 | 23 | getParametersFromUrl() { 24 | return this.$route.query 25 | }, 26 | 27 | applyQueryParameters(params) { 28 | const urlParams = this.getParametersFromUrl() 29 | Object.assign(params, urlParams || {}) 30 | return params 31 | }, 32 | 33 | saveParametersToPreferences() { 34 | preferences.setObjectPreference( 35 | `parameters:${this.parameterNamespace}`, 36 | this.parameters 37 | ) 38 | }, 39 | 40 | getParametersFromPreferences(defaultParameters) { 41 | return ( 42 | preferences.getObjectPreference( 43 | `parameters:${this.parameterNamespace}` 44 | ) || defaultParameters 45 | ) 46 | } 47 | }, 48 | 49 | watch: { 50 | parameters: { 51 | deep: true, 52 | handler() { 53 | this.applyParametersToUrl() 54 | this.saveParametersToPreferences() 55 | } 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/components/mixins/time.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Set of functions to facilitate usage of a date and timezones. 3 | */ 4 | import moment from 'moment-timezone' 5 | 6 | import { formatFullDateWithTimezone } from '@/lib/time' 7 | 8 | export const timeMixin = { 9 | computed: { 10 | timezone() { 11 | return this.user.timezone || moment.tz.guess() 12 | }, 13 | 14 | today() { 15 | return moment().toDate() 16 | } 17 | }, 18 | 19 | methods: { 20 | formatDate(eventDate) { 21 | return formatFullDateWithTimezone(eventDate, this.timezone) 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/components/modals/BaseModal.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 59 | 60 | 69 | -------------------------------------------------------------------------------- /src/components/modals/ConfirmModal.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 70 | 71 | 79 | -------------------------------------------------------------------------------- /src/components/modals/ModalFooter.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 59 | 60 | 73 | -------------------------------------------------------------------------------- /src/components/modals/base_modal.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Mixin to add common features to modals including: 3 | * 4 | * * Close modal by using the escape key. 5 | */ 6 | 7 | export const modalMixin = { 8 | beforeUnmount() { 9 | window.removeEventListener('keydown', this.onKeyDown) 10 | }, 11 | 12 | methods: { 13 | /* 14 | * Allow to close the modal when escape key is pressed. 15 | */ 16 | onKeyDown(event) { 17 | if (event.key === 'Escape') { 18 | this.$emit('cancel') 19 | } 20 | } 21 | }, 22 | 23 | watch: { 24 | /* 25 | * Make sure that the keydown event is removed each time the modal is hidden. 26 | */ 27 | active: { 28 | immediate: true, 29 | handler() { 30 | if (this.active) { 31 | window.addEventListener('keydown', this.onKeyDown, false) 32 | } else { 33 | window.removeEventListener('keydown', this.onKeyDown) 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/components/pages/Brief.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 39 | 40 | 54 | -------------------------------------------------------------------------------- /src/components/pages/Logs.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 65 | 66 | 80 | -------------------------------------------------------------------------------- /src/components/pages/NotFound.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 19 | 20 | 42 | -------------------------------------------------------------------------------- /src/components/pages/ServerDown.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 32 | 33 | 61 | -------------------------------------------------------------------------------- /src/components/pages/WrongBrowser.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 15 | -------------------------------------------------------------------------------- /src/components/tops/actions/DeleteEntities.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 49 | 50 | 58 | -------------------------------------------------------------------------------- /src/components/widgets/AssignationItem.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 51 | -------------------------------------------------------------------------------- /src/components/widgets/BigThumbnailsButton.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 69 | 70 | 75 | -------------------------------------------------------------------------------- /src/components/widgets/BooleanRep.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 37 | 38 | 43 | -------------------------------------------------------------------------------- /src/components/widgets/ButtonHrefLink.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 56 | 57 | 69 | -------------------------------------------------------------------------------- /src/components/widgets/ButtonLink.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 66 | -------------------------------------------------------------------------------- /src/components/widgets/ComboboxBoolean.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 61 | -------------------------------------------------------------------------------- /src/components/widgets/ComboboxMask.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 23 | -------------------------------------------------------------------------------- /src/components/widgets/CommentMenu.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 41 | 42 | 70 | -------------------------------------------------------------------------------- /src/components/widgets/DepartmentName.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 34 | 35 | 57 | -------------------------------------------------------------------------------- /src/components/widgets/ErrorText.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 32 | -------------------------------------------------------------------------------- /src/components/widgets/GroupButton.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 25 | 26 | 62 | -------------------------------------------------------------------------------- /src/components/widgets/InfoQuestionMark.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 40 | 41 | 73 | -------------------------------------------------------------------------------- /src/components/widgets/ListPageHeader.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 54 | -------------------------------------------------------------------------------- /src/components/widgets/PageSubtitle.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 16 | 17 | 24 | -------------------------------------------------------------------------------- /src/components/widgets/PageTitle.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 28 | 29 | 40 | -------------------------------------------------------------------------------- /src/components/widgets/PeopleName.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 35 | 36 | 41 | -------------------------------------------------------------------------------- /src/components/widgets/PreviewRow.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 45 | 46 | 71 | -------------------------------------------------------------------------------- /src/components/widgets/RouteSectionTabs.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 51 | 52 | 61 | -------------------------------------------------------------------------------- /src/components/widgets/RouteTabs.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 37 | 38 | 47 | -------------------------------------------------------------------------------- /src/components/widgets/SortingInfo.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 37 | 38 | 43 | -------------------------------------------------------------------------------- /src/components/widgets/Spinner.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 48 | -------------------------------------------------------------------------------- /src/components/widgets/StatusStats.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 40 | 41 | 73 | -------------------------------------------------------------------------------- /src/components/widgets/StudioName.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 34 | 35 | 57 | -------------------------------------------------------------------------------- /src/components/widgets/SubscribeButton.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 39 | -------------------------------------------------------------------------------- /src/components/widgets/TableInfo.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 38 | -------------------------------------------------------------------------------- /src/components/widgets/TableMetadataHeaderMenu.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 41 | 42 | 67 | -------------------------------------------------------------------------------- /src/components/widgets/TextareaField.vue: -------------------------------------------------------------------------------- 1 |