{"version":3,"file":"js/app.114971bf.js","mappings":"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","sources":["webpack://cow-images-annotation-tool/./src/lib/store/holder/abstract/AbstractStore.ts","webpack://cow-images-annotation-tool/./src/lib/store/holder/file/CsvStore.ts","webpack://cow-images-annotation-tool/./src/lib/store/holder/file/FilesStore.ts","webpack://cow-images-annotation-tool/./src/lib/store/holder/media/ImagesStore.ts","webpack://cow-images-annotation-tool/./src/lib/store/holder/media/MediasStore.ts","webpack://cow-images-annotation-tool/./src/lib/store/holder/media/VideosStore.ts","webpack://cow-images-annotation-tool/./src/lib/store/holder/popup/PopUpsStore.ts","webpack://cow-images-annotation-tool/./src/lib/store/index.ts","webpack://cow-images-annotation-tool/./src/lib/common/utilities/StringUtilities.ts","webpack://cow-images-annotation-tool/./src/lib/store/validator/center/abstract/enum/ON_INVALID_DO.ts","webpack://cow-images-annotation-tool/./src/lib/common/decorators/final.ts","webpack://cow-images-annotation-tool/./src/lib/store/validator/validator/abstract/AbstractValidator.ts","webpack://cow-images-annotation-tool/./src/lib/store/validator/validator/common/IsNotNullLikeValidator.ts","webpack://cow-images-annotation-tool/./src/lib/store/validator/center/abstract/AbstractValidatorCenter.ts","webpack://cow-images-annotation-tool/./src/lib/store/validator/center/base/BaseValidatorCenter.ts","webpack://cow-images-annotation-tool/./src/lib/store/manager/abstract/AbstractSubStoreManager.ts","webpack://cow-images-annotation-tool/./src/lib/store/manager/abstract/AbstractStoreManager.ts","webpack://cow-images-annotation-tool/./src/lib/store/manager/popup/PopUpsStoreManager.ts","webpack://cow-images-annotation-tool/./src/lib/components/layout/menu/MenuHeader.vue?77ef","webpack://cow-images-annotation-tool/./src/lib/components/layout/menu/MenuHeader.vue","webpack://cow-images-annotation-tool/./src/lib/components/flexible/ScrollableElement.vue?a1a5","webpack://cow-images-annotation-tool/./src/lib/components/flexible/ScrollableElement.vue","webpack://cow-images-annotation-tool/./src/lib/components/layout/menu/MenuFooter.vue?6d43","webpack://cow-images-annotation-tool/./src/lib/components/layout/menu/MenuFooter.vue?6e3b","webpack://cow-images-annotation-tool/./src/lib/components/layout/menu/MenuFooter.vue","webpack://cow-images-annotation-tool/./src/lib/components/layout/menu/MenuLayout.vue?3dae","webpack://cow-images-annotation-tool/./src/lib/components/layout/menu/MenuLayout.vue","webpack://cow-images-annotation-tool/./src/layouts/LeftMenu.vue?f59b","webpack://cow-images-annotation-tool/./src/layouts/LeftMenu.vue","webpack://cow-images-annotation-tool/./src/data/popup/UserManualData.ts","webpack://cow-images-annotation-tool/./src/lib/components/layout/page/PageHeader.vue?2b49","webpack://cow-images-annotation-tool/./src/lib/components/layout/page/PageHeader.vue","webpack://cow-images-annotation-tool/./src/lib/components/popup/PopUp.vue?9ac7","webpack://cow-images-annotation-tool/./src/lib/components/popup/PopUp.vue","webpack://cow-images-annotation-tool/./src/lib/components/popup/UserManual.vue?8fd1","webpack://cow-images-annotation-tool/./src/lib/components/popup/UserManual.vue","webpack://cow-images-annotation-tool/./src/lib/components/layout/BaseLayout.vue","webpack://cow-images-annotation-tool/./src/lib/components/layout/BaseLayout.vue?3406","webpack://cow-images-annotation-tool/./src/utilities/konami.ts","webpack://cow-images-annotation-tool/./src/lib/common/interfaces/gsap/index.ts","webpack://cow-images-annotation-tool/./src/components/fun/KonamiEvent.vue?0fe7","webpack://cow-images-annotation-tool/./src/components/fun/KonamiEvent.vue","webpack://cow-images-annotation-tool/./src/layouts/AppLayout.vue?b3be","webpack://cow-images-annotation-tool/./src/layouts/AppLayout.vue","webpack://cow-images-annotation-tool/./src/lib/components/form/file/FileSelector.vue?40a9","webpack://cow-images-annotation-tool/./src/lib/components/form/file/FileSelector.vue","webpack://cow-images-annotation-tool/./src/lib/components/form/file/auto-storing/AutoStoringFileSelector.vue?5583","webpack://cow-images-annotation-tool/./src/lib/components/form/file/auto-storing/AutoStoringFileSelector.vue","webpack://cow-images-annotation-tool/./src/lib/store/manager/media/MediasStoreManager.ts","webpack://cow-images-annotation-tool/./src/lib/store/manager/media/ImagesStoreManager.ts","webpack://cow-images-annotation-tool/./src/lib/components/form/file/auto-storing/ImageSelector.vue?96a6","webpack://cow-images-annotation-tool/./src/lib/components/form/file/auto-storing/ImageSelector.vue","webpack://cow-images-annotation-tool/./src/lib/components/layout/menu/SubMenu.vue?a67b","webpack://cow-images-annotation-tool/./src/lib/components/layout/menu/SubMenu.vue","webpack://cow-images-annotation-tool/./src/lib/components/UI/enum/ButtonMargin.ts","webpack://cow-images-annotation-tool/./src/lib/components/UI/ButtonGroup.vue?bf44","webpack://cow-images-annotation-tool/./src/lib/components/UI/ButtonGroup.vue","webpack://cow-images-annotation-tool/./src/lib/store/manager/file/FilesStoreManager.ts","webpack://cow-images-annotation-tool/./src/lib/components/form/file/auto-storing/JsonSelector.vue?02d7","webpack://cow-images-annotation-tool/./src/lib/components/form/file/auto-storing/JsonSelector.vue","webpack://cow-images-annotation-tool/./src/data/annotation/enum/AnnotationType.ts","webpack://cow-images-annotation-tool/./src/lib/common/helpers/FileHelper.ts","webpack://cow-images-annotation-tool/./src/store/Spatial2DAnnotation/validator/center/BoxBoundedAnnotatedImageValidatorCenter.ts","webpack://cow-images-annotation-tool/./src/config.ts","webpack://cow-images-annotation-tool/./src/data/annotation/enum/DefaultAnnotatableBodyPart.ts","webpack://cow-images-annotation-tool/./src/lib/store/validator/validator/annotation/IsWithinXInstancesOfTypeValidator.ts","webpack://cow-images-annotation-tool/./src/lib/store/validator/validator/common/IsNumberBetweenValidator.ts","webpack://cow-images-annotation-tool/./src/store/Spatial2DAnnotation/validator/center/Spatial2DBoundingBoxValidatorCenter.ts","webpack://cow-images-annotation-tool/./src/store/Spatial2DAnnotation/validator/center/Spatial2DDotAnnotationValidatorCenter.ts","webpack://cow-images-annotation-tool/./src/store/Spatial2DAnnotation/manager/subManager/Spatial2DDotAnnotationManager.ts","webpack://cow-images-annotation-tool/./src/data/annotation/DefaultAnnotatableBodyPartsDisplayParams.ts","webpack://cow-images-annotation-tool/./src/store/Spatial2DAnnotation/manager/AnnotatableBodyPartDisplayParamsStoreManager.ts","webpack://cow-images-annotation-tool/./src/store/Spatial2DAnnotation/manager/subManager/Spatial2DBoundingBoxManager.ts","webpack://cow-images-annotation-tool/./src/store/Spatial2DAnnotation/manager/AnnotatableImagesStoreManager.ts","webpack://cow-images-annotation-tool/./src/views/CowImagesAnnotation/CowImagesAnnotationLeftMenu.vue?bbfa","webpack://cow-images-annotation-tool/./src/views/CowImagesAnnotation/CowImagesAnnotationLeftMenu.vue","webpack://cow-images-annotation-tool/./src/lib/components/flexible/enum/AspectRatio.ts","webpack://cow-images-annotation-tool/./src/lib/components/layout/page/enum/PageContentLayoutSpaceTaken.ts","webpack://cow-images-annotation-tool/./src/lib/components/frame/carousel/enum/CarouselShortcutType.ts","webpack://cow-images-annotation-tool/./src/lib/components/frame/overlay/FrameOverlay.vue?4947","webpack://cow-images-annotation-tool/./src/lib/components/frame/overlay/FrameOverlay.vue","webpack://cow-images-annotation-tool/./src/lib/common/utilities/DomUtilities.ts","webpack://cow-images-annotation-tool/./src/lib/components/frame/image/OverlayableImage.vue?709a","webpack://cow-images-annotation-tool/./src/lib/components/frame/image/OverlayableImage.vue","webpack://cow-images-annotation-tool/./src/lib/common/helpers/ShortcutsManager.ts","webpack://cow-images-annotation-tool/./src/lib/components/frame/carousel/CarouselControlsBar.vue?f67b","webpack://cow-images-annotation-tool/./src/lib/components/frame/carousel/CarouselControlsBar.vue","webpack://cow-images-annotation-tool/./src/lib/components/frame/carousel/image/OverlayableImagesCarousel.vue?b05f","webpack://cow-images-annotation-tool/./src/lib/components/frame/carousel/image/OverlayableImagesCarousel.vue","webpack://cow-images-annotation-tool/./src/lib/components/flexible/AspectRatioedElement.vue?5513","webpack://cow-images-annotation-tool/./src/lib/components/flexible/AspectRatioedElement.vue","webpack://cow-images-annotation-tool/./src/lib/components/layout/page/enum/PageContentLayoutPositioning.ts","webpack://cow-images-annotation-tool/./src/lib/components/layout/page/enum/PageContentLayoutSpaceTakenPaddings.ts","webpack://cow-images-annotation-tool/./src/lib/components/layout/page/PageContent.vue?db29","webpack://cow-images-annotation-tool/./src/lib/components/layout/page/PageContent.vue","webpack://cow-images-annotation-tool/./src/layouts/AppPage.vue?f6f4","webpack://cow-images-annotation-tool/./src/layouts/AppPage.vue","webpack://cow-images-annotation-tool/./src/lib/common/helpers/CursorHelper.ts","webpack://cow-images-annotation-tool/./src/components/frame/image/annotation/DotAnnotation.vue?20ec","webpack://cow-images-annotation-tool/./src/components/frame/image/annotation/DotAnnotation.vue","webpack://cow-images-annotation-tool/./src/components/frame/image/annotation/ConnectionLine.vue?1b1e","webpack://cow-images-annotation-tool/./src/components/frame/image/annotation/ConnectionLine.vue","webpack://cow-images-annotation-tool/./src/components/frame/image/annotation/DotAnnotations.vue?63ff","webpack://cow-images-annotation-tool/./src/components/frame/image/annotation/DotAnnotations.vue","webpack://cow-images-annotation-tool/./src/lib/components/flexible/DraggableResizableElement.vue?faef","webpack://cow-images-annotation-tool/./src/lib/components/flexible/DraggableResizableElement.vue","webpack://cow-images-annotation-tool/./src/components/frame/image/annotation/enum/BoundingBoxShortcutType.ts","webpack://cow-images-annotation-tool/./src/components/frame/image/annotation/Spatial2DBoundingBox.vue?4636","webpack://cow-images-annotation-tool/./src/components/frame/image/annotation/Spatial2DBoundingBox.vue","webpack://cow-images-annotation-tool/./src/components/frame/image/annotation/BoundingBoxOverlay.vue?40d8","webpack://cow-images-annotation-tool/./src/components/frame/image/annotation/BoundingBoxOverlay.vue","webpack://cow-images-annotation-tool/./src/views/CowImagesAnnotation/CowImagesAnnotationPage.vue?5877","webpack://cow-images-annotation-tool/./src/views/CowImagesAnnotation/CowImagesAnnotationPage.vue","webpack://cow-images-annotation-tool/./src/lib/components/layout/page/PageFooter.vue","webpack://cow-images-annotation-tool/./src/lib/components/layout/page/PageFooter.vue?db65","webpack://cow-images-annotation-tool/./src/lib/common/utilities/FlowUtilities.ts","webpack://cow-images-annotation-tool/./src/lib/common/utilities/CsvUtilities.ts","webpack://cow-images-annotation-tool/./src/lib/common/helpers/type/BlobFile.ts","webpack://cow-images-annotation-tool/./src/lib/common/helpers/type/DownloadableResource.ts","webpack://cow-images-annotation-tool/./src/lib/common/utilities/ImageUtilities.ts","webpack://cow-images-annotation-tool/./src/lib/common/helpers/DownloadHelper.ts","webpack://cow-images-annotation-tool/./src/helpers/AnnotatableImagesDownloadHelper.ts","webpack://cow-images-annotation-tool/./src/views/CowImagesAnnotation/CowImagesAnnotationFooter.vue?deb7","webpack://cow-images-annotation-tool/./src/views/CowImagesAnnotation/CowImagesAnnotationFooter.vue","webpack://cow-images-annotation-tool/./src/views/CowImagesAnnotation/CowImagesAnnotationView.vue?2c8c","webpack://cow-images-annotation-tool/./src/views/CowImagesAnnotation/CowImagesAnnotationView.vue","webpack://cow-images-annotation-tool/./src/router/index.ts","webpack://cow-images-annotation-tool/./src/App.vue","webpack://cow-images-annotation-tool/./src/App.vue?7ccd","webpack://cow-images-annotation-tool/./src/main.ts","webpack://cow-images-annotation-tool/./src/store/Spatial2DAnnotation/holder/AnnotatableBodyPartDisplayParamsStore.ts","webpack://cow-images-annotation-tool/./src/store/Spatial2DAnnotation/holder/AnnotatableImagesStore.ts","webpack://cow-images-annotation-tool/./src/lib/store/holder/ sync ^((","webpack://cow-images-annotation-tool/./src/store/ sync ^((","webpack://cow-images-annotation-tool/webpack/bootstrap","webpack://cow-images-annotation-tool/webpack/runtime/chunk loaded","webpack://cow-images-annotation-tool/webpack/runtime/compat get default export","webpack://cow-images-annotation-tool/webpack/runtime/define property getters","webpack://cow-images-annotation-tool/webpack/runtime/global","webpack://cow-images-annotation-tool/webpack/runtime/hasOwnProperty shorthand","webpack://cow-images-annotation-tool/webpack/runtime/make namespace object","webpack://cow-images-annotation-tool/webpack/runtime/node module decorator","webpack://cow-images-annotation-tool/webpack/runtime/publicPath","webpack://cow-images-annotation-tool/webpack/runtime/jsonp chunk loading","webpack://cow-images-annotation-tool/webpack/startup"],"sourcesContent":["import {Mutation, VuexModule} from \"vuex-module-decorators\";\nimport {Module as Mod} from \"vuex\";\nimport {SStoreData} from \"@/lib/store/model/abstract/SStoreData\";\n\n/**\n * Please make sure to make all your store classes extend this one or one of its children.\n *\n * This store module is an interface for general framework working purpose.\n * To make it work, you can do something similar to what's described here : https://github.com/championswimmer/vuex-module-decorators/issues/203#issuecomment-562924885\n */\nexport class AbstractStore> extends VuexModule\n{\n protected _entries: D[];\n\n constructor(module: Mod) {\n super(module);\n this.populate();\n this._entries = [];\n }\n\n get entries()\n {\n return this._entries;\n }\n\n get byInstanceId()\n {\n const _this = this;\n\n return function (instanceId: string, strict?: boolean): D|undefined\n {\n const entry = _this._entries.filter(entry => entry.instanceId === instanceId)\n const result = entry.length ? entry[0] : undefined;\n\n if (strict && typeof result === \"undefined\")\n throw \"Can't find entry of instanceId \"+ instanceId +\" on strict mode\";\n\n return result;\n }\n }\n\n @Mutation\n add(entry: D)\n {\n this._entries.push(entry);\n }\n\n @Mutation\n setByInstanceId({entry, instanceId}: {entry: D, instanceId: string})\n {\n this._entries[Object.keys(this._entries).filter(key => this._entries[key as unknown as number].instanceId === instanceId)[0] as unknown as number] = entry;\n }\n\n @Mutation\n removeByInstanceId(instanceId: string)\n {\n this._entries = this._entries.filter(entry => entry.instanceId !== instanceId);\n }\n\n @Mutation\n reset()\n {\n this._entries = [];\n }\n\n /**\n * To benefit from extendable stores, you need to extend this method.\n * When doing so, copy its content and uncomment it in your child store.\n * Then, replace ParentStore by the parent class (example : AbstractStore),\n * and ThisStore by your store class (ex : FilesStore).\n */\n public populate() {\n // // Get wrapped parent module to access getters\n // const base: any = Module({})(ParentStore);\n // // Copy parent getters to this store\n // Object.assign(ThisStore.getters, base.getters);\n // Object.assign(ThisStore.mutations, base.mutations);\n }\n}","import {Module} from \"vuex-module-decorators\";\nimport {SCsvData} from \"@/lib/store/model/file/SCsvData\";\nimport {FilesStore} from \"@/lib/store/holder/file/FilesStore\";\n\n@Module({\n name: \"CsvStore\",\n namespaced: true,\n stateFactory: true\n})\nexport class CsvStore extends FilesStore\n{\n public populate()\n {\n // Get wrapped parent module to access getters\n const base: any = Module({})(FilesStore);\n // Copy parent getters to child\n Object.assign(CsvStore.getters, base.getters);\n Object.assign(CsvStore.mutations, base.mutations);\n }\n}","import {Module } from \"vuex-module-decorators\";\nimport {SFileData} from \"@/lib/store/model/file/SFileData\";\nimport {AbstractStore} from \"@/lib/store/holder/abstract/AbstractStore\";\n\n@Module({\n name: \"FilesStore\",\n namespaced: true,\n stateFactory: true\n})\n\nexport class FilesStore extends AbstractStore\n{\n get filesData(): D[]\n {\n return this.entries;\n }\n\n get fileDataOfInstanceId()\n {\n return this.byInstanceId;\n }\n\n public populate()\n {\n // Get wrapped parent module to access getters\n const base: any = Module({})(AbstractStore);\n // Copy parent getters to child\n Object.assign(FilesStore.getters, base.getters);\n Object.assign(FilesStore.mutations, base.mutations);\n }\n}","import {Module} from 'vuex-module-decorators'\nimport {SImageData} from \"@/lib/store/model/media/SImageData\";\nimport {MediasStore} from \"@/lib/store/holder/media/MediasStore\";\n\n@Module({\n name: \"ImagesStore\",\n namespaced: true,\n stateFactory: true\n})\nexport class ImagesStore extends MediasStore\n{\n public populate()\n {\n // Get wrapped parent module to access getters\n const base: any = Module({})(MediasStore);\n // Copy parent getters to child\n Object.assign(ImagesStore.getters, base.getters);\n Object.assign(ImagesStore.mutations, base.mutations);\n }\n\n}","import {Module} from \"vuex-module-decorators\";\nimport {SMediaData} from \"@/lib/store/model/media/SMediaData\";\nimport {AbstractStore} from \"@/lib/store/holder/abstract/AbstractStore\";\n\n@Module({\n name: \"MediasStore\",\n namespaced: true,\n stateFactory: true\n})\nexport class MediasStore extends AbstractStore\n{\n get medias(): D[]\n {\n return this.entries;\n }\n\n get mediaOfInstanceId()\n {\n return this.byInstanceId;\n }\n\n public populate()\n {\n // Get wrapped parent module to access getters\n const base: any = Module({})(AbstractStore);\n // Copy parent getters to child\n Object.assign(MediasStore.getters, base.getters);\n Object.assign(MediasStore.mutations, base.mutations);\n }\n}","import {Module} from 'vuex-module-decorators'\nimport store from \"@/lib/store\";\nimport {SVideoData} from \"@/lib/store/model/media/SVideoData\";\nimport {MediasStore} from \"@/lib/store/holder/media/MediasStore\";\n\n@Module({\n name: \"VideosStore\",\n store: store,\n namespaced: true,\n stateFactory: true\n})\nexport class VideosStore extends MediasStore\n{\n public populate()\n {\n // Get wrapped parent module to access getters\n const base: any = Module({})(MediasStore);\n // Copy parent getters to child\n Object.assign(VideosStore.getters, base.getters);\n Object.assign(VideosStore.mutations, base.mutations);\n }\n}\n","import {Module, Mutation} from 'vuex-module-decorators'\nimport {SPopUpState} from \"@/lib/store/model/popup/SPopupState\";\nimport {AbstractStore} from \"@/lib/store/holder/abstract/AbstractStore\";\n\n@Module({\n name: \"PopUpsStore\",\n namespaced: true,\n stateFactory: true\n})\n\nexport class PopUpsStore extends AbstractStore\n{\n get popUpsStates()\n {\n return this.entries;\n }\n\n get popUpOfInstanceId()\n {\n return this.byInstanceId;\n }\n\n @Mutation\n setPopUpStateVisibility({ visibility, instanceId }: { visibility: boolean; instanceId: string})\n {\n this._entries.filter(popUpState => {\n if (popUpState.instanceId === instanceId)\n popUpState.isVisible = visibility;\n })\n }\n\n public populate()\n {\n // Get wrapped parent module to access getters\n const base: any = Module({})(AbstractStore);\n // Copy parent getters to child\n Object.assign(PopUpsStore.getters, base.getters);\n Object.assign(PopUpsStore.mutations, base.mutations);\n }\n}","import {createStore, ModuleTree} from 'vuex'\n\nconst context_lib = require.context('./holder', true, /^((?!Abstract).)*$/);\nconst context_app = require.context('./../../store', true, /^((?!Abstract).)*(Store)$/);\nconst modules: ModuleTree = {};\n\nconst registerContextToStore = (context: __WebpackModuleApi.RequireContext) =>\n{\n context.keys().forEach((file) => {\n\n const splitPath = file.split(\"/\");\n\n // create the module name from file\n const moduleName = splitPath[splitPath.length - 1];\n\n if (!moduleName.includes(\".ts\"))\n {\n // register file context under module name\n modules[moduleName] = (context(file).default || context(file))[moduleName];\n\n // override namespaced option\n modules[moduleName].namespaced = true;\n }\n });\n}\n\nregisterContextToStore(context_lib);\nregisterContextToStore(context_app);\n\n\nexport default createStore({\n strict: process.env.NODE_ENV !== 'production',\n modules: modules\n});","import {uuid} from \"vue-uuid\";\n\nexport const completeFilename = (filename: string, add: string) =>\n{\n const splitName = filename.split(\".\");\n\n if (splitName.length - 2 >= 0)\n splitName[splitName.length - 2] += add;\n else\n splitName[0] += add;\n\n return splitName.join(\".\");\n}\n\nexport const generateInstanceId = () => {\n return uuid.v4();\n}\n\nexport const spaceCamelCase = (camelCaseWord: string) => {\n return camelCaseWord.replace(/([a-z])([A-Z])/g, '$1 $2')\n}\n\nexport const removeExtensionFromFilename = (filename: string|String) => {\n return filename.replace(/\\.[^/.]+$/, \"\")\n}","export enum ON_INVALID_DO {\n SILENT = \"SILENT\",\n TRANSFORM = \"TRANSFORM\", // doesn't make the validation invalid but instead calls a transformer if the entity is still valid, before add() is called\n RETURN_ERROR = \"RETURN_ERROR\",\n CONSOLE_LOG = \"CONSOLE_LOG\",\n CONSOLE_ERROR = \"CONSOLE_ERROR\",\n THROW = \"THROW\",\n}","export function final(target: Object, key: string | symbol, descriptor: PropertyDescriptor) {\n descriptor.writable = false;\n}","import {final} from \"@/lib/common/decorators/final\";\nimport {ON_INVALID_DO} from \"@/lib/store/validator/center/abstract/enum/ON_INVALID_DO\";\nimport SingleValidationResult from \"@/lib/store/validator/center/abstract/type/SingleValidationResult\";\nimport {ModelTransformer} from \"@/lib/store/validator/transformer/ModelTransformer\";\n\n/**\n * This class represent a single validation pattern.\n * You can check IsNumberBetweenValidator for a practical application of it.\n *\n * : the type of the given value\n */\nexport abstract class AbstractValidator\n{\n protected onInvalidDo: ON_INVALID_DO;\n\n protected errorMessage: string = \"Validation Error\";\n\n protected constructor(onInvalidDo: ON_INVALID_DO)\n {\n this.onInvalidDo = onInvalidDo;\n }\n\n @final\n public validate(value: T): SingleValidationResult\n {\n const isValid = this.isValid(value);\n\n return {\n isValid: isValid,\n onInvalidDo: this.onInvalidDo,\n errorMessage: isValid ? \"\" : this.errorMessage,\n modelTransformer: this.modelTransformer,\n }\n }\n\n protected abstract isValid(value: T): boolean;\n\n public modelTransformer: ModelTransformer = (value: T): T => { return value; };\n}","import {AbstractValidator} from \"@/lib/store/validator/validator/abstract/AbstractValidator\";\nimport {ON_INVALID_DO} from \"@/lib/store/validator/center/abstract/enum/ON_INVALID_DO\";\n\n/**\n * Checks if null or undefined\n */\nexport class IsNotNullLikeValidator extends AbstractValidator\n{\n protected errorMessage = \"The given data %data% cannot be null or undefined\";\n\n constructor({onInvalidDo}: {onInvalidDo: ON_INVALID_DO})\n {\n super(onInvalidDo);\n }\n\n protected isValid(value: any): boolean\n {\n this.errorMessage = this.errorMessage\n .replace(\"%data%\", \"\" + value)\n\n return !( value === null || typeof value === \"undefined\" );\n }\n}","import {final} from \"@/lib/common/decorators/final\";\nimport EncapsulatedValidator from \"./type/EncapsulatedValidator\";\nimport ValidationResult from \"@/lib/store/validator/center/abstract/type/ValidationResult\";\nimport SingleValidationResult from \"@/lib/store/validator/center/abstract/type/SingleValidationResult\";\nimport {ON_INVALID_DO} from \"@/lib/store/validator/center/abstract/enum/ON_INVALID_DO\";\nimport {AssignedModelTransformer} from \"@/lib/store/validator/transformer/ModelTransformer\";\nimport {SStoreData} from \"@/lib/store/model/abstract/SStoreData\";\nimport {IsNotNullLikeValidator} from \"@/lib/store/validator/validator/common/IsNotNullLikeValidator\";\n\n/**\n * This class handles an entity type's validation.\n * It comprises all its validators encapsulated with the getter to get the data to test.\n * Also, if requested by the validators and the entity validated, it will transform the entity. (see ON_INVALID_DO.TRANSFORM)\n *\n * By descending this class, you only should need to define the encapsulatedValidators and then reference it in\n * the entity manager.\n */\nexport abstract class AbstractValidatorCenter\n{\n protected entity: D;\n\n protected abstract encapsulatedValidators: EncapsulatedValidator[];\n\n private baseValidators: EncapsulatedValidator[] = [\n {\n validator: new IsNotNullLikeValidator({onInvalidDo: ON_INVALID_DO.THROW}),\n getter: (entity: D) => entity.instanceId\n }\n ];\n\n constructor(entity: D)\n {\n this.entity = entity;\n\n this.fuseValidators();\n }\n\n private fuseValidators = () =>\n {\n if (!this.encapsulatedValidators)\n this.encapsulatedValidators = [];\n\n this.encapsulatedValidators = [\n ...this.baseValidators,\n ...this.encapsulatedValidators,\n ]\n }\n\n public setEntity(entity: D) {\n this.entity = entity;\n }\n\n @final\n public validateEntity(): ValidationResult\n {\n let isValid = true;\n\n const returnedErrors: string[] = [],\n transformersToApply: AssignedModelTransformer[] = [];\n\n this.encapsulatedValidators.forEach(encapsulatedValidator =>\n {\n encapsulatedValidator.result = encapsulatedValidator.validator.validate(encapsulatedValidator.getter(this.entity));\n });\n\n this.encapsulatedValidators.forEach(encapsulatedValidator =>\n {\n const validationResult = encapsulatedValidator.result as SingleValidationResult;\n\n if (!validationResult.isValid)\n {\n // there seems to be an error\n if (validationResult.onInvalidDo !== ON_INVALID_DO.TRANSFORM)\n isValid = false;\n\n switch (validationResult.onInvalidDo)\n {\n case ON_INVALID_DO.SILENT:\n case ON_INVALID_DO.TRANSFORM:\n // meh do nothing it's fine\n break;\n\n case ON_INVALID_DO.RETURN_ERROR:\n returnedErrors.push(validationResult.errorMessage);\n break;\n\n case ON_INVALID_DO.CONSOLE_LOG:\n console.log(validationResult.errorMessage)\n break;\n\n case ON_INVALID_DO.CONSOLE_ERROR:\n console.error(validationResult.errorMessage)\n break;\n\n case ON_INVALID_DO.THROW:\n throw validationResult.errorMessage;\n }\n }\n })\n\n if (isValid)\n {\n this.transformEntity();\n }\n\n return {\n isValid: isValid,\n errorMessages: returnedErrors,\n transformedEntity: this.entity\n };\n }\n\n protected transformEntity()\n {\n this.encapsulatedValidators.forEach(encapsulatedValidator =>\n {\n if (\n encapsulatedValidator.result?.onInvalidDo === ON_INVALID_DO.TRANSFORM\n && !encapsulatedValidator.result.isValid\n )\n {\n if (!encapsulatedValidator.setter)\n throw \"No setter defined despite ON_INVALID_DO.TRANSFORM set\";\n\n encapsulatedValidator.setter(this.entity, encapsulatedValidator.validator.modelTransformer(encapsulatedValidator.getter(this.entity)));\n }\n });\n }\n}","import {ON_INVALID_DO} from \"@/lib/store/validator/center/abstract/enum/ON_INVALID_DO\";\nimport {AbstractValidatorCenter} from \"@/lib/store/validator/center/abstract/AbstractValidatorCenter\";\nimport EncapsulatedValidator from \"@/lib/store/validator/center/abstract/type/EncapsulatedValidator\";\nimport {SStoreData} from \"@/lib/store/model/abstract/SStoreData\";\nimport {IsNotNullLikeValidator} from \"@/lib/store/validator/validator/common/IsNotNullLikeValidator\";\n\nexport class BaseValidatorCenter extends AbstractValidatorCenter\n{\n protected encapsulatedValidators: EncapsulatedValidator[] =\n [\n {\n validator: new IsNotNullLikeValidator({onInvalidDo: ON_INVALID_DO.THROW}),\n getter: (entity: SStoreData) => entity.instanceId\n },\n ];\n}","import {generateInstanceId} from \"@/lib/common/utilities/StringUtilities\";\nimport {AbstractValidatorCenter} from \"@/lib/store/validator/center/abstract/AbstractValidatorCenter\";\nimport {BaseValidatorCenter} from \"@/lib/store/validator/center/base/BaseValidatorCenter\";\nimport {SStoreData} from \"@/lib/store/model/abstract/SStoreData\";\nimport ValidationResult from \"@/lib/store/validator/center/abstract/type/ValidationResult\";\n\nexport abstract class AbstractSubStoreManager\n{\n public static createInstanceId(defaultInstanceId: string|void)\n {\n return defaultInstanceId ? defaultInstanceId : generateInstanceId();\n }\n\n private trySetInstanceId(entity: D)\n {\n if (!entity.instanceId)\n entity.instanceId = generateInstanceId();\n }\n\n public validate(entity: D): ValidationResult\n {\n const validationResult = this.getValidatorCenterForEntity(entity).validateEntity();\n\n if (!validationResult.isValid)\n this.onValidationError(entity, validationResult.errorMessages.join(\"; \"));\n\n this.trySetInstanceId(entity);\n\n return validationResult;\n }\n\n protected getValidatorCenterForEntity(entity: D): AbstractValidatorCenter\n {\n return new BaseValidatorCenter(entity);\n }\n\n public onValidationError(entry: D, errors: string)\n {\n // TODO code a proper error handler\n console.error(entry);\n throw \"Error validating the entry (logged just up there) : \" + errors;\n }\n}","import {AbstractStore} from \"@/lib/store/holder/abstract/AbstractStore\";\nimport {SStoreData} from \"@/lib/store/model/abstract/SStoreData\";\nimport {AbstractSubStoreManager} from \"@/lib/store/manager/abstract/AbstractSubStoreManager\";\n\nexport abstract class AbstractStoreManagerBuilder, D extends SStoreData> extends AbstractSubStoreManager\n{\n protected abstract _store: AbstractStore;\n\n get store(): S\n {\n return this._store as S;\n }\n\n public add(entry: D)\n {\n const result = this.validate(entry);\n\n if (!result.isValid)\n throw \"Invalid new store entry of instanceId : \" + entry.instanceId;\n\n this._store.add(result.transformedEntity);\n\n return result.transformedEntity.instanceId;\n }\n\n public reset(): void {\n this._store.reset();\n }\n}","import {getModule} from \"vuex-module-decorators\";\nimport store from \"../..\";\nimport {PopUpsStore} from \"@/lib/store/holder/popup/PopUpsStore\";\nimport {SPopUpState} from \"@/lib/store/model/popup/SPopupState\";\nimport {AbstractStoreManagerBuilder} from \"@/lib/store/manager/abstract/AbstractStoreManager\";\n\nexport const defaultPopUpsInstanceIds = {\n userManual: \"userManual\"\n}\n\nexport class PopUpsStoreManagerBuilder, D extends SPopUpState> extends AbstractStoreManagerBuilder\n{\n protected _store: PopUpsStore = getModule(PopUpsStore, store);\n\n protected createPopupState(defaultVisibility: boolean = false, defaultInstanceId: string|void): SPopUpState\n {\n return {\n instanceId: AbstractStoreManagerBuilder.createInstanceId(defaultInstanceId),\n isVisible: defaultVisibility\n }\n }\n\n public registerPopUp(defaultVisibility: boolean = false, defaultInstanceId: string|undefined = undefined)\n {\n return this.add(\n this.createPopupState(defaultVisibility, defaultInstanceId) as D,\n );\n }\n}\n\nexport const PopUpsStoreManager = new PopUpsStoreManagerBuilder();","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9c1a4a6e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"header\" }\nconst _hoisted_2 = { class: \"logo\" }\nconst _hoisted_3 = [\"src\"]\nconst _hoisted_4 = [\"src\"]\n\nimport {defaultPopUpsInstanceIds, PopUpsStoreManager} from \"@/lib/store/manager/popup/PopUpsStoreManager\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'MenuHeader',\n props: {\n headerText: String,\n mainIcon: {\n type: String,\n required: true,\n },\n},\n setup(__props) {\n\n\n\n\nconst openUserManual = () => {\n PopUpsStoreManager.store.setPopUpStateVisibility({\n visibility: true,\n instanceId: defaultPopUpsInstanceIds.userManual\n });\n}\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"img\", {\n src: __props.mainIcon,\n alt: \"icon\"\n }, null, 8, _hoisted_3)\n ]),\n _createElementVNode(\"h1\", null, _toDisplayString(__props.headerText), 1),\n _createElementVNode(\"div\", {\n class: \"icon background-transition\",\n onClick: openUserManual\n }, [\n _createElementVNode(\"img\", {\n src: require('@/lib/assets/img/icons/question-mark.svg'),\n alt: \"display the user manual\"\n }, null, 8, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./MenuHeader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./MenuHeader.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./MenuHeader.vue?vue&type=style&index=0&id=9c1a4a6e&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9c1a4a6e\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nimport {onMounted, ref, Ref} from \"vue\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'ScrollableElement',\n props: {\n isHorizontalScroll: Boolean\n},\n setup(__props, { expose }) {\n\nconst props = __props\n\n\n\n\nconst scrollable: Ref = ref();\n\nconst scrollHorizontally = (e: WheelEvent) =>\n{\n if (props.isHorizontalScroll)\n {\n e.preventDefault();\n e.stopPropagation();\n\n if (scrollable.value)\n {\n const race = 45; // How many pixels to scroll\n\n if (e.deltaY > 0) // Scroll right\n scrollable.value.scrollLeft += race;\n else // Scroll left\n scrollable.value.scrollLeft -= race;\n }\n }\n}\n\n\nonMounted(() =>\n{\n if (scrollable.value)\n {\n scrollable.value.addEventListener(\"wheel\", scrollHorizontally);\n }\n})\n\n// ------------------------------\n// Ref exposition\n// ------------------------------\n\nexpose({\n scrollable\n})\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass('scrollable ' + (__props.isHorizontalScroll ? 'horizontal' : '')),\n ref_key: \"scrollable\",\n ref: scrollable\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 2))\n}\n}\n\n})","import script from \"./ScrollableElement.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ScrollableElement.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./ScrollableElement.vue?vue&type=style&index=0&id=ea6ce50e&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-ea6ce50e\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-e1904374\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"footer\" }\nconst _hoisted_2 = { class: \"copy\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.footerText), 1)\n ]))\n}","\n\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'MenuFooter',\n props: {\n footerText: {\n type: String,\n required: true\n },\n },\n});\n\n","import { render } from \"./MenuFooter.vue?vue&type=template&id=e1904374&scoped=true&ts=true\"\nimport script from \"./MenuFooter.vue?vue&type=script&lang=ts\"\nexport * from \"./MenuFooter.vue?vue&type=script&lang=ts\"\n\nimport \"./MenuFooter.vue?vue&type=style&index=0&id=e1904374&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e1904374\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, renderSlot as _renderSlot, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5dea8926\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"menu\" }\nconst _hoisted_2 = { class: \"header-container\" }\nconst _hoisted_3 = { class: \"footer-container\" }\n\nimport MenuHeader from \"@/lib/components/layout/menu/MenuHeader.vue\";\nimport ScrollableElement from \"@/lib/components/flexible/ScrollableElement.vue\";\nimport MenuFooter from \"@/lib/components/layout/menu/MenuFooter.vue\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'MenuLayout',\n props: {\n headerText: {\n type: String,\n required: true\n },\n footerText: {\n type: String,\n required: true\n },\n},\n setup(__props) {\n\n\n\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"nav\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(MenuHeader, {\n \"header-text\": __props.headerText,\n \"main-icon\": require(`@/assets/logo.png`)\n }, null, 8, [\"header-text\", \"main-icon\"])\n ]),\n _createVNode(ScrollableElement, { class: \"submenus-container\" }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }),\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(MenuFooter, { \"footer-text\": __props.footerText }, null, 8, [\"footer-text\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./MenuLayout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./MenuLayout.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./MenuLayout.vue?vue&type=style&index=0&id=5dea8926&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5dea8926\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport MenuLayout from \"@/lib/components/layout/menu/MenuLayout.vue\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'LeftMenu',\n setup(__props) {\n\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(MenuLayout, {\n headerText: 'Mammal annotator',\n footerText: 'Copyright © 2023 Webfarmer',\n onOpenHelp: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('open_help')))\n }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }))\n}\n}\n\n})","import script from \"./LeftMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./LeftMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./LeftMenu.vue?vue&type=style&index=0&id=18cb1e3e&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-18cb1e3e\"]])\n\nexport default __exports__","export default class UserManualData\n{\n public static messages = [\n {\n title: 'Concept',\n content: 'First, load images of mammals. Then, spawn a bounding box and adjust it so one mammal just fits in. Then, with your mouse, click inside the bounding box to indicate its body parts. Add one bounding box per mammal and continue. Finally, download your annotations using the \"Download JSON\" button on the bottom of the screen. You can also load your annotations on unannotated images.',\n },\n {\n title: 'Adding a bounding box',\n content: 'Press the Space Bar or click on「Add bounding box」button',\n },\n {\n title: 'Adding a body part annotation',\n content: 'Left Click inside the selected bounding box to add a body part annotation. This will make you switch to the next spawnable body part annotation if there is any left.',\n },\n {\n title: 'Removing a body part annotation',\n content: 'Press Ctrl + Right Click on the body part annotation you wish to remove.',\n },\n {\n title: 'Switching to the previous spawnable body part annotation',\n content: 'Scroll Up.',\n },\n {\n title: 'Switching to the next spawnable body part annotation',\n content: 'Scroll Down.',\n },\n {\n title: 'Remove all bounding boxes and their annotations from the current image',\n content: 'Press the Escape Key',\n },\n ]\n}\n\n","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-635c42e8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"header-content\" }\nconst _hoisted_2 = { class: \"navbar navbar-expand\" }\nconst _hoisted_3 = { class: \"navbar-left\" }\nconst _hoisted_4 = { class: \"navbar-right\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"sub-header\"\n}\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'PageHeader',\n props: {\n hasSubHeader: Boolean,\n},\n setup(__props) {\n\n\n\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"header\", null, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _renderSlot(_ctx.$slots, \"header-content-left\")\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _renderSlot(_ctx.$slots, \"header-content-right\")\n ])\n ]),\n (__props.hasSubHeader)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _renderSlot(_ctx.$slots, \"sub-header-content\")\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./PageHeader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PageHeader.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PageHeader.vue?vue&type=style&index=0&id=635c42e8&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-635c42e8\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderSlot as _renderSlot, withCtx as _withCtx, createVNode as _createVNode, normalizeClass as _normalizeClass, withModifiers as _withModifiers, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3c80d3ee\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"onClick\"]\nconst _hoisted_2 = { class: \"icon icon-button\" }\nconst _hoisted_3 = [\"src\"]\n\nimport ScrollableElement from \"@/lib/components/flexible/ScrollableElement.vue\";\n import {computed} from \"vue\";\n import {PopUpsStoreManager} from \"@/lib/store/manager/popup/PopUpsStoreManager\";\n\n \nexport default /*#__PURE__*/_defineComponent({\n name: 'PopUp',\n props: {\n title: {\n type: String,\n required: true,\n },\n popupClass: {\n type: String,\n required: true,\n },\n isVisibleByDefault: {\n type: Boolean,\n default: false,\n },\n defaultInstanceId: String\n },\n setup(__props) {\n\nconst props = __props\n\n \n\n const instanceId = PopUpsStoreManager.registerPopUp(props.isVisibleByDefault, props.defaultInstanceId);\n\n const isVisible = computed(() => {\n return PopUpsStoreManager.store.popUpOfInstanceId(instanceId)?.isVisible;\n })\n \n const closePopUp = () => {\n PopUpsStoreManager.store.setPopUpStateVisibility({\n visibility: false,\n instanceId: instanceId\n });\n }\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(isVisible))\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"outline\",\n onClick: _withModifiers(closePopUp, [\"self\"])\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass('popup ' + __props.popupClass)\n }, [\n _createElementVNode(\"h3\", null, _toDisplayString(__props.title), 1),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"img\", {\n class: \"popup-close\",\n src: require('@/lib/assets/img/icons/close.svg'),\n onClick: closePopUp,\n alt: \"close popup\"\n }, null, 8, _hoisted_3)\n ]),\n _createVNode(ScrollableElement, null, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n })\n ], 2)\n ], 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./PopUp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PopUp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PopUp.vue?vue&type=style&index=0&id=3c80d3ee&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3c80d3ee\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, withCtx as _withCtx, createVNode as _createVNode, Transition as _Transition, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-170b41c4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"innerHTML\"]\n\nimport PopUp from \"@/lib/components/popup/PopUp.vue\";\n import {defaultPopUpsInstanceIds} from \"@/lib/store/manager/popup/PopUpsStoreManager\";\n\n interface UserManualElement {\n title: string\n content: string\n }\n\n \nexport default /*#__PURE__*/_defineComponent({\n name: 'UserManual',\n props: {\n userManualElements: null\n },\n setup(__props: any) {\n\n \n\n const instanceId: string = defaultPopUpsInstanceIds.userManual;\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(_Transition, { name: \"slide-fade\" }, {\n default: _withCtx(() => [\n _createVNode(PopUp, {\n title: \"Controls\",\n \"popup-class\": \"user-manual\",\n \"default-instance-id\": _unref(instanceId)\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"table\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(__props.userManualElements, (element, index) => {\n return (_openBlock(), _createElementBlock(\"tr\", { key: index }, [\n _createElementVNode(\"th\", null, _toDisplayString(element.title), 1),\n _createElementVNode(\"td\", {\n innerHTML: element.content\n }, null, 8, _hoisted_1)\n ]))\n }), 128))\n ])\n ]),\n _: 1\n }, 8, [\"default-instance-id\"])\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./UserManual.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserManual.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserManual.vue?vue&type=style&index=0&id=170b41c4&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-170b41c4\"]])\n\nexport default __exports__","\n\n\n\n\n\n\n","import { render } from \"./BaseLayout.vue?vue&type=template&id=fca05486&scoped=true\"\nconst script = {}\n\nimport \"./BaseLayout.vue?vue&type=style&index=0&id=fca05486&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-fca05486\"]])\n\nexport default __exports__","interface onKonami { (): void }\n\nclass KonamiBuilder\n{\n protected pattern = ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight', 'b', 'a'];\n protected current = 0;\n\n public start (callback: onKonami)\n {\n const _this = this;\n\n const keyHandler = function (event: KeyboardEvent) {\n\n // If the key isn't in the pattern, or isn't the current key in the pattern, reset\n if (_this.pattern.indexOf(event.key) < 0 || event.key !== _this.pattern[_this.current]) {\n _this.current = 0;\n return;\n }\n\n // Update how much of the _this.pattern is complete\n _this.current++;\n\n // If complete, alert and reset\n if (_this.pattern.length === _this.current) {\n _this.current = 0;\n callback();\n }\n };\n\n document.addEventListener('keydown', keyHandler, false);\n }\n}\n\nexport const Konami = new KonamiBuilder();","import gsap from \"gsap\";\nimport { Draggable as DraggablePlugin } from \"gsap/Draggable\";\nimport { DrawSVGPlugin } from \"gsap/DrawSVGPlugin\";\nimport { Circ as CircAnim } from \"gsap/gsap-core\";\n\ngsap.registerPlugin(DraggablePlugin);\ngsap.registerPlugin(DrawSVGPlugin)\ngsap.registerPlugin(CircAnim)\n\nexport default gsap;\n\nexport const Draggable = DraggablePlugin; // allows drag and drop (possibly contained inside a parent)\nexport const DrawSVG = DrawSVGPlugin; // allows drawing shapes (instantly or progressively)\n\nexport const Circ = CircAnim;","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-69a1cad7\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"src\", \"id\"]\nconst _hoisted_2 = [\"src\"]\n\nimport {Konami} from \"@/utilities/konami\";\nimport {onMounted, Ref, ref} from \"vue\";\nimport gsap from \"gsap\";\nimport {Circ} from \"@/lib/common/interfaces/gsap\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'KonamiEvent',\n setup(__props) {\n\n\nconst isEventHappening = ref(false);\n\nconst konamiEventContainer = ref();\n\nconst nbCows = 50;\n\nconst cowsLeft: Ref = ref([]);\n\nonMounted(() =>\n{\n Konami.start(() =>\n {\n isEventHappening.value = true;\n\n setTimeout(() =>\n {\n for (let i = 1; i <= nbCows; i++)\n {\n cowsLeft.value[i] = Math.floor(Math.random() * (konamiEventContainer.value.offsetWidth - 700)) + 300;\n }\n }, 100);\n\n setTimeout(() => {\n gsap.to(\"#ufo\", {\n duration: 3,\n y: () => -konamiEventContainer.value.offsetHeight - 1000, // animate by the px width of the nav\n ease: Circ.easeOut,\n paused: true\n }).play();\n\n setTimeout(() => {\n gsap.to(\".konami-event\", {\n duration: 1,\n backgroundColor: 'rgba(253,228,119,0.26)',\n ease: \"none\",\n })\n }, 500)\n\n setTimeout(() =>\n {\n for (let cowId = 1; cowId <= nbCows; cowId++)\n {\n const startDelay = Math.random() * 2 * 1000;\n const duration = Math.random() * 4.8 + 0.2;\n\n setTimeout(() =>\n {\n gsap.to(\"#cow\" + cowId, {\n duration: duration,\n y: () => -konamiEventContainer.value.offsetHeight - 200, // animate by the px width of the nav\n rotation: 360,\n ease: \"none\",\n paused: true\n }).play();\n }, startDelay);\n\n }\n\n setTimeout(() =>\n {\n gsap.to(\".konami-event\", {\n duration: 1,\n backgroundColor: 'rgba(255,255,255,0)',\n ease: \"none\",\n })\n }, 6000);\n\n setTimeout(() =>\n {\n isEventHappening.value = false; // ends the animation\n }, 8000);\n\n }, 1500)\n\n }, 500)\n });\n})\n\n\nreturn (_ctx: any,_cache: any) => {\n return (isEventHappening.value)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"konami-event\",\n ref_key: \"konamiEventContainer\",\n ref: konamiEventContainer\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(cowsLeft.value, (value, index) => {\n return (_openBlock(), _createElementBlock(\"img\", {\n key: index,\n src: require('@/assets/icons/cow.svg'),\n alt: \"ushi-chan\",\n class: \"cow\",\n id: 'cow' + index,\n style: _normalizeStyle('left: ' + value + 'px')\n }, null, 12, _hoisted_1))\n }), 128)),\n _createElementVNode(\"img\", {\n src: require('@/assets/icons/ufo.svg'),\n alt: \"ufo-kun\",\n id: \"ufo\"\n }, null, 8, _hoisted_2)\n ], 512))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./KonamiEvent.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./KonamiEvent.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./KonamiEvent.vue?vue&type=style&index=0&id=69a1cad7&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-69a1cad7\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, withCtx as _withCtx, createVNode as _createVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nimport LeftMenu from \"@/layouts/LeftMenu.vue\";\nimport UserManualData from \"@/data/popup/UserManualData\";\nimport PageHeader from \"@/lib/components/layout/page/PageHeader.vue\";\nimport UserManual from \"@/lib/components/popup/UserManual.vue\";\nimport BaseLayout from \"@/lib/components/layout/BaseLayout.vue\";\nimport KonamiEvent from \"@/components/fun/KonamiEvent.vue\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'AppLayout',\n setup(__props) {\n\n\nconst getUserManualElements = function() {\n return UserManualData.messages;\n}\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createVNode(BaseLayout, null, {\n \"left-menu\": _withCtx(() => [\n _createVNode(LeftMenu, null, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"left-menu\")\n ]),\n _: 3\n })\n ]),\n \"page-header\": _withCtx(() => [\n _createVNode(PageHeader)\n ]),\n page: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"page\")\n ]),\n \"page-footer\": _withCtx(() => [\n _renderSlot(_ctx.$slots, \"page-footer\")\n ]),\n \"user-manual\": _withCtx(() => [\n _createVNode(UserManual, {\n \"user-manual-elements\": getUserManualElements()\n }, null, 8, [\"user-manual-elements\"])\n ]),\n _: 3\n }),\n _createVNode(KonamiEvent)\n ], 64))\n}\n}\n\n})","import script from \"./AppLayout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppLayout.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AppLayout.vue?vue&type=style&index=0&id=e73e1354&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-e73e1354\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"file-input\" }\nconst _hoisted_2 = { class: \"icon\" }\nconst _hoisted_3 = [\"src\"]\nconst _hoisted_4 = { class: \"text\" }\nconst _hoisted_5 = [\"accept\", \"multiple\"]\n\nimport {HTMLElementEvent} from \"@/lib/common/interfaces/event/HtmlElementEvent\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'FileSelector',\n props: {\n icon: null,\n text: null,\n accept: null,\n is_multiple: null\n },\n emits: ['change'],\n setup(__props: any, { emit }) {\n\n\n\n\n\n\nconst onChange = (e: HTMLElementEvent) =>\n{\n if (!e.target || !e.target.files)\n return;\n\n const files: File[] = [];\n\n for (let i = 0; i < e.target.files.length; i++)\n {\n const file = e.target.files[i];\n\n if (typeof file == \"object\")\n files.push(file)\n }\n\n e.target.value = \"\";\n\n if (files.length > 0)\n emit(\"change\", files);\n}\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"label\", _hoisted_1, [\n _createElementVNode(\"span\", _hoisted_2, [\n _createElementVNode(\"img\", {\n src: __props.icon,\n alt: \"icon\"\n }, null, 8, _hoisted_3)\n ]),\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(__props.text), 1),\n _createElementVNode(\"input\", {\n type: \"file\",\n accept: __props.accept,\n multiple: __props.is_multiple,\n onChange: onChange\n }, null, 40, _hoisted_5)\n ])\n ]))\n}\n}\n\n})","import script from \"./FileSelector.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./FileSelector.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport FileSelector from \"@/lib/components/form/file/FileSelector.vue\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'AutoStoringFileSelector',\n props: {\n text: {\n type: String,\n required: true,\n },\n /**\n * The manager object\n */\n manager_class: {\n type: Object,\n required: true,\n },\n /**\n * The function inside the manager, that calls the store for updating\n */\n manager_mutator: {\n type: String,\n required: true,\n },\n icon: {\n type: String,\n required: true,\n },\n accept: {\n type: String,\n required: true,\n },\n is_multiple: Boolean,\n /*\n * if defined, will only store a video under the given instanceId. If not, will store a new file element.\n * If set, is_multiple is ignored and only one single video can be selected\n */\n linkToInstanceId: String,\n empty_store_before_load: {\n type: Boolean,\n default: true,\n }\n},\n emits: ['onStored'],\n setup(__props, { emit }) {\n\nconst props = __props\n\n\n\n\n\n\nconst onChange = (files: File[]) =>\n{\n if (props.empty_store_before_load)\n props.manager_class[\"reset\"]();\n\n const instanceIds: string[] = [];\n\n files.forEach(file => {\n instanceIds.push(props.manager_class[props.manager_mutator](file, props.linkToInstanceId));\n });\n\n emit(\"onStored\", instanceIds);\n}\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(FileSelector, {\n icon: __props.icon,\n text: __props.text,\n is_multiple: __props.is_multiple && !__props.linkToInstanceId,\n accept: __props.accept,\n onChange: onChange\n }, null, 8, [\"icon\", \"text\", \"is_multiple\", \"accept\"]))\n}\n}\n\n})","import script from \"./AutoStoringFileSelector.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AutoStoringFileSelector.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import {getModule} from \"vuex-module-decorators\";\nimport store from \"../..\";\nimport {MediasStore} from \"@/lib/store/holder/media/MediasStore\";\nimport {SMediaData} from \"@/lib/store/model/media/SMediaData\";\nimport {AbstractStoreManagerBuilder} from \"@/lib/store/manager/abstract/AbstractStoreManager\";\n\nexport class MediasStoreManagerBuilder, D extends SMediaData> extends AbstractStoreManagerBuilder\n{\n protected _store: MediasStore = getModule(MediasStore, store);\n\n public static createMediaData(mediaFile: File, defaultInstanceId: string|undefined = undefined)\n {\n return {\n instanceId: defaultInstanceId ? defaultInstanceId.toString() : AbstractStoreManagerBuilder.createInstanceId(defaultInstanceId),\n file: mediaFile,\n url: URL.createObjectURL(mediaFile),\n name: mediaFile.name,\n type: mediaFile.type,\n }\n }\n\n public addMedia(mediaFile: File, defaultInstanceId: string|undefined = undefined)\n {\n return this.add(MediasStoreManagerBuilder.createMediaData(mediaFile, defaultInstanceId) as unknown as D);\n }\n}\n\nexport const MediasStoreManager = new MediasStoreManagerBuilder();","import {getModule} from \"vuex-module-decorators\";\nimport store from \"../..\";\nimport {MediasStoreManagerBuilder} from \"@/lib/store/manager/media/MediasStoreManager\";\nimport {SImageData} from \"@/lib/store/model/media/SImageData\";\nimport {ImagesStore} from \"@/lib/store/holder/media/ImagesStore\";\n\nexport class ImagesStoreManagerBuilder, D extends SImageData> extends MediasStoreManagerBuilder\n{\n protected _store: ImagesStore = getModule(ImagesStore, store);\n}\n\nexport const ImagesStoreManager = new ImagesStoreManagerBuilder();","import { defineComponent as _defineComponent } from 'vue'\nimport { openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport AutoStoringFileSelector from \"@/lib/components/form/file/auto-storing/AutoStoringFileSelector.vue\";\nimport {PropType} from \"vue\";\nimport {AbstractStoreManagerBuilder} from \"@/lib/store/manager/abstract/AbstractStoreManager\";\nimport {ImagesStoreManager} from \"@/lib/store/manager/media/ImagesStoreManager\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'ImageSelector',\n props: {\n text: {\n type: String,\n required: true,\n },\n is_multiple: Boolean,\n // Your store manager\n manager_class: {\n type: Object as PropType,\n default: ImagesStoreManager\n },\n // The method from your store manager to add a Csv\n manager_mutator: {\n type: String,\n default: \"addMedia\"\n },\n linkToImageInstanceId: String,\n},\n emits: [\"onImagesStored\"],\n setup(__props) {\n\n\n\n\n\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(AutoStoringFileSelector, {\n icon: __props.is_multiple ? require('@/lib/assets/img/icons/images.svg') : require('@/lib/assets/img/icons/image.svg'),\n text: __props.text,\n is_multiple: __props.is_multiple,\n manager_class: __props.manager_class,\n \"link-to-instance-id\": __props.linkToImageInstanceId,\n manager_mutator: __props.manager_mutator,\n accept: \"image/*\",\n onOnStored: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('onImagesStored')))\n }, null, 8, [\"icon\", \"text\", \"is_multiple\", \"manager_class\", \"link-to-instance-id\", \"manager_mutator\"]))\n}\n}\n\n})","import script from \"./ImageSelector.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ImageSelector.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, renderSlot as _renderSlot, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2c38ce32\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"submenu background-transition\" }\nconst _hoisted_2 = { class: \"submenu-title\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"submenu-title-icon icon\"\n}\nconst _hoisted_4 = [\"src\"]\nconst _hoisted_5 = { class: \"submenu-content\" }\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'SubMenu',\n props: {\n title: {\n type: String,\n required: true\n },\n icon: String,\n},\n setup(__props) {\n\n\n\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", null, [\n (__props.icon)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, [\n _createElementVNode(\"img\", {\n src: __props.icon,\n alt: \"icon\"\n }, null, 8, _hoisted_4)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"span\", {\n class: _normalizeClass('submenu-title-text ' + (!__props.icon ? 'no-icon' : ''))\n }, _toDisplayString(__props.title), 3)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _renderSlot(_ctx.$slots, \"default\")\n ])\n ]))\n}\n}\n\n})","import script from \"./SubMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SubMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./SubMenu.vue?vue&type=style&index=0&id=2c38ce32&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2c38ce32\"]])\n\nexport default __exports__","export enum ButtonMargin {\n NONE = \"0\",\n SHORT = \"4px\",\n MEDIUM = \"8px\",\n WIDE = \"16px\",\n EXTRA_WIDE = \"32px\",\n}","import { useCssVars as _useCssVars, unref as _unref, defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3fa199d0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"button-group\" }\nconst _hoisted_2 = [\"title\", \"disabled\", \"onClick\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"icon\"\n}\nconst _hoisted_4 = [\"src\"]\nconst _hoisted_5 = { class: \"text\" }\n\nimport {PropType} from \"vue\";\nimport {ButtonData} from \"@/lib/components/UI/type/ButtonData\";\nimport {ButtonMargin} from \"@/lib/components/UI/enum/ButtonMargin\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'ButtonGroup',\n props: {\n buttons: {\n type: Array as PropType,\n required: true\n },\n margin: {\n type: String as PropType,\n default: ButtonMargin.NONE\n }\n},\n emits: ['click'],\n setup(__props, { emit }) {\n\nconst props = __props\n\n_useCssVars(_ctx => ({\n \"1725d0da\": (__props.margin)\n}))\n\n\n\n\n\n\nconst onButtonClick = (button: ButtonData) => {\n if (!button.isDisabled || !button.isDisabled.value)\n emit('click', button.id)\n}\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(props.buttons, (button, id) => {\n return (_openBlock(), _createElementBlock(\"button\", {\n key: id,\n type: \"button\",\n class: _normalizeClass('button ' + (button.icon ? 'button-iconed' : '') + ' ' + button.additionalClass),\n title: button.title,\n disabled: button.isDisabled?.value,\n onClick: _withModifiers(($event: any) => (onButtonClick(button)), [\"stop\"])\n }, [\n (button.icon)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, [\n _createElementVNode(\"img\", {\n src: button.icon,\n alt: \"icon\"\n }, null, 8, _hoisted_4)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(button.text), 1)\n ], 10, _hoisted_2))\n }), 128))\n ]))\n}\n}\n\n})","import script from \"./ButtonGroup.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ButtonGroup.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./ButtonGroup.vue?vue&type=style&index=0&id=3fa199d0&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3fa199d0\"]])\n\nexport default __exports__","import {getModule} from \"vuex-module-decorators\";\nimport store from \"../..\";\nimport {FilesStore} from \"@/lib/store/holder/file/FilesStore\";\nimport {SFileData} from \"@/lib/store/model/file/SFileData\";\nimport {AbstractStoreManagerBuilder} from \"@/lib/store/manager/abstract/AbstractStoreManager\";\n\nexport class FilesStoreManagerBuilder, D extends SFileData> extends AbstractStoreManagerBuilder\n{\n protected _store: FilesStore = getModule(FilesStore, store);\n}\n\nexport const FilesStoreManager = new FilesStoreManagerBuilder();","import { defineComponent as _defineComponent } from 'vue'\nimport { openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport {PropType} from \"vue\";\nimport AutoStoringFileSelector from \"@/lib/components/form/file/auto-storing/AutoStoringFileSelector.vue\";\nimport {AbstractStoreManagerBuilder} from \"@/lib/store/manager/abstract/AbstractStoreManager\";\nimport {FilesStoreManager} from \"@/lib/store/manager/file/FilesStoreManager\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'JsonSelector',\n props: {\n text: {\n type: String,\n required: true,\n },\n is_multiple: Boolean,\n // Your store manager\n manager_class: {\n type: Object as PropType,\n default: FilesStoreManager\n },\n // The method from your store manager to add a Csv\n manager_mutator: {\n type: String,\n default: \"add\"\n },\n linkToCsvInstanceId: String,\n},\n emits: [\"onFilesStored\"],\n setup(__props) {\n\n\n\n\n\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(AutoStoringFileSelector, {\n icon: require('@/lib/assets/img/icons/json.svg'),\n text: __props.text,\n is_multiple: __props.is_multiple,\n manager_class: __props.manager_class,\n \"link-to-instance-id\": __props.linkToCsvInstanceId,\n manager_mutator: __props.manager_mutator,\n accept: \"application/json\",\n onOnStored: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('onFilesStored')))\n }, null, 8, [\"icon\", \"text\", \"is_multiple\", \"manager_class\", \"link-to-instance-id\", \"manager_mutator\"]))\n}\n}\n\n})","import script from \"./JsonSelector.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./JsonSelector.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","export enum AnnotationType\n{\n MAMMAL = \"MAMMAL\"\n}","/**\n * Use this class to get a loaded file's content and other things\n */\nclass FileHelper\n{\n public async readAsText(file: File)\n {\n const fileText = await new Promise(resolve => {\n const reader = new FileReader();\n reader.onload = () => {\n resolve(reader.result || \"\");\n };\n reader.readAsText(file);\n });\n\n if (typeof (fileText) == \"string\") {\n return fileText;\n } else {\n console.error(fileText);\n throw \"The given file couldn't be read as text. See console log for the response's content.\"\n }\n }\n}\n\nexport default new FileHelper();","import {AbstractValidatorCenter} from \"@/lib/store/validator/center/abstract/AbstractValidatorCenter\";\nimport EncapsulatedValidator from \"@/lib/store/validator/center/abstract/type/EncapsulatedValidator\";\nimport {SAnnotatableImageData} from \"@/store/Spatial2DAnnotation/model/SAnnotatableImageData\";\n\nexport class BoxBoundedAnnotatedImageValidatorCenter extends AbstractValidatorCenter\n{\n protected encapsulatedValidators: EncapsulatedValidator[] = [\n\n ];\n}","const config = Object.freeze(require(\"./app.config.json\"));\n\nexport default config;","export enum DefaultAnnotatableBodyPart {\n \"Mouse\" = \"Mouse\",\n \"Head\" = \"Head\",\n \"Cervical Spine\" = \"Cervical Spine\",\n \"Pelvis\" = \"Pelvis\",\n \"Right Shoulder\" = \"Right Shoulder\",\n \"Right Elbow\" = \"Right Elbow\",\n \"Right Wrist\" = \"Right Wrist\",\n \"Right Finger\" = \"Right Finger\",\n \"Left Shoulder\" = \"Left Shoulder\",\n \"Left Elbow\" = \"Left Elbow\",\n \"Left Wrist\" = \"Left Wrist\",\n \"Left Finger\" = \"Left Finger\",\n \"Right Waist\" = \"Right Waist\",\n \"Right Knee\" = \"Right Knee\",\n \"Right Heel\" = \"Right Heel\",\n \"Right Toe\" = \"Right Toe\",\n \"Left Waist\" = \"Left Waist\",\n \"Left Knee\" = \"Left Knee\",\n \"Left Heel\" = \"Left Heel\",\n \"Left Toe\" = \"Left Toe\",\n}","import {AbstractValidator} from \"@/lib/store/validator/validator/abstract/AbstractValidator\";\nimport {SAnnotation} from \"@/lib/store/model/annotation/SAnnotation\";\nimport {ON_INVALID_DO} from \"@/lib/store/validator/center/abstract/enum/ON_INVALID_DO\";\n\n/**\n * Validates if among an array of Annotation, we have at most x of a given type.\n *\n * (if onInvalidDo === ON_INVALID_DO.TRANSFORM)\n * Transform : removes the first annotations of the same type, so that we end up with x annotations.\n */\nexport class IsWithinXInstancesOfTypeValidator extends AbstractValidator\n{\n protected x: number;\n protected type: string;\n\n protected nbInstances: number = 0;\n\n constructor({onInvalidDo, x, type}: {onInvalidDo: ON_INVALID_DO, x: number, type: string})\n {\n super(onInvalidDo);\n\n this.x = x;\n this.type = type;\n }\n\n protected isValid(annotations: SAnnotation[]): boolean\n {\n this.nbInstances = annotations.filter(annotation => annotation.type === this.type).length;\n\n return this.nbInstances <= this.x;\n }\n\n /**\n * If set as TRANSFORM, we're keeping only the last x annotations in the list.\n *\n * @param annotations\n */\n public modelTransformer = (annotations: SAnnotation[]) =>\n {\n const keptAnnotations: SAnnotation[] = [];\n\n let removedInstances: number = 0\n\n annotations.forEach(annotation =>\n {\n if (\n annotation.type === this.type\n && this.nbInstances > removedInstances + this.x\n )\n {\n removedInstances++;\n }\n else\n {\n keptAnnotations.push(annotation);\n }\n });\n\n return keptAnnotations;\n }\n}","import {AbstractValidator} from \"@/lib/store/validator/validator/abstract/AbstractValidator\";\nimport {ON_INVALID_DO} from \"@/lib/store/validator/center/abstract/enum/ON_INVALID_DO\";\n\n/**\n * Checks if a number is between two values\n */\nexport class IsNumberBetweenValidator extends AbstractValidator\n{\n protected min: number;\n protected max: number;\n\n protected errorMessage = \"The given number %given_number% is not between %min% and %max%\";\n\n constructor({onInvalidDo, min, max}: {onInvalidDo: ON_INVALID_DO, min: number, max: number})\n {\n super(onInvalidDo);\n\n this.min = min;\n this.max = max;\n }\n\n protected isValid(value: number): boolean\n {\n this.errorMessage = this.errorMessage\n .replace(\"%given_number%\", \"\" + value)\n .replace(\"%min%\", \"\" + this.min)\n .replace(\"%max%\", \"\" + this.max)\n\n return value >= this.min && value <= this.max;\n }\n}","import {AbstractValidatorCenter} from \"@/lib/store/validator/center/abstract/AbstractValidatorCenter\";\nimport {SStoreData} from \"@/lib/store/model/abstract/SStoreData\";\nimport {\n IsWithinXInstancesOfTypeValidator\n} from \"@/lib/store/validator/validator/annotation/IsWithinXInstancesOfTypeValidator\";\nimport {ON_INVALID_DO} from \"@/lib/store/validator/center/abstract/enum/ON_INVALID_DO\";\nimport {SSpatial2DBoundingBox} from \"@/store/Spatial2DAnnotation/model/SSpatial2DBoundingBox\";\nimport {SSpatial2DDotAnnotation} from \"@/store/Spatial2DAnnotation/model/SSpatial2DDotAnnotation\";\nimport EncapsulatedValidator from \"@/lib/store/validator/center/abstract/type/EncapsulatedValidator\";\nimport {IsNumberBetweenValidator} from \"@/lib/store/validator/validator/common/IsNumberBetweenValidator\";\n\n\nexport class Spatial2DBoundingBoxValidatorCenter extends AbstractValidatorCenter\n{\n constructor(entity: D, annotationTypeToValidate: string|void, maxNumberOfInstancesForType: number|void)\n {\n super(entity);\n\n if (\n annotationTypeToValidate\n && maxNumberOfInstancesForType\n )\n {\n this.encapsulatedValidators.push({\n validator: new IsWithinXInstancesOfTypeValidator({onInvalidDo: ON_INVALID_DO.TRANSFORM, x: maxNumberOfInstancesForType, type: annotationTypeToValidate}),\n getter: (entity: D) => entity.annotations,\n setter: (entity: D, annotations: SSpatial2DDotAnnotation[]) => {\n entity.annotations = annotations;\n }\n })\n }\n }\n\n protected encapsulatedValidators: EncapsulatedValidator[] = [\n {\n validator: new IsNumberBetweenValidator({onInvalidDo: ON_INVALID_DO.THROW, min: 0, max: 100}),\n getter: (entity: D) => entity.top\n },\n {\n validator: new IsNumberBetweenValidator({onInvalidDo: ON_INVALID_DO.THROW, min: 0, max: 100}),\n getter: (entity: D) => entity.left\n },\n ];\n}","import {AbstractValidatorCenter} from \"@/lib/store/validator/center/abstract/AbstractValidatorCenter\";\nimport EncapsulatedValidator from \"@/lib/store/validator/center/abstract/type/EncapsulatedValidator\";\nimport {IsNumberBetweenValidator} from \"@/lib/store/validator/validator/common/IsNumberBetweenValidator\";\nimport {ON_INVALID_DO} from \"@/lib/store/validator/center/abstract/enum/ON_INVALID_DO\";\nimport {SSpatial2DDotAnnotation} from \"@/store/Spatial2DAnnotation/model/SSpatial2DDotAnnotation\";\n\nexport class Spatial2DDotAnnotationValidatorCenter extends AbstractValidatorCenter\n{\n protected encapsulatedValidators: EncapsulatedValidator[] = [\n {\n validator: new IsNumberBetweenValidator({onInvalidDo: ON_INVALID_DO.THROW, min: 0, max: 100}),\n getter: (entity: SSpatial2DDotAnnotation) => entity.top\n },\n {\n validator: new IsNumberBetweenValidator({onInvalidDo: ON_INVALID_DO.THROW, min: 0, max: 100}),\n getter: (entity: SSpatial2DDotAnnotation) => entity.left\n },\n ];\n}","import {SSpatial2DDotAnnotation} from \"@/store/Spatial2DAnnotation/model/SSpatial2DDotAnnotation\";\nimport {\n Spatial2DDotAnnotationValidatorCenter\n} from \"@/store/Spatial2DAnnotation/validator/center/Spatial2DDotAnnotationValidatorCenter\";\nimport {AbstractSubStoreManager} from \"@/lib/store/manager/abstract/AbstractSubStoreManager\";\n\nexport class Spatial2DDotAnnotationManager extends AbstractSubStoreManager\n{\n protected getValidatorCenterForEntity = (entity: SSpatial2DDotAnnotation) => {\n return new Spatial2DDotAnnotationValidatorCenter(entity);\n };\n\n protected serve(entity: SSpatial2DDotAnnotation): SSpatial2DDotAnnotation {\n throw \"On this project, annotations are inside bounding boxes and therefore, shouldn't be added this way, but only validated.\";\n }\n}","import {DefaultAnnotatableBodyPart} from \"@/data/annotation/enum/DefaultAnnotatableBodyPart\";\nimport {AnnotatableBodyPartParams} from \"@/data/annotation/type/AnnotatableBodyPartParams\";\nimport {BoundingBoxShortcutType} from \"@/components/frame/image/annotation/enum/BoundingBoxShortcutType\";\n\nexport const defaultAnnotatableBodyPartsDisplayParams: AnnotatableBodyPartParams[] = [\n {\n value: DefaultAnnotatableBodyPart[\"Mouse\"],\n colorCode: \"#1c5dd0\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Head\"],\n colorCode: \"#5296da\"\n }\n ]\n },\n\n {\n value: DefaultAnnotatableBodyPart[\"Head\"],\n colorCode: \"#1c5dd0\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Mouse\"],\n colorCode: \"#5296da\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Cervical Spine\"],\n colorCode: \"#5296da\"\n },\n ]\n },\n {\n value: DefaultAnnotatableBodyPart[\"Cervical Spine\"],\n colorCode: \"#1c5dd0\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Head\"],\n colorCode: \"#5296da\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Pelvis\"],\n colorCode: \"#5296da\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Right Shoulder\"],\n colorCode: \"#c44bd2\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Left Shoulder\"],\n colorCode: \"#57d028\"\n },\n ]\n },\n {\n value: DefaultAnnotatableBodyPart[\"Pelvis\"],\n colorCode: \"#1c5dd0\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Cervical Spine\"],\n colorCode: \"#5296da\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Right Waist\"],\n colorCode: \"#c44bd2\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Left Waist\"],\n colorCode: \"#57d028\"\n },\n ]\n },\n\n {\n value: DefaultAnnotatableBodyPart[\"Right Shoulder\"],\n colorCode: \"#ea00df\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Cervical Spine\"],\n colorCode: \"#c44bd2\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Right Elbow\"],\n colorCode: \"#c44bd2\"\n },\n ]\n },\n {\n value: DefaultAnnotatableBodyPart[\"Right Elbow\"],\n colorCode: \"#ea00df\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Right Shoulder\"],\n colorCode: \"#c44bd2\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Right Wrist\"],\n colorCode: \"#c44bd2\"\n },\n ]\n },\n {\n value: DefaultAnnotatableBodyPart[\"Right Wrist\"],\n colorCode: \"#a847d3\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Right Elbow\"],\n colorCode: \"#c44bd2\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Right Finger\"],\n colorCode: \"#c44bd2\"\n },\n ]\n },\n {\n value: DefaultAnnotatableBodyPart[\"Right Finger\"],\n colorCode: \"#ea00df\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Right Wrist\"],\n colorCode: \"#c44bd2\"\n },\n ]\n },\n\n {\n value: DefaultAnnotatableBodyPart[\"Left Shoulder\"],\n colorCode: \"#00a817\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Cervical Spine\"],\n colorCode: \"#57d028\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Left Elbow\"],\n colorCode: \"#57d028\"\n },\n ]\n },\n {\n value: DefaultAnnotatableBodyPart[\"Left Elbow\"],\n colorCode: \"#00a817\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Left Shoulder\"],\n colorCode: \"#57d028\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Left Wrist\"],\n colorCode: \"#57d028\"\n },\n ]\n },\n {\n value: DefaultAnnotatableBodyPart[\"Left Wrist\"],\n colorCode: \"#00a817\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Left Elbow\"],\n colorCode: \"#57d028\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Left Finger\"],\n colorCode: \"#57d028\"\n },\n ]\n },\n {\n value: DefaultAnnotatableBodyPart[\"Left Finger\"],\n colorCode: \"#00a817\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Left Wrist\"],\n colorCode: \"#57d028\"\n },\n ]\n },\n\n {\n value: DefaultAnnotatableBodyPart[\"Right Waist\"],\n colorCode: \"#ea00df\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Pelvis\"],\n colorCode: \"#c44bd2\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Right Knee\"],\n colorCode: \"#c44bd2\"\n },\n ]\n },\n {\n value: DefaultAnnotatableBodyPart[\"Right Knee\"],\n colorCode: \"#ea00df\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Right Waist\"],\n colorCode: \"#c44bd2\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Right Heel\"],\n colorCode: \"#c44bd2\"\n },\n ]\n },\n {\n value: DefaultAnnotatableBodyPart[\"Right Heel\"],\n colorCode: \"#ea00df\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Right Knee\"],\n colorCode: \"#c44bd2\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Right Toe\"],\n colorCode: \"#c44bd2\"\n },\n ]\n },\n {\n value: DefaultAnnotatableBodyPart[\"Right Toe\"],\n colorCode: \"#ea00df\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Right Heel\"],\n colorCode: \"#c44bd2\"\n },\n ]\n },\n\n {\n value: DefaultAnnotatableBodyPart[\"Left Waist\"],\n colorCode: \"#00a817\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Pelvis\"],\n colorCode: \"#57d028\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Left Knee\"],\n colorCode: \"#57d028\"\n },\n ]\n },\n {\n value: DefaultAnnotatableBodyPart[\"Left Knee\"],\n colorCode: \"#00a817\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Left Waist\"],\n colorCode: \"#57d028\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Left Heel\"],\n colorCode: \"#57d028\"\n },\n ]\n },\n {\n value: DefaultAnnotatableBodyPart[\"Left Heel\"],\n colorCode: \"#00a817\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Left Knee\"],\n colorCode: \"#57d028\"\n },\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Left Toe\"],\n colorCode: \"#57d028\"\n },\n ]\n },\n {\n value: DefaultAnnotatableBodyPart[\"Left Toe\"],\n colorCode: \"#00a817\",\n connectionLines: [\n {\n connectedWith: DefaultAnnotatableBodyPart[\"Left Heel\"],\n colorCode: \"#57d028\"\n },\n ]\n },\n];\n\nexport const getDisplayParamsFromBodyPart = (bodyPart: string) =>\n{\n const displayParams = defaultAnnotatableBodyPartsDisplayParams.filter(params => params.value === bodyPart);\n\n if (displayParams.length === 0 || displayParams.length >= 2)\n throw \"Can't get display params for body part '\" + bodyPart + \"' : none or more than one exist with that name\";\n\n return displayParams[0];\n}","import {getModule, Mutation} from \"vuex-module-decorators\";\nimport store from \"@/lib/store\";\nimport {\n defaultAnnotatableBodyPartsDisplayParams\n} from \"@/data/annotation/DefaultAnnotatableBodyPartsDisplayParams\";\nimport {AbstractStoreManagerBuilder} from \"@/lib/store/manager/abstract/AbstractStoreManager\";\nimport {\n AnnotatableBodyPartDisplayParamsStore\n} from \"@/store/Spatial2DAnnotation/holder/AnnotatableBodyPartDisplayParamsStore\";\nimport {\n SAnnotatableBodyPartDisplayParamsData\n} from \"@/store/Spatial2DAnnotation/model/SAnnotatableBodyPartDisplayParamsData\";\nimport {SSpatial2DBoundingBox} from \"@/store/Spatial2DAnnotation/model/SSpatial2DBoundingBox\";\n\nexport class AnnotatableBodyPartDisplayParamsStoreManagerBuilder extends AbstractStoreManagerBuilder, SAnnotatableBodyPartDisplayParamsData>\n{\n protected _store: AnnotatableBodyPartDisplayParamsStore = getModule(AnnotatableBodyPartDisplayParamsStore, store);\n\n /**\n * Adds the default cat body part display params (used for menus and dot annotation creation\n */\n constructor()\n {\n super();\n\n this._store.reset();\n\n defaultAnnotatableBodyPartsDisplayParams.forEach(defaultAnnotatableBodyPartDisplayParams =>\n {\n this.add({\n instanceId: AbstractStoreManagerBuilder.createInstanceId(),\n ...defaultAnnotatableBodyPartDisplayParams\n });\n })\n }\n\n public resetBaseOnBoundingBox(BoundingBox: SSpatial2DBoundingBox)\n {\n this._store.resetSelectedAndSpawned();\n\n BoundingBox.annotations.map(annotation => {\n this._store.setIsSpawnedBasedOnValue({value: annotation.type, isSpawned: true});\n })\n\n this._store.switchToNextSelected();\n }\n}\n\nexport const AnnotatableBodyPartDisplayParamsStoreManager = new AnnotatableBodyPartDisplayParamsStoreManagerBuilder();","import {AnnotationType} from \"@/data/annotation/enum/AnnotationType\";\nimport _ from \"lodash\";\nimport {toRaw} from \"vue\";\nimport {generateInstanceId} from \"@/lib/common/utilities/StringUtilities\";\nimport config from \"@/config\";\nimport {SSpatial2DBoundingBox} from \"@/store/Spatial2DAnnotation/model/SSpatial2DBoundingBox\";\nimport {\n Spatial2DBoundingBoxValidatorCenter\n} from \"@/store/Spatial2DAnnotation/validator/center/Spatial2DBoundingBoxValidatorCenter\";\nimport {\n AnnotatableImagesStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/AnnotatableImagesStoreManager\";\nimport {SSpatial2DDotAnnotation} from \"@/store/Spatial2DAnnotation/model/SSpatial2DDotAnnotation\";\nimport {\n Spatial2DDotAnnotationManager\n} from \"@/store/Spatial2DAnnotation/manager/subManager/Spatial2DDotAnnotationManager\";\nimport {AbstractValidatorCenter} from \"@/lib/store/validator/center/abstract/AbstractValidatorCenter\";\nimport {AbstractSubStoreManager} from \"@/lib/store/manager/abstract/AbstractSubStoreManager\";\nimport ValidationResult from \"@/lib/store/validator/center/abstract/type/ValidationResult\";\nimport {\n AnnotatableBodyPartDisplayParamsStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/AnnotatableBodyPartDisplayParamsStoreManager\";\n\nexport class Spatial2DBoundingBoxManager extends AbstractSubStoreManager\n{\n protected annotationTypeToValidate: string|undefined;\n protected maxInstanceForType: number|undefined;\n\n constructor(annotationTypeToValidate: string|void)\n {\n super();\n\n const maxInstancesPerBoundingBox = config.annotationTypes.maxInstancesPerBoundingBox;\n\n if (annotationTypeToValidate)\n {\n this.annotationTypeToValidate = annotationTypeToValidate;\n this.maxInstanceForType = annotationTypeToValidate in maxInstancesPerBoundingBox ? maxInstancesPerBoundingBox[annotationTypeToValidate] : 1;\n }\n }\n\n public createNew(type: AnnotationType): SSpatial2DBoundingBox\n {\n return {\n type: type,\n instanceId: generateInstanceId(),\n top: _.random(15, 40),\n left: _.random(15, 40),\n width: _.random(40, 60),\n height: _.random(40, 60),\n annotations: [],\n }\n }\n\n protected getValidatorCenterForEntity = (entity: SSpatial2DBoundingBox): AbstractValidatorCenter => {\n return new Spatial2DBoundingBoxValidatorCenter(entity, this.annotationTypeToValidate, this.maxInstanceForType);\n };\n\n public tryAddNew(type: AnnotationType): SSpatial2DBoundingBox\n {\n const result = this.validate(this.createNew(type));\n\n if (!result.isValid)\n throw result.errorMessages;\n\n const boundingBox = result.transformedEntity as SSpatial2DBoundingBox;\n\n AnnotatableImagesStoreManager.addBoundingBoxForCurrent(boundingBox)\n\n return boundingBox;\n }\n\n public addDotAnnotation = (boundingBox: SSpatial2DBoundingBox, dotAnnotation: SSpatial2DDotAnnotation) => {\n const rawBoundingBox = toRaw(boundingBox);\n\n rawBoundingBox.annotations.push(dotAnnotation);\n\n const result = this.validate(rawBoundingBox);\n\n if (!result.isValid)\n return result.errorMessages;\n\n const ValidatedBoundingBox = result.transformedEntity as SSpatial2DBoundingBox;\n\n AnnotatableImagesStoreManager.setCurrentBoundingBoxAnnotations(ValidatedBoundingBox.annotations);\n\n AnnotatableBodyPartDisplayParamsStoreManager.store.setIsSpawnedForSelected({isSpawned: true});\n AnnotatableBodyPartDisplayParamsStoreManager.store.switchToNextSelected();\n\n return ValidatedBoundingBox.annotations[ValidatedBoundingBox.annotations.length - 1];\n }\n\n public validate(entity: SSpatial2DBoundingBox): ValidationResult\n {\n const errors: string[] = [],\n annotations: SSpatial2DDotAnnotation[] = [];\n\n for ( const key in entity.annotations )\n {\n const annotation = entity.annotations[key],\n manager = new Spatial2DDotAnnotationManager(),\n validationResult = manager.validate(annotation);\n\n if (!validationResult.isValid)\n errors.concat(...validationResult.errorMessages);\n else\n annotations.push(validationResult.transformedEntity as SSpatial2DDotAnnotation);\n }\n\n entity.annotations = annotations;\n\n return super.validate(entity);\n }\n}","import {getModule} from \"vuex-module-decorators\";\nimport store from \"@/lib/store\";\nimport {AnnotationType} from \"@/data/annotation/enum/AnnotationType\";\nimport FileHelper from \"@/lib/common/helpers/FileHelper\";\nimport {removeExtensionFromFilename} from \"@/lib/common/utilities/StringUtilities\";\nimport {AbstractStoreManagerBuilder} from \"@/lib/store/manager/abstract/AbstractStoreManager\";\nimport {MediasStoreManagerBuilder} from \"@/lib/store/manager/media/MediasStoreManager\";\nimport {SImageData} from \"@/lib/store/model/media/SImageData\";\nimport {AnnotatableImagesStore} from \"@/store/Spatial2DAnnotation/holder/AnnotatableImagesStore\";\nimport {SAnnotatableImageData} from \"@/store/Spatial2DAnnotation/model/SAnnotatableImageData\";\nimport {SSpatial2DBoundingBox} from \"@/store/Spatial2DAnnotation/model/SSpatial2DBoundingBox\";\nimport {SSpatial2DDotAnnotation} from \"@/store/Spatial2DAnnotation/model/SSpatial2DDotAnnotation\";\nimport {\n BoxBoundedAnnotatedImageValidatorCenter\n} from \"@/store/Spatial2DAnnotation/validator/center/BoxBoundedAnnotatedImageValidatorCenter\";\nimport {AbstractValidatorCenter} from \"@/lib/store/validator/center/abstract/AbstractValidatorCenter\";\nimport {\n Spatial2DBoundingBoxManager\n} from \"@/store/Spatial2DAnnotation/manager/subManager/Spatial2DBoundingBoxManager\";\nimport {\n AnnotatableBodyPartDisplayParamsStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/AnnotatableBodyPartDisplayParamsStoreManager\";\n\nexport class AnnotatableImagesStoreManagerBuilder extends AbstractStoreManagerBuilder, SAnnotatableImageData>\n{\n protected _store: AnnotatableImagesStore = getModule(AnnotatableImagesStore, store);\n\n protected getValidatorCenterForEntity = (entity: SAnnotatableImageData): AbstractValidatorCenter => {\n return new BoxBoundedAnnotatedImageValidatorCenter(entity);\n };\n\n // ------------------------------\n // Current cat image and its bounding box\n // ------------------------------\n\n public setCurrentAnnotatableImage = (currentAnnotatableImage: SAnnotatableImageData) => {\n this._store.setCurrentAnnotatableImage(currentAnnotatableImage.instanceId);\n }\n public setCurrentBoundingBox = (currentBoundingBox: SSpatial2DBoundingBox) =>\n {\n this._store.setCurrentBoundingBox(currentBoundingBox.instanceId);\n AnnotatableBodyPartDisplayParamsStoreManager.resetBaseOnBoundingBox(currentBoundingBox);\n }\n\n protected getCheckedCurrentAnnotatableImage = () => {\n if (typeof this.store.currentAnnotatableImage === \"undefined\")\n throw \"this._currentAnnotatableImage shouldn't be undefined\"\n\n return this.store.currentAnnotatableImage;\n }\n protected getCheckedCurrentBoundingBox = () => {\n if (typeof this.store.currentBoundingBox === \"undefined\")\n throw \"this._currentBoundingBox shouldn't be undefined\"\n\n return this.store.currentBoundingBox;\n }\n\n // ------------------------------\n // Add\n // ------------------------------\n\n public addEmpty(file: File, defaultInstanceId: string|undefined = undefined)\n {\n return this.add({\n instanceId: AbstractStoreManagerBuilder.createInstanceId(defaultInstanceId),\n image: MediasStoreManagerBuilder.createMediaData(file),\n boundingBoxes: [],\n });\n }\n\n public async addFromFile(file: File)\n {\n const json = await FileHelper.readAsText(file);\n const data = JSON.parse(json) as SSpatial2DBoundingBox[];\n const imageName = removeExtensionFromFilename(file.name);\n\n const targetEntries = this._store.entries.filter(entry => removeExtensionFromFilename(entry.image.name) === imageName);\n\n if (targetEntries.length === 0)\n {\n alert(\"No cat image of name '\" + imageName + \"' is loaded. Provided data ignored.\")\n return;\n }\n\n const targetEntry = targetEntries[0];\n\n const result = this.validate(targetEntry);\n\n const finalEntry: SAnnotatableImageData = result.transformedEntity as SAnnotatableImageData;\n\n data.forEach(boundingBox => {\n AnnotatableImagesStoreManager.addBoundingBox(finalEntry.instanceId, boundingBox);\n })\n }\n\n public addBoundingBox(annotatableImageInstanceId: string, boundingBox: SSpatial2DBoundingBox)\n {\n const entry = this._store.byInstanceId(annotatableImageInstanceId);\n\n if (entry) {\n this.store.addBoundingBox({\n boundingBox: boundingBox,\n annotatableImage: entry\n })\n }\n }\n\n public addBoundingBoxForCurrent(boundingBox: SSpatial2DBoundingBox)\n {\n this.store.addBoundingBox({\n boundingBox: boundingBox,\n annotatableImage: this.getCheckedCurrentAnnotatableImage()\n })\n }\n\n public spawnEmptyBoundingBox()\n {\n const spatial2DBoundingBoxManager = new Spatial2DBoundingBoxManager();\n\n const result = spatial2DBoundingBoxManager.tryAddNew(AnnotationType.MAMMAL);\n\n this.setCurrentBoundingBox(result);\n }\n\n // ------------------------------\n // Set\n // ------------------------------\n\n public setCurrentAnnotatableImageFromImageData(imageData: SImageData)\n {\n this._store.setCurrentAnnotatableImage(this._store.entries.filter(entry => entry.image.instanceId === imageData.instanceId)[0].instanceId);\n }\n\n public setBoundingBoxDimensions(top: number, left: number, width: number, height: number)\n {\n this._store.setCurrentBoundingBoxDimensions({\n top: top, left: left, width: width, height: height\n })\n }\n\n public setCurrentBoundingBoxAnnotations(annotations: SSpatial2DDotAnnotation[])\n {\n this._store.setCurrentBoundingBoxAnnotations(annotations);\n }\n\n public setAnnotations(annotations: SSpatial2DDotAnnotation[])\n {\n const annotatableImageInstanceId = this.getCheckedCurrentAnnotatableImage().instanceId;\n const boundingBoxInstanceId = this.getCheckedCurrentBoundingBox().instanceId;\n\n const annotatableImage = this.getByInstanceId(annotatableImageInstanceId);\n\n const boundingBox = annotatableImage.boundingBoxes.filter(boundingBox => boundingBox.instanceId === boundingBoxInstanceId);\n\n if (boundingBox.length === 1)\n {\n boundingBox[0].annotations = annotations;\n\n this.setByInstanceId(annotatableImageInstanceId, annotatableImage);\n }\n else\n {\n throw \"Can't add annotations to bounding box of instanceId \"+ boundingBoxInstanceId +\" : bounding box doesn't exist for annotatableImage of instanceId \"+ annotatableImageInstanceId;\n }\n }\n\n // ------------------------------\n // Delete\n // ------------------------------\n\n public removeBoundingBox(boundingBox: SSpatial2DBoundingBox)\n {\n this._store.resetCurrentBoundingBox();\n\n this._store.removeBoundingBox(boundingBox.instanceId);\n }\n\n public removeDotAnnotationOfInstanceIdAndTypeFromCurrentBoundingBox(instanceId: string, type: string)\n {\n this.store.removeDotAnnotationOfInstanceIdFromCurrentBoundingBox(instanceId);\n\n AnnotatableBodyPartDisplayParamsStoreManager.store.setIsSpawnedBasedOnValue({value: type, isSpawned: false});\n AnnotatableBodyPartDisplayParamsStoreManager.store.resetSelected();\n AnnotatableBodyPartDisplayParamsStoreManager.store.switchToNextSelected();\n }\n\n // ------------------------------\n // Communications with the store\n // ------------------------------\n\n public getByImageInstanceId(imageInstanceId: string)\n {\n const compatibleImages = this._store.entries.filter(annotatableImageData => annotatableImageData.image.instanceId === imageInstanceId);\n\n if (compatibleImages.length !== 1)\n throw \"Logical Error : No or multiple entries for the imageInstanceId : \" + imageInstanceId;\n\n return compatibleImages[0];\n }\n\n protected getByInstanceId(instanceId: string)\n {\n return this._store.byInstanceId(instanceId, true) as SAnnotatableImageData\n }\n\n protected setByInstanceId(instanceId: string, annotatableImage: SAnnotatableImageData)\n {\n this._store.setByInstanceId({\n entry: annotatableImage,\n instanceId: instanceId\n });\n }\n}\n\nexport const AnnotatableImagesStoreManager = new AnnotatableImagesStoreManagerBuilder();","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives, withCtx as _withCtx, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\n\nimport ImagesSelector from \"@/lib/components/form/file/auto-storing/ImageSelector.vue\";\nimport SubMenu from \"@/lib/components/layout/menu/SubMenu.vue\";\nimport {PropType} from \"vue\";\nimport ButtonGroup from \"@/lib/components/UI/ButtonGroup.vue\";\nimport JsonSelector from \"@/lib/components/form/file/auto-storing/JsonSelector.vue\";\nimport {SAnnotatableImageData} from \"@/store/Spatial2DAnnotation/model/SAnnotatableImageData\";\nimport {\n AnnotatableImagesStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/AnnotatableImagesStoreManager\";\n\n// ------------------------------\n// Base\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'CowImagesAnnotationLeftMenu',\n props: {\n annotatableImages: Array as PropType,\n},\n setup(__props) {\n\n\n\n\n// ------------------------------\n// Actions\n// ------------------------------\n\nconst spawnBoundingBox = () =>\n{\n AnnotatableImagesStoreManager.spawnEmptyBoundingBox();\n}\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createVNode(SubMenu, {\n title: \"Load mammals\",\n icon: require('@/lib/assets/img/icons/chevron-right.svg')\n }, {\n default: _withCtx(() => [\n _createVNode(ImagesSelector, {\n text: \"Load pictures\",\n icon: require('@/lib/assets/img/icons/images.svg'),\n is_multiple: true,\n manager_class: _unref(AnnotatableImagesStoreManager),\n manager_mutator: \"addEmpty\"\n }, null, 8, [\"icon\", \"manager_class\"]),\n _hoisted_1,\n _withDirectives(_createVNode(JsonSelector, {\n text: \"Load annotations data\",\n icon: require('@/lib/assets/img/icons/graph.svg'),\n is_multiple: true,\n manager_class: _unref(AnnotatableImagesStoreManager),\n manager_mutator: \"addFromFile\",\n empty_store_before_load: false\n }, null, 8, [\"icon\", \"manager_class\"]), [\n [_vShow, __props.annotatableImages && __props.annotatableImages.length]\n ])\n ]),\n _: 1\n }, 8, [\"icon\"]),\n _withDirectives(_createVNode(SubMenu, {\n title: \"Annotation tools\",\n icon: require('@/lib/assets/img/icons/chevron-right.svg')\n }, {\n default: _withCtx(() => [\n _createVNode(ButtonGroup, {\n buttons: [{\n id: 'new-bounding-box',\n text: 'Add bounding box',\n icon: require('@/lib/assets/img/icons/box-add.svg'),\n additionalClass: 'button-style-bordered button-large'\n }],\n onClick: spawnBoundingBox\n }, null, 8, [\"buttons\"])\n ]),\n _: 1\n }, 8, [\"icon\"]), [\n [_vShow, __props.annotatableImages && __props.annotatableImages.length && _unref(AnnotatableImagesStoreManager).store.currentAnnotatableImage]\n ])\n ], 64))\n}\n}\n\n})","import script from \"./CowImagesAnnotationLeftMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CowImagesAnnotationLeftMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","export enum AspectRatio {\n \"21/9\" = \"21/9\", // very wide\n \"16/9\" = \"16/9\", // most common\n \"16/10\" = \"16/10\", // a bit flat\n \"4/3\" = \"4/3\", // very flat\n \"1/1\" = \"1/1\", // square\n}","export enum PageContentLayoutSpaceTaken {\n ALL = \"ALL\",\n MODERATELY = \"MODERATELY\",\n}","export enum CarouselShortcutType {\n TO_NEXT_SLIDE = \"TO_NEXT_SLIDE\", // no meta\n TO_PREVIOUS_SLIDE = \"TO_PREVIOUS_SLIDE\", // no meta\n TO_FIRST_SLIDE = \"TO_FIRST_SLIDE\", // no meta\n TO_LAST_SLIDE = \"TO_LAST_SLIDE\", // no meta\n}","import { useCssVars as _useCssVars, unref as _unref, defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-677febec\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"overlay\" }\n\nimport {ref, watch} from \"vue\";\n\n// ------------------------------\n// Base\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'FrameOverlay',\n props: {\n overriddenOverlayWidth: Number,\n overriddenOverlayHeight: Number,\n},\n setup(__props) {\n\nconst props = __props\n\n_useCssVars(_ctx => ({\n \"6400b152\": (overlayWidth.value),\n \"4fb36c94\": (overlayHeight.value)\n}))\n\n\n\n// ------------------------------\n// Overlay's target resize handling\n// ------------------------------\n\nconst overlayWidth = ref(\"100%\");\nconst overlayHeight = ref(\"100%\");\n\nconst updateOverlayDimensions = () =>\n{\n if (props.overriddenOverlayWidth && props.overriddenOverlayHeight)\n {\n overlayWidth.value = props.overriddenOverlayWidth + \"px\";\n overlayHeight.value = props.overriddenOverlayHeight + \"px\";\n }\n};\n\nwatch(() => props.overriddenOverlayWidth, updateOverlayDimensions);\nwatch(() => props.overriddenOverlayHeight, updateOverlayDimensions);\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _renderSlot(_ctx.$slots, \"default\")\n ]))\n}\n}\n\n})","import script from \"./FrameOverlay.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./FrameOverlay.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./FrameOverlay.vue?vue&type=style&index=0&id=677febec&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-677febec\"]])\n\nexport default __exports__","import {Ref} from \"vue\";\nimport html2canvas from \"html2canvas\";\n\ninterface onResizeCallback { (): void }\n\nexport const onElementResize = (ref: Ref|HTMLElement, callback: onResizeCallback) => {\n if (ref instanceof HTMLElement)\n new ResizeObserver(callback).observe(ref)\n else if (ref.value) // ref.value if a dom element. ref.value.$el if a component\n new ResizeObserver(callback).observe(\"$el\" in ref.value ? ref.value.$el : ref.value)\n}\n\nexport interface onElementClonedCallback { (clonedDoc: Document): void }\n\n/**\n * Creates a canvas with the same view as what's in a given dom element\n * @param domElement\n * @param onElementCloned Callback used to control the cloned DOM (useful if the element may be unrendered)\n * @return Promise with (canvas: HTMLCanvasElement) as its callback\n */\nexport const screenshotDomElementToCanvas = async (domElement: HTMLElement, onElementCloned: onElementClonedCallback|undefined = undefined) =>\n{\n return await html2canvas(domElement, {\n backgroundColor:null,\n onclone: function (clonedDoc)\n {\n if (onElementCloned)\n onElementCloned(clonedDoc);\n }\n });\n}\n\n/**\n * Loads a resource of an image for further processing.\n * This is useful if you want to get an image's dimensions without worrying if it's rendered or not.\n * @param element\n */\nexport const loadElementAsResource = (element: HTMLElement) =>\n{\n return element.cloneNode(true);\n}\n\n/**\n * Loads a resource of an image for further processing.\n * This is useful if you want to get an image's dimensions without worrying if it's rendered or not.\n * @param src\n */\nexport const loadImageAsResource = (src: string) =>\n{\n return new Promise(resolve =>\n {\n const imageResource = new Image();\n\n imageResource.addEventListener('load', () => resolve(imageResource));\n\n /*\n * Setting the Image.src is what starts the networking process\n * to populate an image. After you set it, the browser fires\n * a request to get the resource. We attached a load listener\n * which will be called once the request finishes and we have\n * image data\n */\n imageResource.src = src;\n });\n}\n\nexport const canvasToBlob = (canvas: HTMLCanvasElement): Promise => {\n return new Promise((resolve) => {\n canvas.toBlob(blob => {\n if (blob) resolve(blob);\n });\n });\n}","import { defineComponent as _defineComponent } from 'vue'\nimport { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, withCtx as _withCtx, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-27f583f9\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"image-container\" }\nconst _hoisted_2 = [\"src\", \"data-instance-id\", \"data-name\", \"id\"]\nconst _hoisted_3 = { key: 2 }\nconst _hoisted_4 = {\n key: 0,\n class: \"no-image\"\n}\n\nimport {onMounted, PropType, Ref, ref, useSlots} from \"vue\";\nimport FrameOverlay from \"@/lib/components/frame/overlay/FrameOverlay.vue\";\nimport {onElementResize} from \"@/lib/common/utilities/DomUtilities\";\nimport {SImageData} from \"@/lib/store/model/media/SImageData\";\n\n// ------------------------------\n// Base\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'OverlayableImage',\n props: {\n image: Object as PropType,\n},\n setup(__props, { expose }) {\n\nconst props = __props\n\n\n\n\nconst slots = useSlots();\n\nconst hasSlot = (name: string) => !!slots[name];\n\n// ------------------------------\n// Overlay's size handlers\n// ------------------------------\n\nconst HTMLImage: Ref = ref();\n\nconst overriddenOverlayWidth = ref(),\n overriddenOverlayHeight = ref();\n\nconst recalculateOverlayDimensions = () =>\n{\n if (HTMLImage.value)\n {\n overriddenOverlayWidth.value = HTMLImage.value.offsetWidth;\n overriddenOverlayHeight.value = HTMLImage.value.offsetHeight;\n }\n}\n\nconst surveyChangesInImageDimensions = () =>\n{\n onElementResize(HTMLImage, recalculateOverlayDimensions);\n}\n\nonMounted(() =>\n{\n surveyChangesInImageDimensions();\n\n if (props.image)\n recalculateOverlayDimensions();\n});\n\n// ------------------------------\n// Ref exposition\n// ------------------------------\n\nexpose({\n HTMLImage\n})\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (__props.image)\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: __props.image.url,\n alt: \"image to annotate\",\n \"data-instance-id\": __props.image.instanceId,\n \"data-name\": __props.image.name,\n id: 'overlayable-image-'+ __props.image.instanceId,\n class: \"overlayable-image\",\n ref_key: \"HTMLImage\",\n ref: HTMLImage\n }, null, 8, _hoisted_2))\n : _createCommentVNode(\"\", true),\n (__props.image)\n ? (_openBlock(), _createBlock(FrameOverlay, {\n key: 1,\n \"overridden-overlay-width\": overriddenOverlayWidth.value,\n \"overridden-overlay-height\": overriddenOverlayHeight.value\n }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"overridden-overlay-width\", \"overridden-overlay-height\"]))\n : _createCommentVNode(\"\", true),\n (!__props.image)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (!hasSlot('no-image-loaded-message'))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, \"No image loaded\"))\n : _createCommentVNode(\"\", true),\n _renderSlot(_ctx.$slots, \"no-image-loaded-message\")\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./OverlayableImage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./OverlayableImage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./OverlayableImage.vue?vue&type=style&index=0&id=27f583f9&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-27f583f9\"]])\n\nexport default __exports__","import {generateInstanceId} from \"@/lib/common/utilities/StringUtilities\";\nimport _ from \"lodash\";\n\ninterface onKeyPressed { (): void }\n\ntype ShortcutConfig = {\n shortcutCode: string,\n callback: onKeyPressed\n}\n\nexport enum SPECIAL_SHORTCUT_CODE\n{\n LEFT_CLICK = \"LEFT_CLICK\",\n WHEEL_DOWN = \"WHEEL_DOWN\",\n WHEEL_UP = \"WHEEL_UP\",\n}\n\n/**\n * Use this class to register your shortcuts.\n * You can use this page to retrieve the key codes you need : https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code\n */\nclass ShortcutsManager\n{\n /**\n * The shortcutCode is equal to the keyCode and may be appended by \"Ctrl+\" if requires Ctrl pressed at the same time\n * @protected\n */\n protected shortcuts: {\n [instanceId: string]: ShortcutConfig\n } = {};\n\n protected ctrlPart = \"Ctrl+\";\n protected altPart = \"Alt+\";\n protected shiftPart = \"Shift+\";\n\n constructor()\n {\n window.addEventListener('keydown', (e: KeyboardEvent) =>\n {\n if (e.repeat) return;\n\n this.checkAndRunShortcuts(e, e.code);\n })\n\n window.addEventListener('click', (e: MouseEvent) =>\n {\n this.checkAndRunShortcuts(e, SPECIAL_SHORTCUT_CODE.LEFT_CLICK);\n })\n\n const throttledWheel = _.throttle((e: WheelEvent) =>\n {\n console.log(\"Wheel delta :\" + e.deltaY);\n\n if (e.deltaY >= 10)\n this.checkAndRunShortcuts(e, SPECIAL_SHORTCUT_CODE.WHEEL_DOWN, false);\n\n if (e.deltaY <= -10)\n this.checkAndRunShortcuts(e, SPECIAL_SHORTCUT_CODE.WHEEL_UP, false);\n\n }, 100);\n\n window.addEventListener('wheel', throttledWheel)\n }\n\n protected checkAndRunShortcuts = (e: MouseEvent|KeyboardEvent, code: string, preventDefault: boolean = true) =>\n {\n Object.values(this.shortcuts).forEach(shortcut =>\n {\n const shortcutCode = (e.ctrlKey ? this.ctrlPart : \"\") + (e.altKey ? this.altPart : \"\") + (e.shiftKey ? this.shiftPart : \"\") + code;\n\n if (shortcut.shortcutCode === shortcutCode)\n {\n if (preventDefault)\n e.preventDefault();\n\n shortcut.callback();\n }\n })\n }\n\n public getShortcutCode(keyCode: string, requiresCtrl: boolean = false, requiresAlt: boolean = false, requiresShift: boolean = false)\n {\n return (requiresCtrl ? this.ctrlPart : \"\") + (requiresAlt ? this.altPart : \"\") + (requiresShift ? this.shiftPart : \"\") + keyCode\n }\n\n public hasRegistered(instanceId: string)\n {\n return instanceId in this.shortcuts;\n }\n\n public register(keyCode: string, requiresCtrl: boolean, requiresAlt: boolean, requiresShift: boolean, callback: onKeyPressed)\n {\n const instanceId = generateInstanceId();\n\n this.shortcuts[instanceId] = {\n shortcutCode: this.getShortcutCode(keyCode, requiresCtrl, requiresAlt, requiresShift),\n callback: callback\n };\n\n return instanceId;\n }\n\n public unregister(instanceId: string)\n {\n if (this.hasRegistered(instanceId))\n delete this.shortcuts[instanceId];\n }\n\n public unregisterAll()\n {\n this.shortcuts = {};\n }\n}\n\nexport default new ShortcutsManager();","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-998e2d4a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n class: \"slides-counter\"\n}\nconst _hoisted_2 = [\"onClick\"]\nconst _hoisted_3 = { class: \"image-name\" }\nconst _hoisted_4 = [\"src\"]\n\nimport {computed, onMounted, onUnmounted, PropType, ref, watch} from \"vue\";\nimport ScrollableElement from \"@/lib/components/flexible/ScrollableElement.vue\";\nimport {CarouselShortcut} from \"@/lib/components/frame/carousel/type/CarouselShortcut\";\nimport ShortcutsManager from \"@/lib/common/helpers/ShortcutsManager\";\nimport {CarouselShortcutType} from \"@/lib/components/frame/carousel/enum/CarouselShortcutType\";\nimport {SImageData} from \"@/lib/store/model/media/SImageData\";\n\n// ------------------------------\n// Base\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'CarouselControlsBar',\n props: {\n images: Array as PropType,\n selectedImage: Object as PropType,\n shortcuts: Array as PropType\n},\n emits: [\"onImageSelected\"],\n setup(__props, { emit: emits }) {\n\nconst props = __props\n\n\n\n\n\n\nconst selectImage = (image: SImageData) => {\n if (image.instanceId !== props.selectedImage?.instanceId)\n emits(\"onImageSelected\", image);\n};\n\n// ------------------------------\n// Slides counter\n// ------------------------------\n\nconst currentSlideId = computed(() => {\n return props.selectedImage && props.images ? (props.images.findIndex(image => image.instanceId === props.selectedImage?.instanceId) + 1) : \"-\";\n})\n\n// ------------------------------\n// Scroll\n// ------------------------------\n\nconst controlBar = ref(),\n scrollable = ref();\n\nconst centerDiv = (div: HTMLElement) => {\n scrollable.value.scrollable.scrollTo({\n left: div.offsetLeft - (controlBar.value.offsetWidth / 2),\n top: 0,\n behavior: \"smooth\"\n });\n}\n\n// ------------------------------\n// Shortcuts handling\n// ------------------------------\n\nconst carouselControlBarSlideSelectors = ref();\n\nonMounted(() =>\n{\n if (props.shortcuts)\n {\n props.shortcuts.forEach((shortcut: CarouselShortcut) =>\n {\n ShortcutsManager.register(shortcut.keyCode, shortcut.requiresCtrl as boolean, shortcut.requiresAlt as boolean, shortcut.requiresShift as boolean, () =>\n {\n if (carouselControlBarSlideSelectors.value)\n {\n const slides = carouselControlBarSlideSelectors.value.filter((element: HTMLElement) => element),\n currentSlideKeyArray = Object.keys(slides).filter((slideKey: any) => slides[slideKey].classList.contains(\"selected\"));\n\n if (\n slides.length\n && carouselControlBarSlideSelectors.value\n )\n {\n const currentSlideKey: number|undefined = currentSlideKeyArray.length ? +currentSlideKeyArray[0] : undefined;\n\n let targetSlide;\n\n switch (shortcut.type)\n {\n case CarouselShortcutType.TO_PREVIOUS_SLIDE:\n if (typeof currentSlideKey === \"undefined\")\n targetSlide = slides[0];\n else if (currentSlideKey !== 0)\n targetSlide = slides[currentSlideKey - 1];\n break;\n\n case CarouselShortcutType.TO_NEXT_SLIDE:\n if (typeof currentSlideKey === \"undefined\")\n targetSlide = slides[0];\n else if (currentSlideKey !== (slides.length - 1))\n targetSlide = slides[currentSlideKey + 1];\n break;\n\n case CarouselShortcutType.TO_FIRST_SLIDE:\n targetSlide = slides[0];\n break;\n\n case CarouselShortcutType.TO_LAST_SLIDE:\n targetSlide = slides[slides.length - 1];\n break;\n }\n\n if (targetSlide)\n {\n targetSlide.click();\n\n centerDiv(targetSlide);\n }\n }\n }\n });\n })\n }\n})\n\nonUnmounted(() => {\n ShortcutsManager.unregisterAll();\n})\n\n// ------------------------------\n// Images load bug fix\n// ------------------------------\n\nconst forceReload = ref(false);\n\nwatch(() => props.images, () => {\n forceReload.value = true;\n\n setTimeout(() => {\n forceReload.value = false;\n }, 100);\n})\n\n\nreturn (_ctx: any,_cache: any) => {\n return (!forceReload.value)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"control-bar\",\n ref_key: \"controlBar\",\n ref: controlBar\n }, [\n (__props.images && __props.images.length)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, _toDisplayString(_unref(currentSlideId)) + \" / \" + _toDisplayString(__props.images.length), 1))\n : _createCommentVNode(\"\", true),\n _createVNode(ScrollableElement, {\n \"is-horizontal-scroll\": true,\n ref_key: \"scrollable\",\n ref: scrollable\n }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(__props.images, (image) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: image.instanceId,\n class: _normalizeClass('slide-selector ' + ((__props.selectedImage && __props.selectedImage.instanceId === image.instanceId) ? 'selected' : '')),\n ref_for: true,\n ref_key: \"carouselControlBarSlideSelectors\",\n ref: carouselControlBarSlideSelectors,\n onClick: ($event: any) => (selectImage(image))\n }, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(image.name), 1),\n _createElementVNode(\"img\", {\n src: image.url,\n alt: \"click to select this image to annotate\"\n }, null, 8, _hoisted_4)\n ], 10, _hoisted_2))\n }), 128))\n ]),\n _: 1\n }, 512)\n ], 512))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./CarouselControlsBar.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CarouselControlsBar.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CarouselControlsBar.vue?vue&type=style&index=0&id=998e2d4a&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-998e2d4a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, renderSlot as _renderSlot, withCtx as _withCtx, createVNode as _createVNode, vShow as _vShow, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-25a5f2a3\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"player-container\" }\nconst _hoisted_2 = { class: \"player\" }\nconst _hoisted_3 = [\"id\"]\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = {\n key: 0,\n class: \"no-image\"\n}\n\nimport {PropType, Ref, ref, useSlots, watch} from \"vue\";\nimport OverlayableImage from \"@/lib/components/frame/image/OverlayableImage.vue\";\nimport CarouselControlsBar from \"@/lib/components/frame/carousel/CarouselControlsBar.vue\";\nimport _ from \"lodash\";\nimport {CarouselShortcut} from \"@/lib/components/frame/carousel/type/CarouselShortcut\";\nimport {SImageData} from \"@/lib/store/model/media/SImageData\";\n\n// ------------------------------\n// Base\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'OverlayableImagesCarousel',\n props: {\n images: Array as PropType,\n shortcuts: Array as PropType\n},\n emits: [\n \"onImageSelectedBefore\",\n \"onImageSelectedAfter\",\n],\n setup(__props, { expose, emit: emits }) {\n\nconst props = __props\n\n\n\n\n\n\nconst slots = useSlots();\n\nconst hasSlot = (name: string) => !!slots[name];\n\n// ------------------------------\n// Image selection handling\n// ------------------------------\n\nconst selectedImage: Ref = ref();\n\nconst onImageSelected = (image: SImageData) =>\n{\n emits(\"onImageSelectedBefore\", {\n image: image,\n selectedImage: selectedImage.value\n });\n\n selectedImage.value = image;\n\n emits(\"onImageSelectedAfter\", selectedImage.value);\n}\n\n// ------------------------------\n// Images providing listener\n// ------------------------------\n\nwatch(() => props.images, () =>\n{\n if (props.images)\n {\n const firstImage = _.first(props.images);\n\n if (firstImage)\n onImageSelected(firstImage);\n }\n})\n\n// ------------------------------\n// Ref exposition\n// ------------------------------\n\nconst carouselImages = ref([])\n\nexpose({\n carouselImages\n})\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(__props.images, (image) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n key: image.instanceId,\n class: \"overlayable-image-container\",\n id: 'overlayable-image-container-'+ image.instanceId\n }, [\n _createVNode(OverlayableImage, {\n image: image,\n ref_for: true,\n ref_key: \"carouselImages\",\n ref: carouselImages\n }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, 'overlay ' + image.instanceId)\n ]),\n _: 2\n }, 1032, [\"image\"])\n ], 8, _hoisted_3)), [\n [_vShow, selectedImage.value && image.instanceId === selectedImage.value.instanceId]\n ])\n }), 128)),\n (typeof __props.images === 'undefined' || !__props.images.length)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n (!hasSlot('no-image-loaded-message'))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, \"No image loaded\"))\n : _createCommentVNode(\"\", true),\n _renderSlot(_ctx.$slots, \"no-image-loaded-message\")\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(CarouselControlsBar, {\n images: __props.images,\n \"selected-image\": selectedImage.value,\n shortcuts: __props.shortcuts,\n onOnImageSelected: onImageSelected\n }, null, 8, [\"images\", \"selected-image\", \"shortcuts\"])\n ]))\n}\n}\n\n})","import script from \"./OverlayableImagesCarousel.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./OverlayableImagesCarousel.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./OverlayableImagesCarousel.vue?vue&type=style&index=0&id=25a5f2a3&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-25a5f2a3\"]])\n\nexport default __exports__","import { useCssVars as _useCssVars, unref as _unref, defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nimport {AspectRatio} from \"@/lib/components/flexible/enum/AspectRatio\";\nimport {PropType} from \"vue\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'AspectRatioedElement',\n props: {\n ratio: String as PropType,\n customClass: String,\n},\n setup(__props) {\n\nconst props = __props\n\n_useCssVars(_ctx => ({\n \"606fa157\": (_unref(aspectRatio)),\n \"fa3820ec\": (_unref(width))\n}))\n\n\n\n\nconst aspectRatio = props.ratio ? props.ratio : \"initial\",\n width = aspectRatio === \"initial\" ? \"100%\" : \"initial\";\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass('aspect-ratioed ' + __props.customClass)\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 2))\n}\n}\n\n})","import script from \"./AspectRatioedElement.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AspectRatioedElement.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AspectRatioedElement.vue?vue&type=style&index=0&id=51f58014&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-51f58014\"]])\n\nexport default __exports__","export enum PageContentLayoutPositioning {\n FLEX_START = \"FLEX_START\",\n FLEX_END = \"FLEX_END\",\n CENTER = \"CENTER\",\n}","import {PageContentLayoutPositioning} from \"@/lib/components/layout/page/enum/PageContentLayoutPositioning\";\nimport {PageContentLayoutSpaceTaken} from \"@/lib/components/layout/page/enum/PageContentLayoutSpaceTaken\";\n\nconst PageContentLayoutSpaceTakenPaddings = {\n [PageContentLayoutSpaceTaken.ALL]: {\n [PageContentLayoutPositioning.CENTER]: {\n \"paddingLeft\": \"0\",\n \"paddingRight\": \"0\",\n \"paddingBottom\": \"0\",\n \"paddingTop\": \"0\",\n },\n [PageContentLayoutPositioning.FLEX_START]: {\n \"paddingLeft\": \"0\",\n \"paddingRight\": \"0\",\n \"paddingBottom\": \"0\",\n \"paddingTop\": \"0\",\n },\n [PageContentLayoutPositioning.FLEX_END]: {\n \"paddingLeft\": \"0\",\n \"paddingRight\": \"0\",\n \"paddingBottom\": \"0\",\n \"paddingTop\": \"0\",\n },\n },\n [PageContentLayoutSpaceTaken.MODERATELY]: {\n [PageContentLayoutPositioning.CENTER]: {\n \"paddingLeft\": \"calc(20% - 290px)\",\n \"paddingRight\": \"calc(20% - 290px)\",\n \"paddingBottom\": \"calc(20% - 290px)\",\n \"paddingTop\": \"calc(20% - 290px)\",\n },\n [PageContentLayoutPositioning.FLEX_START]: {\n \"paddingLeft\": \"calc(20% - 290px)\",\n \"paddingRight\": \"calc(20% - 290px)\",\n \"paddingBottom\": \"calc(20% - 290px)\",\n \"paddingTop\": \"0\",\n },\n [PageContentLayoutPositioning.FLEX_END]: {\n \"paddingLeft\": \"calc(20% - 290px)\",\n \"paddingRight\": \"calc(20% - 290px)\",\n \"paddingBottom\": \"0\",\n \"paddingTop\": \"calc(20% - 290px)\",\n },\n }\n}\n\nexport default Object.freeze(PageContentLayoutSpaceTakenPaddings);","import { useCssVars as _useCssVars, defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, withCtx as _withCtx, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, withDirectives as _withDirectives } from \"vue\"\n\nimport {PropType, ref, Ref, watch} from \"vue\";\nimport {AspectRatio} from \"@/lib/components/flexible/enum/AspectRatio\";\nimport AspectRatioedElement from \"@/lib/components/flexible/AspectRatioedElement.vue\";\nimport ScrollableElement from \"@/lib/components/flexible/ScrollableElement.vue\";\nimport {PageContentLayoutPositioning} from \"@/lib/components/layout/page/enum/PageContentLayoutPositioning\";\nimport {vElementSize} from '@vueuse/components';\nimport {PageContentLayoutSpaceTaken} from \"@/lib/components/layout/page/enum/PageContentLayoutSpaceTaken\";\nimport PageContentLayoutSpaceTakenPaddings from \"@/lib/components/layout/page/enum/PageContentLayoutSpaceTakenPaddings\";\n\n// ------------------------------\n// Props\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'PageContent',\n props: {\n aspectRatio: {\n type: String as PropType,\n default: \"initial\"\n },\n pageContentLayoutPositioning: {\n type: String as PropType,\n default: PageContentLayoutPositioning.CENTER\n },\n pageContentLayoutSpaceTaken: {\n type: String as PropType,\n default: PageContentLayoutSpaceTaken.MODERATELY\n },\n},\n setup(__props) {\n\nconst props = __props\n\n_useCssVars(_ctx => ({\n \"7d5dce05\": (flexDirection.value),\n \"4a93e59c\": (alignItems.value),\n \"88661e58\": (pagePaddingTop.value),\n \"0795e44a\": (pagePaddingRight.value),\n \"6f79c64c\": (pagePaddingBottom.value),\n \"84653f30\": (pagePaddingLeft.value)\n}))\n\n\n\n\n// ------------------------------\n// Page alignment\n// ------------------------------\n\nconst alignments = {\n [PageContentLayoutPositioning.FLEX_START]: \"flex-start\",\n [PageContentLayoutPositioning.CENTER]: \"center\",\n [PageContentLayoutPositioning.FLEX_END]: \"flex-end\",\n}\n\nconst pageHolder: Ref = ref();\n\nconst alignItems = ref(alignments[props.pageContentLayoutPositioning]),\n flexDirection = ref(\"column\");\n\nconst adjustDimensions = ({width, height}: {width: number, height: number}) =>\n{\n if (\n pageHolder.value\n && props.aspectRatio && props.aspectRatio in AspectRatio\n && alignItems.value === alignments[PageContentLayoutPositioning.CENTER]\n ) {\n const ratioWidth = +props.aspectRatio.split(\"/\")[0],\n ratioHeight = +props.aspectRatio.split(\"/\")[1];\n\n if (\n (width / height)\n > (ratioWidth / ratioHeight)\n ) {\n flexDirection.value = \"column\";\n } else {\n flexDirection.value = \"row\";\n }\n }\n};\n\n// ------------------------------\n// Page padding\n// ------------------------------\n\nconst getPagePadding = (direction: \"paddingLeft\"|\"paddingRight\"|\"paddingTop\"|\"paddingBottom\"): string =>\n{\n return PageContentLayoutSpaceTakenPaddings[props.pageContentLayoutSpaceTaken][props.pageContentLayoutPositioning][direction] + \"px\";\n}\n\nconst pagePaddingLeft = ref(),\n pagePaddingRight = ref(),\n pagePaddingTop = ref(),\n pagePaddingBottom = ref();\n\nconst recalculatePagePadding = () => {\n pagePaddingLeft.value = getPagePadding(\"paddingLeft\");\n pagePaddingRight.value = getPagePadding(\"paddingRight\");\n pagePaddingTop.value = getPagePadding(\"paddingTop\");\n pagePaddingBottom.value = getPagePadding(\"paddingBottom\");\n};\n\nrecalculatePagePadding();\n\nwatch(() => props.pageContentLayoutPositioning, () => {\n recalculatePagePadding();\n});\n\nwatch(() => props.pageContentLayoutSpaceTaken, () => {\n recalculatePagePadding();\n});\n\n\nreturn (_ctx: any,_cache: any) => {\n return _withDirectives((_openBlock(), _createBlock(ScrollableElement, {\n class: \"page\",\n ref_key: \"pageHolder\",\n ref: pageHolder\n }, {\n default: _withCtx(() => [\n _createVNode(AspectRatioedElement, {\n ratio: __props.aspectRatio,\n \"custom-class\": \"page-content\"\n }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"ratio\"])\n ]),\n _: 3\n })), [\n [_unref(vElementSize), adjustDimensions]\n ])\n}\n}\n\n})","import script from \"./PageContent.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PageContent.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PageContent.vue?vue&type=style&index=0&id=541ae57c&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-541ae57c\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport PageContent from \"@/lib/components/layout/page/PageContent.vue\";\nimport {PropType} from \"vue\";\nimport {AspectRatio} from \"@/lib/components/flexible/enum/AspectRatio\";\nimport {PageContentLayoutPositioning} from \"@/lib/components/layout/page/enum/PageContentLayoutPositioning\";\nimport {PageContentLayoutSpaceTaken} from \"@/lib/components/layout/page/enum/PageContentLayoutSpaceTaken\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'AppPage',\n props: {\n aspectRatio: String as PropType,\n pageContentLayoutPositioning: String as PropType,\n pageContentLayoutSpaceTaken: String as PropType,\n},\n setup(__props) {\n\n\n\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(PageContent, {\n \"aspect-ratio\": __props.aspectRatio,\n \"page-content-layout-positioning\": __props.pageContentLayoutPositioning,\n \"page-content-layout-space-taken\": __props.pageContentLayoutSpaceTaken\n }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"aspect-ratio\", \"page-content-layout-positioning\", \"page-content-layout-space-taken\"]))\n}\n}\n\n})","import script from \"./AppPage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppPage.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import {ref, Ref} from \"vue\";\nimport {AbstractStoreManagerBuilder} from \"@/lib/store/manager/abstract/AbstractStoreManager\";\nimport {onElementResize} from \"@/lib/common/utilities/DomUtilities\";\n\ninterface CursorHelperEventCallback { (): void }\n\ntype CursorHelperEvent = {\n instanceId: string,\n element: HTMLElement,\n isHovering: boolean,\n enterCallback: CursorHelperEventCallback,\n leaveCallback: CursorHelperEventCallback\n}\n\nclass CursorHelperBuilder\n{\n protected _top: number = 0;\n protected _left: number = 0;\n\n protected cursorHelperEvents: CursorHelperEvent[] = [];\n\n protected _cursorFollower: HTMLElement;\n\n constructor()\n {\n this._cursorFollower = document.createElement(\"div\");\n this._cursorFollower.id = \"cursor-follower\";\n this._cursorFollower.style.width = \"1px\";\n this._cursorFollower.style.height = \"1px\";\n this._cursorFollower.style.position = \"absolute\";\n this._cursorFollower.style.zIndex = \"-9999999999\";\n\n document.body.append(this._cursorFollower);\n\n window.addEventListener(\"mousemove\", (e: MouseEvent) =>\n {\n this.updateCoordinates(e.pageY, e.pageX);\n })\n\n window.onresize = function() {\n window.dispatchEvent(new Event('mousemove'))\n };\n }\n\n protected updateCoordinates = (top: number, left: number) =>\n {\n this._top = top;\n this._left = left;\n\n this._cursorFollower.style.top = this._top + \"px\";\n this._cursorFollower.style.left = this._left + \"px\";\n\n this.checkForTrueMouseHover();\n }\n\n get top () {\n return this._top;\n }\n\n get left () {\n return this._left;\n }\n\n get cursorFollower () {\n return this._cursorFollower;\n }\n\n protected checkForTrueMouseHover ()\n {\n this.cursorHelperEvents.map(event =>\n {\n // ignores the invisible elements\n const style = getComputedStyle(event.element);\n if (style.display === 'none') return false;\n if (style.visibility !== 'visible') return false;\n\n // checks if hovering\n const elementCoordinates = event.element.getBoundingClientRect();\n\n if (\n this.left >= elementCoordinates.left\n && this.left <= elementCoordinates.right\n && this.top >= elementCoordinates.top\n && this.top <= elementCoordinates.bottom\n ) {\n if (!event.isHovering)\n {\n event.isHovering = true;\n event.enterCallback();\n }\n }\n else if (event.isHovering) {\n event.isHovering = false;\n event.leaveCallback();\n }\n })\n }\n\n public watchTrueMouseHover = (element: HTMLElement, enterCallback: CursorHelperEventCallback, leaveCallback: CursorHelperEventCallback) =>\n {\n const instanceId = AbstractStoreManagerBuilder.createInstanceId();\n\n this.cursorHelperEvents.push({\n instanceId: instanceId,\n element: element,\n isHovering: false,\n enterCallback: enterCallback,\n leaveCallback: leaveCallback,\n })\n\n this.checkForTrueMouseHover();\n\n return instanceId;\n }\n\n public unwatchTrueMouseHover = (instanceId: string) =>\n {\n this.cursorHelperEvents.splice(this.cursorHelperEvents.findIndex(event => event.instanceId === instanceId), 1)\n }\n}\n\nexport const CursorHelper = new CursorHelperBuilder();","import { useCssVars as _useCssVars, unref as _unref, defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-14c03600\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"dot-annotation-container\" }\nconst _hoisted_2 = [\"id\"]\nconst _hoisted_3 = { class: \"type-container\" }\nconst _hoisted_4 = { class: \"type\" }\n\nimport {onMounted, onUnmounted, PropType, Ref, ref} from \"vue\";\nimport {SSpatial2DDotAnnotation} from \"@/store/Spatial2DAnnotation/model/SSpatial2DDotAnnotation\";\nimport {SSpatial2DBoundingBox} from \"@/store/Spatial2DAnnotation/model/SSpatial2DBoundingBox\";\nimport {CursorHelper} from \"@/lib/common/helpers/CursorHelper\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'DotAnnotation',\n props: {\n dotAnnotation: {\n type: Object as PropType,\n required: true,\n },\n parentBoundingBox: {\n type: Object as PropType,\n required: true,\n },\n parentOverlayRef: {\n type: Object as PropType>,\n required: true,\n },\n},\n emits: [\"onTrueMouseover\", \"onTrueMouseleave\"],\n setup(__props, { expose, emit: emits }) {\n\nconst props = __props\n\n_useCssVars(_ctx => ({\n \"c4407184\": (adjustedTop),\n \"1e15573e\": (adjustedLeft),\n \"0ce962e7\": (colorCode.value)\n}))\n\n\n\n\nconst colorCode = ref(props.dotAnnotation.colorCode);\n\nconst adjustedTop = \"calc(\" + props.dotAnnotation.top + \"% - 4px)\",\n adjustedLeft = \"calc(\" + props.dotAnnotation.left+ \"% - 4px)\";\n\n// ------------------------------\n// Annotation hover handling\n// ------------------------------\n\nconst dotAnnotationRef = ref();\nlet cursorHelperEventInstanceId: string;\n\n\n\nonMounted(() =>\n{\n cursorHelperEventInstanceId = CursorHelper.watchTrueMouseHover(\n dotAnnotationRef.value,\n () => {\n emits(\"onTrueMouseover\", props.dotAnnotation)\n }, () => {\n emits(\"onTrueMouseleave\", props.dotAnnotation)\n })\n})\n\nonUnmounted(() => {\n emits(\"onTrueMouseleave\", props.dotAnnotation);\n CursorHelper.unwatchTrueMouseHover(cursorHelperEventInstanceId);\n})\n\n// ------------------------------\n// Expose\n// ------------------------------\n\nexpose({\n dotAnnotationRef\n})\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n id: 'dot-annotation-' + __props.parentBoundingBox.instanceId + '-' + __props.dotAnnotation.type,\n class: \"dot-annotation\",\n ref_key: \"dotAnnotationRef\",\n ref: dotAnnotationRef\n }, null, 8, _hoisted_2),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(__props.dotAnnotation.type), 1)\n ])\n ]))\n}\n}\n\n})","import script from \"./DotAnnotation.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./DotAnnotation.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./DotAnnotation.vue?vue&type=style&index=0&id=14c03600&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-14c03600\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nimport {onMounted, ref, watch} from \"vue\";\nimport {AbstractStoreManagerBuilder} from \"@/lib/store/manager/abstract/AbstractStoreManager\";\nimport {WatchStopHandle} from \"@vue/runtime-core\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'ConnectionLine',\n props: {\n fromElementId: {\n type: String,\n required: true,\n },\n toElementId: {\n type: String,\n required: true,\n },\n color: {\n type: String,\n required: true,\n },\n forceRedraw: Number,\n},\n setup(__props) {\n\nconst props = __props\n\n\n\n\nlet doElementsExist: boolean = false;\n\nconst from = ref();\nconst to = ref();\nconst lineSvg = ref();\nconst lineIndex = AbstractStoreManagerBuilder.createInstanceId();\nconst unwatchers: WatchStopHandle[] = [];\n\n onMounted(() =>\n{\n init();\n\n tryDraw();\n\n watch(() => props.forceRedraw, () => {\n init();\n tryDraw();\n })\n})\n\nclass Vector2D{\n\n public x: number;\n public y: number;\n\n constructor(x: number,y: number){\n this.x = x;\n this.y = y;\n }\n}\n\nconst init = () =>\n{\n from.value = document.getElementById(props.fromElementId);\n to.value = document.getElementById(props.toElementId);\n\n if (from.value && to.value)\n {\n doElementsExist = true;\n\n if (unwatchers.length === 0)\n {\n unwatchers.push(watch(() => from.value.style, () => {\n tryDraw();\n }))\n\n unwatchers.push(watch(() => to.value.style, () => {\n tryDraw();\n }))\n }\n }\n else\n {\n doElementsExist = false;\n\n lineSvg.value.innerHTML = \"\";\n isLineReset = true;\n\n unwatchers.map(unwatcher => unwatcher())\n }\n\n}\n\nconst tryDraw = () =>\n{\n if (doElementsExist)\n {\n /*Calculate position relative to div -- Done by https://stackoverflow.com/questions/3234256/find-mouse-position-relative-to-element */\n const rect = lineSvg.value.getBoundingClientRect();\n const fromRect = from.value.getBoundingClientRect();\n const toRect = to.value.getBoundingClientRect();\n\n //Store the mouse position as the \"final\" position\n const initialPosOfLine = new Vector2D(fromRect.left + 5 - rect.left, fromRect.top + 5 - rect.top);\n const finalPosOfLine = new Vector2D(toRect.left + 5 - rect.left, toRect.top + 5 - rect.top);\n //Draw a line from the initialPos to the current Mouse pos.\n drawToPos(initialPosOfLine, finalPosOfLine, 'line-'+lineIndex);\n }\n}\n\nlet isLineReset: boolean = true;\nlet line: SVGLineElement;\n\n//Draw a line between 2 points, if move its true, it will move the line instead of making it\nconst drawToPos = (initial: Vector2D, final: Vector2D, id: string) =>\n{\n let move: boolean = !!line && !isLineReset;\n\n //If we are moving an existing line, set \"line\" to the current line, else, give to the new line the id attribute.\n if(!move) {\n //Declare a new Line in SVG\n line = document.createElementNS('http://www.w3.org/2000/svg','line');\n line.setAttribute('id',id)\n }\n\n //Define its starting position\n line.setAttribute('x1', '' + initial.x);\n line.setAttribute('y1', '' + initial.y);\n\n //Define its final position\n line.setAttribute('x2','' + final.x);\n line.setAttribute('y2','' + final.y);\n\n //Define its stroke.\n line.setAttribute(\"stroke\", props.color)\n line.setAttribute(\"stroke-width\", '2')\n\n //Append the line to the SVG canvas\n lineSvg.value.append(line);\n\n isLineReset = false;\n}\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"svg\", {\n class: \"line-svg\",\n ref_key: \"lineSvg\",\n ref: lineSvg\n }, null, 512))\n}\n}\n\n})","import script from \"./ConnectionLine.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ConnectionLine.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./ConnectionLine.vue?vue&type=style&index=0&id=e1f51b36&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-e1f51b36\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createVNode as _createVNode, unref as _unref, createBlock as _createBlock, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-12ea40d0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n class: \"annotations\",\n ref: \"annotationsDiv\"\n}\nconst _hoisted_2 = { class: \"connection-lines\" }\n\nimport {PropType, Ref} from \"vue\";\nimport DotAnnotation from \"@/components/frame/image/annotation/DotAnnotation.vue\";\nimport {SSpatial2DDotAnnotation} from \"@/store/Spatial2DAnnotation/model/SSpatial2DDotAnnotation\";\nimport {SSpatial2DBoundingBox} from \"@/store/Spatial2DAnnotation/model/SSpatial2DBoundingBox\";\nimport {defaultAnnotatableBodyPartsDisplayParams} from \"@/data/annotation/DefaultAnnotatableBodyPartsDisplayParams\";\nimport ConnectionLine from \"@/components/frame/image/annotation/ConnectionLine.vue\";\n\n// ------------------------------\n// Base\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'DotAnnotations',\n props: {\n dotAnnotations: {\n type: Array as PropType,\n required: true,\n },\n parentBoundingBox: {\n type: Object as PropType,\n required: true,\n },\n parentOverlayRef: {\n type: Object as PropType>,\n required: true,\n },\n forceConnectingLineRedraw: Number\n},\n emits: [\"onHoveredAnnotations\"],\n setup(__props, { emit: emits }) {\n\n\n\n\n\n\n// ------------------------------\n// Annotations hover handling\n// ------------------------------\n\nconst hoveredAnnotations: SSpatial2DDotAnnotation[] = [];\n\nconst onDotAnnotationMouseOver = (annotation: SSpatial2DDotAnnotation) => {\n if (!hoveredAnnotations.filter(hoveredAnnotation => hoveredAnnotation.instanceId === annotation.instanceId).length)\n {\n hoveredAnnotations.push(annotation);\n emits(\"onHoveredAnnotations\", hoveredAnnotations)\n }\n}\n\nconst onDotAnnotationMouseLeave = (annotation: SSpatial2DDotAnnotation) =>\n{\n if (hoveredAnnotations.filter(hoveredAnnotation => hoveredAnnotation.instanceId === annotation.instanceId).length)\n {\n hoveredAnnotations.splice(hoveredAnnotations.findIndex(hoveredAnnotation => hoveredAnnotation.instanceId === annotation.instanceId), 1)\n emits(\"onHoveredAnnotations\", hoveredAnnotations)\n }\n}\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(__props.dotAnnotations, (dotAnnotation) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"dot-annotations-container\",\n key: dotAnnotation.instanceId\n }, [\n _createVNode(DotAnnotation, {\n \"dot-annotation\": dotAnnotation,\n \"parent-overlay-ref\": __props.parentOverlayRef,\n \"parent-bounding-box\": __props.parentBoundingBox,\n onOnTrueMouseover: onDotAnnotationMouseOver,\n onOnTrueMouseleave: onDotAnnotationMouseLeave\n }, null, 8, [\"dot-annotation\", \"parent-overlay-ref\", \"parent-bounding-box\"])\n ]))\n }), 128)),\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(defaultAnnotatableBodyPartsDisplayParams), (bodyPartParams) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: bodyPartParams.value,\n class: \"connecting-lines-group\"\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(bodyPartParams.connectionLines, (connectionLine, index) => {\n return (_openBlock(), _createBlock(ConnectionLine, {\n key: index,\n color: connectionLine.colorCode,\n \"from-element-id\": 'dot-annotation-' + __props.parentBoundingBox.instanceId + '-' + bodyPartParams.value,\n \"to-element-id\": 'dot-annotation-' + __props.parentBoundingBox.instanceId + '-' + connectionLine.connectedWith,\n \"force-redraw\": __props.forceConnectingLineRedraw\n }, null, 8, [\"color\", \"from-element-id\", \"to-element-id\", \"force-redraw\"]))\n }), 128))\n ]))\n }), 128))\n ])\n ], 512))\n}\n}\n\n})","import script from \"./DotAnnotations.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./DotAnnotations.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./DotAnnotations.vue?vue&type=style&index=0&id=12ea40d0&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-12ea40d0\"]])\n\nexport default __exports__","import { useCssVars as _useCssVars, unref as _unref, defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, withModifiers as _withModifiers, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-30db1714\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"onMousedown\"]\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"draggable-portion draggable-portion-left\" }, null, -1))\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"draggable-portion draggable-portion-right\" }, null, -1))\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"draggable-portion draggable-portion-top\" }, null, -1))\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"draggable-portion draggable-portion-bottom\" }, null, -1))\nconst _hoisted_6 = [\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5\n]\n\nimport {onMounted, onUnmounted, PropType, ref, Ref} from \"vue\";\nimport {onElementResize} from \"@/lib/common/utilities/DomUtilities\";\nimport {Draggable} from \"@/lib/common/interfaces/gsap\";\n\n// ------------------------------\n// Base\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'DraggableResizableElement',\n props: {\n startLeftPosition: {\n type: Number,\n required: true,\n },\n startTopPosition: {\n type: Number,\n required: true,\n },\n startWidth: {\n type: Number,\n required: true,\n },\n startHeight: {\n type: Number,\n required: true,\n },\n zIndex: {\n type: String,\n required: true\n },\n parentContainerRef: {\n type: Object as PropType>,\n required: true,\n },\n className: String,\n isDraggable: Boolean,\n isDraggableOnlyFromBorders: Boolean,\n isResizable: Boolean,\n isDisabled: Boolean,\n},\n emits: [\"onClick\", \"onClickInTheMiddle\", \"onDragResizeStart\", \"onDragResizeEnd\"],\n setup(__props, { expose, emit: emits }) {\n\nconst props = __props\n\n_useCssVars(_ctx => ({\n \"dde8986e\": (_ctx.leftPx),\n \"2e6d87a3\": (_ctx.topPx),\n \"b12f385c\": (__props.zIndex),\n \"45f24b58\": (_ctx.widthPx),\n \"3c49232e\": (_ctx.heightPx)\n}))\n\n\n/**\n * A component that makes its content Draggable and Resizable.\n * Works on absolute and fixed positioning. Does not work with transforms.\n * Pass it its container to make it unable to leave it.\n */\n\n\n\n\n\n// ------------------------------\n// Drag & Resize\n// ------------------------------\n\nconst drElement = ref();\nconst drElementInside = ref();\nconst bottomRightResizer = ref();\nconst bottomLeftResizer = ref();\nconst topRightResizer = ref();\nconst topLeftResizer = ref();\nconst draggablePortionsContainer = ref();\n\nonMounted(() =>\n{\n onElementResize(props.parentContainerRef, () =>\n {\n console.log(\"overlay resize!\");\n onParentResize();\n })\n\n onParentResize();\n\n if (props.isDraggable)\n {\n handleDraggable();\n }\n\n if (props.isResizable)\n {\n handleResizable();\n }\n})\n\nconst handleDraggable = () =>\n{\n Draggable.create(drElement.value, {\n type: \"left,top\",\n trigger: draggablePortionsContainer.value.children,\n edgeResistance: 1,\n bounds: props.parentContainerRef,\n onDragStart: () => {\n emits(\"onDragResizeStart\");\n },\n onDragEnd: () => {\n emits(\"onDragResizeEnd\");\n },\n });\n}\n\nconst handleResizable = () =>\n{\n initResizeBottomRight(bottomRightResizer);\n initResizeBottomRight(bottomLeftResizer);\n initResizeBottomRight(topRightResizer);\n initResizeBottomRight(topLeftResizer);\n}\n\nconst minimum_size = 20;\n\nlet currentResizer: Ref,\n original_width: number,\n original_height: number,\n original_x: number,\n original_y: number,\n original_mouse_x: number,\n original_mouse_y: number;\n\nconst initResizeBottomRight = (resizeHandler: Ref) =>\n{\n resizeHandler.value.addEventListener('mousedown', function(e: MouseEvent)\n {\n e.preventDefault()\n\n emits(\"onDragResizeStart\");\n\n currentResizer = resizeHandler;\n\n const parentRect = props.parentContainerRef.getBoundingClientRect();\n\n original_width = parseFloat(getComputedStyle(drElement.value, null).getPropertyValue('width').replace('px', ''));\n original_height = parseFloat(getComputedStyle(drElement.value, null).getPropertyValue('height').replace('px', ''));\n original_x = drElement.value.getBoundingClientRect().left - parentRect.left;\n original_y = drElement.value.getBoundingClientRect().top - parentRect.top;\n original_mouse_x = e.pageX;\n original_mouse_y = e.pageY;\n\n window.addEventListener('mousemove', resize)\n window.addEventListener('mouseup', stopResize)\n })\n}\n\nconst resize = (e: MouseEvent) =>\n{\n const parentRect = props.parentContainerRef.getBoundingClientRect();\n const drRect = drElement.value.getBoundingClientRect();\n\n if (currentResizer.value.classList.contains('bottom-right-resizer')) {\n let width = original_width + (e.pageX - original_mouse_x);\n let height = original_height + (e.pageY - original_mouse_y)\n\n if (drRect.left + width >= parentRect.left + parentRect.width)\n width = parentRect.left + parentRect.width - drRect.left;\n\n if (width > minimum_size) {\n drElement.value.style.width = width + 'px'\n }\n\n if (drRect.top + height >= parentRect.top + parentRect.height)\n height = parentRect.top + parentRect.height - drRect.top;\n\n if (height > minimum_size) {\n drElement.value.style.height = height + 'px'\n }\n }\n else if (currentResizer.value.classList.contains('bottom-left-resizer')) {\n let height = original_height + (e.pageY - original_mouse_y)\n let width = original_width - (e.pageX - original_mouse_x)\n let left = original_x + (e.pageX - original_mouse_x)\n\n if (drRect.top + height >= parentRect.top + parentRect.height)\n height = parentRect.top + parentRect.height - drRect.top;\n\n if (height > minimum_size) {\n drElement.value.style.height = height + 'px'\n }\n\n if (left <= 0) {\n left = 0;\n width = drRect.right - parentRect.left;\n }\n\n if (width > minimum_size) {\n drElement.value.style.width = width + 'px'\n drElement.value.style.left = left + 'px'\n }\n }\n else if (currentResizer.value.classList.contains('top-right-resizer')) {\n let width = original_width + (e.pageX - original_mouse_x)\n let height = original_height - (e.pageY - original_mouse_y)\n let top = original_y + (e.pageY - original_mouse_y);\n\n if (drRect.left + width >= parentRect.left + parentRect.width)\n width = parentRect.left + parentRect.width - drRect.left;\n\n if (width > minimum_size) {\n drElement.value.style.width = width + 'px'\n }\n\n if (top <= 0) {\n top = 0;\n height = drRect.bottom - parentRect.top;\n }\n\n if (height > minimum_size) {\n drElement.value.style.height = height + 'px'\n drElement.value.style.top = top + 'px'\n }\n }\n else {\n let width = original_width - (e.pageX - original_mouse_x)\n let height = original_height - (e.pageY - original_mouse_y)\n let left = original_x + (e.pageX - original_mouse_x);\n let top = original_y + (e.pageY - original_mouse_y);\n\n if (left <= 0) {\n left = 0;\n width = drRect.right - parentRect.left;\n }\n\n if (width > minimum_size) {\n drElement.value.style.width = width + 'px'\n drElement.value.style.left = left + 'px'\n }\n\n if (top <= 0) {\n top = 0;\n height = drRect.bottom - parentRect.top;\n }\n\n if (height > minimum_size) {\n drElement.value.style.height = height + 'px'\n drElement.value.style.top = top + 'px'\n }\n }\n}\n\nconst stopResize = () => {\n window.removeEventListener('mousemove', resize)\n emits(\"onDragResizeEnd\");\n}\n\nonUnmounted(() => {\n // removes the event just in case they were still running\n stopResize();\n})\n\n// ------------------------------\n// On parent resize, adjust the element's dimensions\n// ------------------------------\n\nconst onParentResize = () =>\n{\n if (drElement.value)\n {\n drElement.value.style.left = props.startLeftPosition + \"%\";\n drElement.value.style.top = props.startTopPosition + \"%\";\n drElement.value.style.width = props.startWidth + \"%\";\n drElement.value.style.height = props.startHeight + \"%\";\n }\n}\n\n// ------------------------------\n// Click in the middle\n// ------------------------------\n\nconst onClick = (e: MouseEvent) => {\n if (!e.ctrlKey)\n emits(\"onClick\");\n}\n\nconst onClickInTheMiddle = (e: MouseEvent) => {\n if (!e.ctrlKey)\n emits(\"onClickInTheMiddle\");\n}\n\n// ------------------------------\n// Ref exposition\n// ------------------------------\n\nconst drElementMiddle = ref();\n\nexpose({\n drElement,\n drElementMiddle\n})\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass('dr-element ' + __props.className),\n ref_key: \"drElement\",\n ref: drElement,\n onMousedown: _withModifiers(onClick, [\"stop\"])\n }, [\n (__props.isDraggableOnlyFromBorders)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"dr-element-inside\",\n ref_key: \"drElementInside\",\n ref: drElementInside\n }, [\n _createElementVNode(\"div\", {\n class: \"dr-element-middle\",\n ref_key: \"drElementMiddle\",\n ref: drElementMiddle,\n onMousedown: onClickInTheMiddle\n }, null, 544),\n _withDirectives(_createElementVNode(\"div\", {\n class: \"draggable-portions\",\n ref_key: \"draggablePortionsContainer\",\n ref: draggablePortionsContainer\n }, _hoisted_6, 512), [\n [_vShow, !__props.isDisabled]\n ]),\n (__props.isResizable)\n ? _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"resizer bottom-right-resizer\",\n ref_key: \"bottomRightResizer\",\n ref: bottomRightResizer\n }, null, 512)), [\n [_vShow, !__props.isDisabled]\n ])\n : _createCommentVNode(\"\", true),\n (__props.isResizable)\n ? _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"resizer bottom-left-resizer\",\n ref_key: \"bottomLeftResizer\",\n ref: bottomLeftResizer\n }, null, 512)), [\n [_vShow, !__props.isDisabled]\n ])\n : _createCommentVNode(\"\", true),\n (__props.isResizable)\n ? _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: \"resizer top-left-resizer\",\n ref_key: \"topLeftResizer\",\n ref: topLeftResizer\n }, null, 512)), [\n [_vShow, !__props.isDisabled]\n ])\n : _createCommentVNode(\"\", true),\n (__props.isResizable)\n ? _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n key: 3,\n class: \"resizer top-right-resizer\",\n ref_key: \"topRightResizer\",\n ref: topRightResizer\n }, null, 512)), [\n [_vShow, !__props.isDisabled]\n ])\n : _createCommentVNode(\"\", true),\n _renderSlot(_ctx.$slots, \"default\")\n ], 512))\n : _createCommentVNode(\"\", true)\n ], 42, _hoisted_1))\n}\n}\n\n})","import script from \"./DraggableResizableElement.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./DraggableResizableElement.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./DraggableResizableElement.vue?vue&type=style&index=0&id=30db1714&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-30db1714\"]])\n\nexport default __exports__","export enum BoundingBoxShortcutType {\n SPAWN_BOUNDING_BOX = \"SPAWN_BOUNDING_BOX\", // no meta\n SPAWN_ANNOTATION_DOT = \"SPAWN_ANNOTATION_DOT\", // no meta\n SWITCH_TO_NEXT_SPAWNLABLE = \"SWITCH_TO_NEXT_SPAWNABLE\", // no meta\n SWITCH_TO_PREVIOUS_SPAWNLABLE = \"SWITCH_TO_PREVIOUS_SPAWNABLE\", // no meta\n DELETE_ANNOTATION_DOT = \"DELETE_ANNOTATION_DOT\", // no meta\n CLEAR_ALL = \"CLEAR_ALL\", // no meta\n}","import { useCssVars as _useCssVars, defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, withModifiers as _withModifiers, createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives, toDisplayString as _toDisplayString, withCtx as _withCtx, createVNode as _createVNode, Transition as _Transition, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-29c949dd\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"icon icon-button delete-bounding-box\" }\nconst _hoisted_2 = [\"src\", \"onClick\"]\nconst _hoisted_3 = { class: \"spawnable-dot-annotation\" }\nconst _hoisted_4 = { class: \"type-container\" }\nconst _hoisted_5 = { class: \"type\" }\nconst _hoisted_6 = { class: \"mouse-linked-connection-lines\" }\n\nimport {computed, onMounted, onUnmounted, PropType, Ref, ref, watch} from \"vue\";\nimport DotAnnotations from \"@/components/frame/image/annotation/DotAnnotations.vue\";\nimport {SSpatial2DBoundingBox} from \"@/store/Spatial2DAnnotation/model/SSpatial2DBoundingBox\";\nimport {\n AnnotatableImagesStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/AnnotatableImagesStoreManager\";\nimport {\n AnnotatableBodyPartDisplayParamsStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/AnnotatableBodyPartDisplayParamsStoreManager\";\nimport DraggableResizableElement from \"@/lib/components/flexible/DraggableResizableElement.vue\";\nimport {BoundingBoxShortcut} from \"@/components/frame/image/annotation/type/BoundingBoxShortcut\";\nimport {BoundingBoxShortcutType} from \"@/components/frame/image/annotation/enum/BoundingBoxShortcutType\";\nimport ShortcutsManager, {SPECIAL_SHORTCUT_CODE} from \"@/lib/common/helpers/ShortcutsManager\";\nimport {SSpatial2DDotAnnotation} from \"@/store/Spatial2DAnnotation/model/SSpatial2DDotAnnotation\";\nimport ConnectionLine from \"@/components/frame/image/annotation/ConnectionLine.vue\";\nimport {defaultAnnotatableBodyPartsDisplayParams} from \"@/data/annotation/DefaultAnnotatableBodyPartsDisplayParams\";\nimport {onElementResize} from \"@/lib/common/utilities/DomUtilities\";\n\n// ------------------------------\n// Base\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'Spatial2DBoundingBox',\n props: {\n parentInstanceId: {\n type: String,\n required: true,\n },\n parentOverlayRef: {\n type: Object as PropType>,\n required: true,\n },\n boundingBox: {\n type: Object as PropType,\n required: true\n },\n isSelected: {\n type: Boolean,\n required: true,\n },\n displayAnnotationsHolder: Boolean,\n},\n emits: [\"onBoundingBoxClicked\", \"onCursorEntersBoundingBox\", \"onCursorLeavesBoundingBox\", \"spawnNewDotAnnotation\"],\n setup(__props, { emit: emits }) {\n\nconst props = __props\n\n_useCssVars(_ctx => ({\n \"190d699f\": (_unref(borderColor)),\n \"3311d446\": (_unref(backgroundColor)),\n \"3e7bb3c2\": (cursorOnBoundingBoxY.value),\n \"3e7bb3c4\": (cursorOnBoundingBoxX.value),\n \"2fc46828\": (_unref(spawnableDotAnnotationColor))\n}))\n\n\n\n\n\n\n// Computing here makes the bounding box's content reactive, which wouldn't be possible if computed was on the catAnnotatedImages array\n\n// ------------------------------\n// CSS\n// ------------------------------\n\nconst borderColor = computed(() => {\n return props.isSelected ? \"var(--hover)\": \"var(--annotation)\";\n});\n\nconst backgroundColor = computed(() => {\n return props.isSelected ? \"var(--hover-very-transparent)\": \"transparent\";\n});\n\nconst zIndex = computed(() => {\n return props.isSelected ? \"999999999999999\": \"0\";\n});\n\n// ------------------------------\n// Delete\n// ------------------------------\n\nconst deleteBoundingBox = () =>\n{\n AnnotatableImagesStoreManager.removeBoundingBox(props.boundingBox);\n}\n\n// ------------------------------\n// Drag & Resize\n// ------------------------------\n\nconst boundingBoxElement = ref();\n\nconst saveBoundingBoxDimensions = () =>\n{\n if (boundingBoxElement.value)\n {\n console.log(\"Saving new bounding dimensions...\");\n\n const top = Number(boundingBoxElement.value.drElement.offsetTop);\n const left = Number(boundingBoxElement.value.drElement.offsetLeft);\n const width = Number(boundingBoxElement.value.drElement.offsetWidth);\n const height = Number(boundingBoxElement.value.drElement.offsetHeight);\n\n AnnotatableImagesStoreManager.setBoundingBoxDimensions(\n (top / props.parentOverlayRef.offsetHeight) * 100,\n (left / props.parentOverlayRef.offsetWidth) * 100,\n (width / props.parentOverlayRef.offsetWidth) * 100,\n (height / props.parentOverlayRef.offsetHeight) * 100,\n );\n }\n\n}\n\n// ------------------------------\n// Selection\n// ------------------------------\n\nconst spawnableDotAnnotationDisplayParams = computed(() => {\n return AnnotatableBodyPartDisplayParamsStoreManager.store.selected;\n})\n\nconst spawnableDotAnnotationConnectionLinesParams = computed(() =>\n{\n if (!spawnableDotAnnotationDisplayParams.value.length)\n return [];\n\n const index = defaultAnnotatableBodyPartsDisplayParams.findIndex(param => param.value === spawnableDotAnnotationDisplayParams.value[0].value);\n\n return defaultAnnotatableBodyPartsDisplayParams[index].connectionLines;\n})\n\nconst spawnableDotAnnotationName = computed(() => {\n return spawnableDotAnnotationDisplayParams.value.length ? spawnableDotAnnotationDisplayParams.value[0].value : undefined;\n})\n\nconst spawnableDotAnnotationColor = computed(() => {\n return spawnableDotAnnotationDisplayParams.value.length ? spawnableDotAnnotationDisplayParams.value[0].colorCode : undefined;\n})\n\nconst onClick = () =>\n{\n emits(\"onBoundingBoxClicked\", props.boundingBox);\n}\n\nconst onClickInTheMiddle = () =>\n{\n if (props.isSelected && isCursorInsideBoundingBox.value)\n {\n if (spawnableDotAnnotationDisplayParams.value.length)\n emits(\"spawnNewDotAnnotation\", spawnableDotAnnotationDisplayParams.value[0]);\n }\n}\n\n// ------------------------------\n// Cursor tracking inside the overlay and the boundingBox\n// ------------------------------\n\nconst isCursorInsideBoundingBox = ref(false);\nconst cursorOnBoundingBoxY = ref();\nconst cursorOnBoundingBoxX = ref();\n\nonMounted(() =>\n{\n boundingBoxElement.value.drElementMiddle.addEventListener(\"mouseover\", function()\n {\n isCursorInsideBoundingBox.value = true;\n emits(\"onCursorEntersBoundingBox\", props.boundingBox.instanceId);\n });\n\n boundingBoxElement.value.drElement.addEventListener(\"mousemove\", function(this: HTMLElement, event: MouseEvent)\n {\n if (isCursorInsideBoundingBox.value)\n {\n const rect = this.getBoundingClientRect();\n\n cursorOnBoundingBoxX.value = (event.pageX - rect.left) + \"px\";\n cursorOnBoundingBoxY.value = (event.pageY - rect.top) + \"px\";\n }\n\n forceConnectingLineRedraw.value++;\n });\n\n boundingBoxElement.value.drElementMiddle.addEventListener(\"mouseleave\", function()\n {\n isCursorInsideBoundingBox.value = false;\n emits(\"onCursorLeavesBoundingBox\", props.boundingBox.instanceId);\n });\n})\n\n// ------------------------------\n// Annotations deletion\n// ------------------------------\n\nconst hoveredAnnotations: Ref = ref([]);\n\nconst onHoveredAnnotations = (annotations: SSpatial2DDotAnnotation[]) =>\n{\n hoveredAnnotations.value = annotations;\n}\n\nconst shortcuts: Ref = computed(() =>\n{\n const base = [\n {\n type: BoundingBoxShortcutType.DELETE_ANNOTATION_DOT,\n keyCode: SPECIAL_SHORTCUT_CODE.LEFT_CLICK,\n requiresCtrl: true,\n },\n ];\n\n return [\n ...base,\n ];\n});\n\nlet shortcutHolderInstanceIds: string[] = [];\n\nonMounted(() =>\n{\n registerShortcuts();\n})\n\nonUnmounted(() => {\n shortcutHolderInstanceIds.forEach(shortcutHolderInstanceId => ShortcutsManager.unregister(shortcutHolderInstanceId));\n})\n\nconst registerShortcuts = () =>\n{\n shortcuts.value.forEach((shortcut) =>\n {\n shortcutHolderInstanceIds.push(ShortcutsManager.register(shortcut.keyCode, shortcut.requiresCtrl as boolean, shortcut.requiresAlt as boolean, shortcut.requiresShift as boolean, () =>\n {\n switch (shortcut.type)\n {\n case BoundingBoxShortcutType.DELETE_ANNOTATION_DOT:\n deleteDotAnnotation();\n break;\n }\n }));\n })\n}\n\nconst deleteDotAnnotation = () =>\n{\n hoveredAnnotations.value.map(dotAnnotation => {\n AnnotatableImagesStoreManager.removeDotAnnotationOfInstanceIdAndTypeFromCurrentBoundingBox(dotAnnotation.instanceId, dotAnnotation.type);\n })\n}\n\n\n// ------------------------------\n// Connecting lines\n// ------------------------------\n\nconst forceConnectingLineRedraw = ref(0);\n\nwatch(() => props.boundingBox.annotations, () => {\n setTimeout(() => forceConnectingLineRedraw.value++, 50);\n})\n\nwatch(() => AnnotatableBodyPartDisplayParamsStoreManager.store.selected, () => {\n setTimeout(() => forceConnectingLineRedraw.value++, 50);\n})\n\nonMounted(() => {\n onElementResize(boundingBoxElement.value.drElement, () => forceConnectingLineRedraw.value++);\n})\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createVNode(DraggableResizableElement, {\n \"parent-container-ref\": __props.parentOverlayRef,\n \"start-height\": __props.boundingBox.height,\n \"start-width\": __props.boundingBox.width,\n \"start-top-position\": __props.boundingBox.top,\n \"start-left-position\": __props.boundingBox.left,\n \"z-index\": _unref(zIndex),\n \"class-name\": \"bounding-box\",\n \"is-draggable\": true,\n \"is-draggable-only-from-borders\": true,\n \"is-resizable\": true,\n \"is-disabled\": !__props.isSelected,\n onOnClick: onClick,\n onOnClickInTheMiddle: onClickInTheMiddle,\n onOnDragResizeEnd: saveBoundingBoxDimensions,\n ref_key: \"boundingBoxElement\",\n ref: boundingBoxElement\n }, {\n default: _withCtx(() => [\n _withDirectives(_createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"img\", {\n src: require('@/lib/assets/img/icons/close.svg'),\n onClick: _withModifiers(deleteBoundingBox, [\"stop\"]),\n alt: \"close popup\"\n }, null, 8, _hoisted_2)\n ], 512), [\n [_vShow, __props.isSelected]\n ]),\n _withDirectives(_createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(_unref(spawnableDotAnnotationName)), 1)\n ])\n ], 512), [\n [_vShow, __props.isSelected && isCursorInsideBoundingBox.value && _unref(spawnableDotAnnotationName)]\n ])\n ]),\n _: 1\n }, 8, [\"parent-container-ref\", \"start-height\", \"start-width\", \"start-top-position\", \"start-left-position\", \"z-index\", \"is-disabled\"]),\n _createVNode(_Transition, { name: \"fade\" }, {\n default: _withCtx(() => [\n _withDirectives(_createVNode(DotAnnotations, {\n \"dot-annotations\": __props.boundingBox.annotations,\n \"parent-bounding-box\": __props.boundingBox,\n \"parent-overlay-ref\": __props.parentOverlayRef,\n \"force-connecting-line-redraw\": forceConnectingLineRedraw.value,\n onOnHoveredAnnotations: onHoveredAnnotations\n }, null, 8, [\"dot-annotations\", \"parent-bounding-box\", \"parent-overlay-ref\", \"force-connecting-line-redraw\"]), [\n [_vShow, __props.displayAnnotationsHolder && __props.isSelected]\n ])\n ]),\n _: 1\n }),\n _withDirectives(_createElementVNode(\"div\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(spawnableDotAnnotationConnectionLinesParams), (connectionLineParams, index) => {\n return (_openBlock(), _createBlock(ConnectionLine, {\n color: connectionLineParams.colorCode,\n \"to-element-id\": 'dot-annotation-' + __props.boundingBox.instanceId + '-' + connectionLineParams.connectedWith,\n \"from-element-id\": \"cursor-follower\",\n \"force-redraw\": forceConnectingLineRedraw.value,\n key: index\n }, null, 8, [\"color\", \"to-element-id\", \"force-redraw\"]))\n }), 128))\n ], 512), [\n [_vShow, __props.displayAnnotationsHolder && isCursorInsideBoundingBox.value && __props.isSelected]\n ])\n ], 64))\n}\n}\n\n})","import script from \"./Spatial2DBoundingBox.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Spatial2DBoundingBox.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Spatial2DBoundingBox.vue?vue&type=style&index=0&id=29c949dd&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-29c949dd\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"id\"]\n\nimport Spatial2DBoundingBox from \"@/components/frame/image/annotation/Spatial2DBoundingBox.vue\";\nimport {computed, onMounted, onUnmounted, PropType, reactive, Ref, ref, watch} from \"vue\";\nimport {BoundingBoxShortcut} from \"@/components/frame/image/annotation/type/BoundingBoxShortcut\";\nimport {BoundingBoxShortcutType} from \"@/components/frame/image/annotation/enum/BoundingBoxShortcutType\";\nimport ShortcutsManager, {SPECIAL_SHORTCUT_CODE} from \"@/lib/common/helpers/ShortcutsManager\";\nimport {ReactiveVariable} from \"vue/macros\";\nimport {SAnnotatableImageData} from \"@/store/Spatial2DAnnotation/model/SAnnotatableImageData\";\nimport {\n AnnotatableImagesStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/AnnotatableImagesStoreManager\";\nimport {\n SAnnotatableBodyPartDisplayParamsData\n} from \"@/store/Spatial2DAnnotation/model/SAnnotatableBodyPartDisplayParamsData\";\nimport {\n Spatial2DBoundingBoxManager\n} from \"@/store/Spatial2DAnnotation/manager/subManager/Spatial2DBoundingBoxManager\";\nimport {AbstractSubStoreManager} from \"@/lib/store/manager/abstract/AbstractSubStoreManager\";\nimport {SSpatial2DBoundingBox} from \"@/store/Spatial2DAnnotation/model/SSpatial2DBoundingBox\";\nimport {\n AnnotatableBodyPartDisplayParamsStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/AnnotatableBodyPartDisplayParamsStoreManager\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'BoundingBoxOverlay',\n props: {\n annotatableImage: {\n type: Object as PropType,\n required: true\n }\n},\n setup(__props) {\n\nconst props = __props\n\n\n\n\n// ------------------------------\n// Overlay\n// ------------------------------\n\nconst overlay = ref();\n\n// ------------------------------\n// Bounding Box\n// ------------------------------\n\nconst currentBoundingBox = computed(() => {\n return AnnotatableImagesStoreManager.store.currentBoundingBox;\n})\n\nconst isBoundingBoxCurrent = computed(() => {\n return (instanceId: string) => {\n return !!(AnnotatableImagesStoreManager.store.currentBoundingBox && AnnotatableImagesStoreManager.store.currentBoundingBox.instanceId === instanceId)\n };\n});\n\nconst setCurrentBoundingBox = (boundingBox: SSpatial2DBoundingBox) =>\n{\n if (\n !currentBoundingBox.value\n || currentBoundingBox.value.instanceId !== boundingBox.instanceId\n )\n AnnotatableImagesStoreManager.setCurrentBoundingBox(boundingBox);\n}\n\n// ------------------------------\n// Mouse position tracking\n// ------------------------------\n\nconst cursorOnOverlayX = ref(),\n cursorOnOverlayY = ref(),\n cursorTrackingByBoundingBox: ReactiveVariable<{ [instanceId: string]: boolean }> = reactive({});\n\nonMounted(() =>\n{\n overlay.value.addEventListener(\"mousemove\", function(this: HTMLElement, event: MouseEvent)\n {\n const rect = this.getBoundingClientRect();\n\n cursorOnOverlayX.value = event.pageX - rect.left;\n cursorOnOverlayY.value = event.pageY - rect.top;\n });\n})\n\nconst onCursorEntersCurrentBoundingBox = (instanceId: string) => {\n cursorTrackingByBoundingBox[instanceId] = true;\n}\n\nconst onCursorLeavesCurrentBoundingBox = (instanceId: string) => {\n cursorTrackingByBoundingBox[instanceId] = false;\n}\n\n// ------------------------------\n// Shortcuts\n// ------------------------------\n\nconst boundingBoxShortcuts: Ref = computed(() =>\n{\n const base = [\n {\n type: BoundingBoxShortcutType.SPAWN_BOUNDING_BOX,\n keyCode: \"Space\"\n },\n {\n type: BoundingBoxShortcutType.CLEAR_ALL,\n keyCode: \"Escape\"\n },\n {\n type: BoundingBoxShortcutType.SWITCH_TO_NEXT_SPAWNLABLE,\n keyCode: SPECIAL_SHORTCUT_CODE.WHEEL_DOWN\n },\n {\n type: BoundingBoxShortcutType.SWITCH_TO_PREVIOUS_SPAWNLABLE,\n keyCode: SPECIAL_SHORTCUT_CODE.WHEEL_UP\n },\n ];\n\n return [\n ...base,\n ];\n});\n\nlet shortcutHolderInstanceIds: string[] = [];\n\nonMounted(() =>\n{\n registerShortcuts();\n})\n\nonUnmounted(() => {\n shortcutHolderInstanceIds.forEach(shortcutHolderInstanceId => ShortcutsManager.unregister(shortcutHolderInstanceId));\n})\n\nconst registerShortcuts = () =>\n{\n boundingBoxShortcuts.value.forEach((shortcut) =>\n {\n shortcutHolderInstanceIds.push(ShortcutsManager.register(shortcut.keyCode, shortcut.requiresCtrl as boolean, shortcut.requiresAlt as boolean, shortcut.requiresShift as boolean, () =>\n {\n switch (shortcut.type)\n {\n case BoundingBoxShortcutType.SPAWN_BOUNDING_BOX:\n spawnEmptyBoundingBox();\n break;\n\n case BoundingBoxShortcutType.CLEAR_ALL:\n clearAll();\n break;\n\n case BoundingBoxShortcutType.SWITCH_TO_PREVIOUS_SPAWNLABLE:\n switchToPreviousSpawnableAnnotation();\n break;\n\n case BoundingBoxShortcutType.SWITCH_TO_NEXT_SPAWNLABLE:\n switchToNextSpawnableAnnotation();\n break;\n }\n }));\n })\n}\n\n// ------------------------------\n// Bounding box\n// ------------------------------\n\nconst isCowImageCurrent = computed(() => {\n return AnnotatableImagesStoreManager.store.currentAnnotatableImage?.instanceId === props.annotatableImage.instanceId;\n});\n\nconst spawnEmptyBoundingBox = () =>\n{\n if (isCowImageCurrent.value)\n AnnotatableImagesStoreManager.spawnEmptyBoundingBox();\n}\n\nconst clearAll = () =>\n{\n if (isCowImageCurrent.value)\n AnnotatableImagesStoreManager.store.resetCurrentAnnotatableImage();\n}\n\n// ------------------------------\n// Resets the body part display params when the bounding box becomes current\n// ------------------------------\n\nwatch(() => isCowImageCurrent.value, () =>\n{\n if (isCowImageCurrent.value && currentBoundingBox.value)\n {\n AnnotatableBodyPartDisplayParamsStoreManager.resetBaseOnBoundingBox(currentBoundingBox.value);\n }\n});\n\n// ------------------------------\n// Spawnable Annotation\n// ------------------------------\n\nconst switchToNextSpawnableAnnotation = () => {\n if (isCowImageCurrent.value)\n AnnotatableBodyPartDisplayParamsStoreManager.store.switchToNextSelected();\n}\n\nconst switchToPreviousSpawnableAnnotation = () => {\n if (isCowImageCurrent.value)\n AnnotatableBodyPartDisplayParamsStoreManager.store.switchToPreviousSelected();\n}\n\n// ------------------------------\n// Annotation\n// ------------------------------\n\nconst displayAnnotationsHolder = ref(true);\n\nconst spawnDotAnnotation = (annotatableBodyPartDisplayParamsData: SAnnotatableBodyPartDisplayParamsData) =>\n{\n const x = cursorOnOverlayX.value;\n const y = cursorOnOverlayY.value;\n\n const currentBoundingBox = AnnotatableImagesStoreManager.store.currentBoundingBox;\n\n if (\n x && y\n && currentBoundingBox\n && currentBoundingBox.instanceId in cursorTrackingByBoundingBox\n && cursorTrackingByBoundingBox[currentBoundingBox.instanceId]\n && isCowImageCurrent.value\n )\n {\n const boundingBoxManager = new Spatial2DBoundingBoxManager(annotatableBodyPartDisplayParamsData.value);\n\n const result = boundingBoxManager.addDotAnnotation(currentBoundingBox, {\n instanceId: AbstractSubStoreManager.createInstanceId(),\n left: x * 100 / overlay.value.offsetWidth,\n top: y * 100 / overlay.value.offsetHeight,\n type: annotatableBodyPartDisplayParamsData.value,\n colorCode: annotatableBodyPartDisplayParamsData.colorCode\n });\n\n if (Array.isArray(result))\n throw \"Couldn't create annotation. Errors : \" + result.join(\", \");\n\n // Doing this forces the dot annotations' re-render and is being done invisibly using a transition\n displayAnnotationsHolder.value = false;\n setTimeout(() => {\n displayAnnotationsHolder.value = true;\n }, 5);\n }\n}\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"image-overlay\",\n id: 'image-overlay-' + __props.annotatableImage.image.instanceId,\n ref_key: \"overlay\",\n ref: overlay\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(__props.annotatableImage.boundingBoxes, (boundingBox) => {\n return (_openBlock(), _createBlock(Spatial2DBoundingBox, {\n key: boundingBox.instanceId,\n \"parent-instance-id\": __props.annotatableImage.instanceId,\n \"bounding-box\": boundingBox,\n \"parent-overlay-ref\": overlay.value,\n \"is-selected\": _unref(isBoundingBoxCurrent)(boundingBox.instanceId),\n \"display-annotations-holder\": displayAnnotationsHolder.value,\n onOnBoundingBoxClicked: setCurrentBoundingBox,\n onOnCursorEntersBoundingBox: onCursorEntersCurrentBoundingBox,\n onOnCursorLeavesBoundingBox: onCursorLeavesCurrentBoundingBox,\n onSpawnNewDotAnnotation: spawnDotAnnotation\n }, null, 8, [\"parent-instance-id\", \"bounding-box\", \"parent-overlay-ref\", \"is-selected\", \"display-annotations-holder\"]))\n }), 128))\n ], 8, _hoisted_1))\n}\n}\n\n})","import script from \"./BoundingBoxOverlay.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./BoundingBoxOverlay.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, withCtx as _withCtx, renderList as _renderList, createSlots as _createSlots, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-75721ef6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"carousel-player\" }\n\nimport {AspectRatio} from \"@/lib/components/flexible/enum/AspectRatio\";\nimport {PageContentLayoutSpaceTaken} from \"@/lib/components/layout/page/enum/PageContentLayoutSpaceTaken\";\nimport {CarouselShortcut} from \"@/lib/components/frame/carousel/type/CarouselShortcut\";\nimport {CarouselShortcutType} from \"@/lib/components/frame/carousel/enum/CarouselShortcutType\";\nimport OverlayableImagesCarousel from \"@/lib/components/frame/carousel/image/OverlayableImagesCarousel.vue\";\nimport AppPage from \"@/layouts/AppPage.vue\";\nimport {PropType} from \"vue\";\nimport {Ref, ref, watch} from \"vue\";\nimport BoundingBoxOverlay from \"@/components/frame/image/annotation/BoundingBoxOverlay.vue\";\nimport {SAnnotatableImageData} from \"@/store/Spatial2DAnnotation/model/SAnnotatableImageData\";\nimport {SImageData} from \"@/lib/store/model/media/SImageData\";\nimport {\n AnnotatableImagesStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/AnnotatableImagesStoreManager\";\n\n// ------------------------------\n// Base\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'CowImagesAnnotationPage',\n props: {\n annotatableImages: Array as PropType,\n},\n setup(__props, { expose }) {\n\nconst props = __props\n\n\n\n\n// ------------------------------\n// Images carousel data\n// ------------------------------\n\nconst images: Ref = ref([]);\n\nwatch(() => props.annotatableImages, () => {\n if (props.annotatableImages)\n images.value = props.annotatableImages.map(annotatableImage => annotatableImage.image);\n});\n\n// ------------------------------\n// Images carousel display\n// ------------------------------\n\nconst overlayableImagesCarouselRef = ref();\n\nconst getOverlaySlotName = (annotatableImageData: SAnnotatableImageData) => {\n return \"overlay \" + annotatableImageData.image.instanceId;\n}\n\n// ------------------------------\n// Images carousel shortcuts\n// ------------------------------\n\nconst carouselShortcuts: CarouselShortcut[] = [\n {\n type: CarouselShortcutType.TO_PREVIOUS_SLIDE,\n keyCode: \"ArrowLeft\"\n },\n {\n type: CarouselShortcutType.TO_NEXT_SLIDE,\n keyCode: \"ArrowRight\"\n },\n {\n type: CarouselShortcutType.TO_FIRST_SLIDE,\n requiresCtrl: true,\n keyCode: \"ArrowLeft\"\n },\n {\n type: CarouselShortcutType.TO_LAST_SLIDE,\n requiresCtrl: true,\n keyCode: \"ArrowRight\"\n },\n];\n\n// ------------------------------\n// Preparation for annotating\n// ------------------------------\n\nconst onImageSelectedAfter = (image: SImageData) =>\n{\n AnnotatableImagesStoreManager.setCurrentAnnotatableImageFromImageData(image);\n}\n\n// ------------------------------\n// Ref exposition\n// ------------------------------\n\nexpose({\n overlayableImagesCarouselRef\n})\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(AppPage, {\n \"aspect-ratio\": _unref(AspectRatio)['16/9'],\n \"page-content-layout-space-taken\": _unref(PageContentLayoutSpaceTaken).ALL\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(OverlayableImagesCarousel, {\n images: images.value,\n shortcuts: carouselShortcuts,\n ref_key: \"overlayableImagesCarouselRef\",\n ref: overlayableImagesCarouselRef,\n onOnImageSelectedAfter: onImageSelectedAfter\n }, _createSlots({ _: 2 }, [\n _renderList(__props.annotatableImages, (annotatableImage) => {\n return {\n name: getOverlaySlotName(annotatableImage),\n fn: _withCtx(() => [\n _createVNode(BoundingBoxOverlay, { \"annotatable-image\": annotatableImage }, null, 8, [\"annotatable-image\"])\n ])\n }\n })\n ]), 1032, [\"images\"])\n ])\n ]),\n _: 1\n }, 8, [\"aspect-ratio\", \"page-content-layout-space-taken\"]))\n}\n}\n\n})","import script from \"./CowImagesAnnotationPage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CowImagesAnnotationPage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CowImagesAnnotationPage.vue?vue&type=style&index=0&id=75721ef6&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-75721ef6\"]])\n\nexport default __exports__","\n\n\n\n","import { render } from \"./PageFooter.vue?vue&type=template&id=2ea8c906&scoped=true\"\nconst script = {}\n\nimport \"./PageFooter.vue?vue&type=style&index=0&id=2ea8c906&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2ea8c906\"]])\n\nexport default __exports__","export const delay = (time: number) => {\n return new Promise(resolve => setTimeout(resolve, time));\n}\n\n\n","export default class CsvUtilities {\n\n // ref: http://stackoverflow.com/a/1293163/2343\n // This will parse a delimited string into an array of\n // arrays. The default delimiter is the comma, but this\n // can be overriden in the second argument.\n public static csvToArray( strData: string, strDelimiter: string = \",\" ): any[][]\n {\n // Create a regular expression to parse the CSV values.\n const objPattern = new RegExp(\n (\n // Delimiters.\n \"(\\\\\" + strDelimiter + \"|\\\\r?\\\\n|\\\\r|^)\" +\n\n // Quoted fields.\n \"(?:\\\"([^\\\"]*(?:\\\"\\\"[^\\\"]*)*)\\\"|\" +\n\n // Standard fields.\n \"([^\\\"\\\\\" + strDelimiter + \"\\\\r\\\\n]*))\"\n ),\n \"gi\"\n );\n\n\n // Create an array to hold our data. Give the array\n // a default empty first row.\n const arrData: [ any[] ] = [[]];\n\n // Create an array to hold our individual pattern\n // matching groups.\n let arrMatches = null;\n\n\n // Keep looping over the regular expression matches\n // until we can no longer find a match.\n // eslint-disable-next-line no-cond-assign\n while (arrMatches = objPattern.exec( strData )){\n\n // Get the delimiter that was found.\n const strMatchedDelimiter = arrMatches[ 1 ];\n\n // Check to see if the given delimiter has a length\n // (is not the start of string) and if it matches\n // field delimiter. If id does not, then we know\n // that this delimiter is a row delimiter.\n if (\n strMatchedDelimiter.length &&\n strMatchedDelimiter !== strDelimiter\n ){\n\n // Since we have reached a new row of data,\n // add an empty row to our data array.\n arrData.push( [] );\n\n }\n\n let strMatchedValue;\n\n // Now that we have our delimiter out of the way,\n // let's check to see which kind of value we\n // captured (quoted or unquoted).\n if (arrMatches[ 2 ]){\n\n // We found a quoted value. When we capture\n // this value, unescape any double quotes.\n strMatchedValue = arrMatches[ 2 ].replace(\n new RegExp( \"\\\"\\\"\", \"g\" ),\n \"\\\"\"\n );\n\n } else {\n\n // We found a non-quoted value.\n strMatchedValue = arrMatches[ 3 ];\n\n }\n\n\n // Now that we have our value string, let's add\n // it to the data array.\n arrData[ arrData.length - 1 ].push( strMatchedValue );\n }\n\n // Return the parsed data.\n return( arrData );\n }\n\n public static arrayToCsv(data: any[][]): string\n {\n return data.map(e => e.join(\",\")).join(\"\\n\");\n }\n}\n\n","import CsvUtilities from \"@/lib/common/utilities/CsvUtilities\";\n\nexport type BlobFile = {\n blob: Blob,\n filename: string,\n}\n\nexport type BlobFileCreationArgumentsHolder = {\n data: string,\n mimeType: string,\n filename: string\n}\n\nexport const createBlobFile = ({data, mimeType, filename}: BlobFileCreationArgumentsHolder) =>\n{\n return {\n blob: new Blob([new Uint8Array([]), data], {type: mimeType}),\n filename: filename\n }\n}\n\nexport const createTextBlobFile = (data: string, filename: string) =>\n{\n return createBlobFile({\n data: data,\n mimeType: 'text/plain',\n filename: filename\n })\n}\n\nexport const createCsvBlobFile = (data: any[][], filename: string) =>\n{\n return createBlobFile({\n data: CsvUtilities.arrayToCsv(data),\n mimeType: 'text/csv',\n filename: filename\n })\n}\n\nexport const createJsonBlobFile = (data: any, filename: string) =>\n{\n return createBlobFile({\n data: JSON.stringify(data),\n mimeType: 'application/json',\n filename: filename\n })\n}\n\nexport const createBlobFiles = (blobFileCreationArgumentsHolders: BlobFileCreationArgumentsHolder[]) =>\n{\n return blobFileCreationArgumentsHolders.map(blobFileCreationArgumentsHolder => createBlobFile(blobFileCreationArgumentsHolder))\n}","export type DownloadableResource = {\n url: string,\n filename: string,\n}\n\nexport const createDownloadableResource = (resource : Blob | MediaSource | HTMLCanvasElement, filename: string) =>\n{\n return {\n url: resource instanceof HTMLCanvasElement ? resource.toDataURL() : URL.createObjectURL(resource),\n filename: filename\n }\n}","import {loadImageAsResource} from \"@/lib/common/utilities/DomUtilities\";\n\nexport const overlayCanvasOntoImage = async (canvas: HTMLCanvasElement, image: HTMLImageElement): Promise =>\n{\n return loadImageAsResource(image.src).then((imageResource: HTMLImageElement) =>\n {\n const fusingCanvas: HTMLCanvasElement = document.createElement('canvas') as HTMLCanvasElement;\n\n fusingCanvas.width = image.naturalWidth;\n fusingCanvas.height = image.naturalHeight;\n\n const context = fusingCanvas.getContext(\"2d\");\n\n if (context)\n {\n context.drawImage(imageResource,0,0,imageResource.naturalWidth,imageResource.naturalHeight);\n context.drawImage(canvas,0,0, canvas.width, canvas.height,0,0, fusingCanvas.width, fusingCanvas.height);\n }\n\n return fusingCanvas;\n })\n}\n\n\nexport const getHeightAndWidthFromImageFile = (file: File): Promise<{width: number, height: number}> => new Promise(resolve => {\n const img = new Image()\n img.onload = () => {\n resolve({\n height: img.height,\n width: img.width\n })\n }\n img.src = URL.createObjectURL(file)\n})","import {\n onElementClonedCallback,\n screenshotDomElementToCanvas\n} from \"@/lib/common/utilities/DomUtilities\";\nimport {delay} from \"@/lib/common/utilities/FlowUtilities\";\nimport JSZip from \"jszip\";\nimport {\n BlobFile,\n BlobFileCreationArgumentsHolder,\n createBlobFiles, createCsvBlobFile, createJsonBlobFile, createTextBlobFile\n} from \"@/lib/common/helpers/type/BlobFile\";\nimport {createDownloadableResource, DownloadableResource} from \"@/lib/common/helpers/type/DownloadableResource\";\nimport {overlayCanvasOntoImage} from \"@/lib/common/utilities/ImageUtilities\";\n\n/**\n * Use this class to make your data downloaded\n */\nclass DownloadHelper\n{\n protected nbDownloadedSuccessively = 0;\n protected downloadWatcher: number|undefined = undefined;\n\n public async download(downloadableResources: DownloadableResource)\n {\n // avoids getting more than 9 downloads at the same time\n if (this.nbDownloadedSuccessively >= 10)\n await delay(1000);\n\n if (this.nbDownloadedSuccessively === 0)\n {\n this.downloadWatcher = setTimeout(() => {\n this.downloadWatcher = undefined;\n this.nbDownloadedSuccessively = 0;\n }, 1000) as unknown as number;\n }\n\n this.nbDownloadedSuccessively++;\n\n // the actual file downloading\n const a: HTMLAnchorElement = document.createElement('a') as HTMLAnchorElement;\n\n a.href = downloadableResources.url;\n a.download = downloadableResources.filename;\n\n document.body.appendChild(a);\n\n a.click();\n\n document.body.removeChild(a);\n URL.revokeObjectURL(downloadableResources.url);\n }\n\n public async downloadBlob(blobFile: BlobFile)\n {\n return this.download(createDownloadableResource(blobFile.blob, blobFile.filename));\n }\n\n public async downloadFile(file: File, filename?: string)\n {\n return this.download(createDownloadableResource(file, filename ? filename : file.name));\n }\n\n public async downloadAsText(data: string, filename: string)\n {\n return this.downloadBlob(createTextBlobFile(data, filename));\n }\n\n public async downloadAsCsv(data: any[][], filename: string)\n {\n return this.downloadBlob(createCsvBlobFile(data, filename));\n }\n\n public async downloadAsJson(data: any, filename: string)\n {\n return this.downloadBlob(createJsonBlobFile(data, filename));\n }\n\n public async downloadCanvasAsImage(canvas: HTMLCanvasElement, filename: string)\n {\n return this.download(createDownloadableResource(canvas, filename));\n }\n\n public async downloadCanvasOverlaidOntoImage(canvas: HTMLCanvasElement, image: HTMLImageElement, filename: string)\n {\n const resultCanvas = await overlayCanvasOntoImage(canvas, image);\n\n return this.download(createDownloadableResource(resultCanvas, filename));\n }\n\n public async downloadDomElementAsImage(domElement: HTMLElement, filename: string)\n {\n return screenshotDomElementToCanvas(domElement).then((canvas: HTMLCanvasElement) => {\n this.downloadCanvasAsImage(canvas, filename);\n });\n }\n\n /**\n * Splashes the overlay onto the image and downloads the result as an image\n * @param image\n * @param overlay\n * @param filename\n * @param onElementCloned See screenshotDomElementToCanvas's doc\n */\n public async downloadOverlaidImage(image: HTMLImageElement, overlay: HTMLElement, filename: string, onElementCloned: onElementClonedCallback|undefined = undefined)\n {\n return screenshotDomElementToCanvas(overlay, onElementCloned).then((canvas: HTMLCanvasElement) => {\n this.downloadCanvasOverlaidOntoImage(canvas, image, filename);\n });\n }\n\n public async zipAndDownloadBlobs(blobFiles: BlobFile[], folderName: string)\n {\n const _this = this;\n\n const zip = new JSZip();\n\n const folder = zip.folder(folderName);\n\n if (folder === null)\n throw \"Cannot create zip folder \" + folderName;\n\n blobFiles.forEach(blobFile => {\n folder.file(blobFile.filename, blobFile.blob);\n })\n\n return zip.generateAsync({ type: 'blob' }).then(function (blob)\n {\n return _this.downloadBlob(\n {\n blob: blob,\n filename: folderName + \".zip\"\n });\n });\n }\n\n public async zipAndDownloadResources(resources: DownloadableResource[], folderName: string, zipName: string)\n {\n const _this = this;\n\n const zip = new JSZip();\n\n const folder = zip.folder(folderName);\n\n if (folder === null)\n throw \"Cannot create zip folder \" + folderName;\n\n for (const key in resources)\n {\n const blob = await fetch(resources[key].url).then(r => r.blob());\n\n folder.file(resources[key].filename, blob);\n }\n\n return zip.generateAsync({ type: 'blob' }).then(function (blob)\n {\n return _this.downloadBlob(\n {\n blob: blob,\n filename: zipName + \".zip\"\n });\n });\n }\n\n public async zipAndDownload(resources: BlobFileCreationArgumentsHolder[], folderName: string)\n {\n return this.zipAndDownloadBlobs(createBlobFiles(resources), folderName);\n }\n}\n\nexport default new DownloadHelper();","import DownloadHelper from \"@/lib/common/helpers/DownloadHelper\";\nimport {canvasToBlob, screenshotDomElementToCanvas} from \"@/lib/common/utilities/DomUtilities\";\nimport {BlobFile, createJsonBlobFile} from \"@/lib/common/helpers/type/BlobFile\";\nimport {completeFilename, removeExtensionFromFilename} from \"@/lib/common/utilities/StringUtilities\";\nimport {overlayCanvasOntoImage} from \"@/lib/common/utilities/ImageUtilities\";\nimport {createDownloadableResource, DownloadableResource} from \"@/lib/common/helpers/type/DownloadableResource\";\nimport OverlayableImage from \"@/lib/components/frame/image/OverlayableImage.vue\";\nimport {\n AnnotatableImagesStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/AnnotatableImagesStoreManager\";\nimport {SAnnotatableImageData} from \"@/store/Spatial2DAnnotation/model/SAnnotatableImageData\";\n\ntype CarouselImageType = {\n HTMLImage: HTMLImageElement,\n}\n\nclass AnnotatableImagesDownloadHelper\n{\n public async downloadAllAnnotatedImagesData(carouselImages: typeof OverlayableImage[])\n {\n const folderName = \"mammal annotations\";\n const zipName = new Date().toISOString() + \" mammal annotations\";\n\n const annotatedCowImagesData = AnnotatableImagesStoreManager.store.annotated;\n const annotatedImages = await this.prepareAnnotatedImages(annotatedCowImagesData, carouselImages);\n\n const downloadResources: DownloadableResource[] = [];\n\n for (const key in annotatedCowImagesData)\n {\n const mainDownloadableResources = await this.getAnnotatableImageDataBlobs(annotatedCowImagesData[key]);\n const annotatedImage = annotatedImages.filter(annotatedImage => annotatedImage.instanceId === annotatedCowImagesData[key].image.instanceId);\n\n mainDownloadableResources.forEach(mainDownloadableResource => {\n downloadResources.push(mainDownloadableResource);\n })\n\n annotatedImage.forEach(annotatedImage => {\n downloadResources.push(createDownloadableResource(annotatedImage.blobFile.blob, annotatedImage.blobFile.filename));\n })\n }\n\n return await DownloadHelper.zipAndDownloadResources(downloadResources, folderName, zipName);\n }\n\n protected async getAnnotatableImageDataBlobs(annotatableImageData: SAnnotatableImageData)\n {\n const resource: DownloadableResource[] = [];\n\n const jsonFilename = removeExtensionFromFilename(annotatableImageData.image.name) + \".json\";\n\n resource.push(createDownloadableResource(annotatableImageData.image.file, annotatableImageData.image.file.name));\n resource.push(createDownloadableResource(createJsonBlobFile(annotatableImageData.boundingBoxes, jsonFilename).blob, jsonFilename));\n\n return resource;\n }\n\n protected async prepareAnnotatedImages(annotatableImagesData: SAnnotatableImageData[], carouselImages: typeof OverlayableImage[])\n {\n const imagesInstanceIds = annotatableImagesData.map(annotatableImageData => annotatableImageData.image.instanceId);\n\n const instanceIdedBlobFiles: {\n instanceId: string,\n blobFile: BlobFile\n }[] = [];\n\n // @ts-ignore don't trust webstorm on this one\n await carouselImages.reduce( async (previousPromise: typeof Promise, carouselImage: CarouselImageType) =>\n {\n // for each of them\n await previousPromise;\n\n const instanceId = carouselImage.HTMLImage.dataset.instanceId,\n name = carouselImage.HTMLImage.dataset.name,\n container = document.getElementById(\"overlayable-image-container-\" + instanceId), // the container is the one being possibily unrendered, so we need to get it\n overlay = document.getElementById(\"image-overlay-\" + instanceId); // refs don't seem to work properly, so using the good old method\n\n if (\n instanceId && name && overlay && container\n && imagesInstanceIds.includes(instanceId)\n )\n {\n // download a copy of their view when displayed\n const filename = completeFilename(name, \"-annotated\");\n\n const canvas: HTMLCanvasElement = await screenshotDomElementToCanvas(overlay, (clonedDoc: Document) =>\n {\n // but before the download, assures this one is displayed in the cloned document (as they can be unrendered when clicking the download button)\n Array.prototype.map.call(clonedDoc.getElementsByClassName(container.className), (element) => element.style.display = \"none\");\n // @ts-ignore\n clonedDoc.getElementById(container.id).style.display = 'block';\n [...clonedDoc.getElementsByClassName(\"draggable-portions\")].map((element: HTMLElement) => element.style.display = \"none\");\n [...clonedDoc.getElementsByClassName(\"resizer\")].map((element: HTMLElement) => element.style.display = \"none\");\n [...clonedDoc.getElementsByClassName(\"delete-bounding-box\")].map((element: HTMLElement) => element.style.display = \"none\");\n [...clonedDoc.getElementsByClassName(\"annotations\")].map((element: HTMLElement) => element.style.display = \"block\");\n });\n\n instanceIdedBlobFiles.push({\n instanceId: instanceId,\n blobFile: {\n blob: await canvasToBlob(await overlayCanvasOntoImage(canvas, carouselImage.HTMLImage)),\n filename: filename\n }\n });\n }\n }, Promise.resolve())\n\n return instanceIdedBlobFiles;\n }\n}\n\nexport default new AnnotatableImagesDownloadHelper();","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport {ButtonMargin} from \"@/lib/components/UI/enum/ButtonMargin\";\nimport PageFooter from \"@/lib/components/layout/page/PageFooter.vue\";\nimport ButtonGroup from \"@/lib/components/UI/ButtonGroup.vue\";\nimport {ButtonData} from \"@/lib/components/UI/type/ButtonData\";\nimport {PropType, ref, watch} from \"vue\";\nimport CowImagesAnnotationPage from \"@/views/CowImagesAnnotation/CowImagesAnnotationPage.vue\";\nimport AnnotatableImagesDownloadHelper from \"@/helpers/AnnotatableImagesDownloadHelper\";\nimport {SAnnotatableImageData} from \"@/store/Spatial2DAnnotation/model/SAnnotatableImageData\";\n\n// ------------------------------\n// Base\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'CowImagesAnnotationFooter',\n props: {\n images: Array as PropType,\n cowImagesAnnotationPageRef: Object as PropType\n},\n setup(__props) {\n\nconst props = __props\n\n\n\n\nlet isImagesEmpty = ref(true);\n\nwatch(() => props.images, () => {\n isImagesEmpty.value = !props.images || !props.images.length;\n})\n\n// ------------------------------\n// Download buttons\n// ------------------------------\n\nconst bottomDownloadButtons: ButtonData[] = [\n {\n id: \"download json data\",\n text: \"Download JSON data\",\n icon: require(\"@/lib/assets/img/icons/json.svg\"),\n isDisabled: isImagesEmpty\n },\n];\n\nconst onBottomDownload = (buttonId: string) =>\n{\n switch (buttonId) {\n\n case \"download json data\":\n onDownloadJsonData();\n break;\n }\n}\n\nconst onDownloadJsonData = () =>\n{\n if (props.cowImagesAnnotationPageRef)\n AnnotatableImagesDownloadHelper.downloadAllAnnotatedImagesData(props.cowImagesAnnotationPageRef.overlayableImagesCarouselRef.carouselImages)\n}\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(PageFooter, null, {\n \"footer-content-center\": _withCtx(() => [\n _createVNode(ButtonGroup, {\n buttons: bottomDownloadButtons,\n margin: _unref(ButtonMargin).EXTRA_WIDE,\n onClick: onBottomDownload\n }, null, 8, [\"margin\"])\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./CowImagesAnnotationFooter.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CowImagesAnnotationFooter.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport AppLayout from \"@/layouts/AppLayout.vue\";\nimport {computed, ref} from \"vue\";\nimport CowImagesAnnotationLeftMenu from \"@/views/CowImagesAnnotation/CowImagesAnnotationLeftMenu.vue\";\nimport CowImagesAnnotationPage from \"@/views/CowImagesAnnotation/CowImagesAnnotationPage.vue\";\nimport CowImagesAnnotationFooter from \"@/views/CowImagesAnnotation/CowImagesAnnotationFooter.vue\";\nimport {\n AnnotatableImagesStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/AnnotatableImagesStoreManager\";\n\n// ------------------------------\n// Images selection listener\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'CowImagesAnnotationView',\n setup(__props) {\n\n\nconst annotatableImages = computed(() => {\n return AnnotatableImagesStoreManager.store.entries;\n})\n\nconst cowImagesAnnotationPageRef = ref();\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(AppLayout, null, {\n \"left-menu\": _withCtx(() => [\n _createVNode(CowImagesAnnotationLeftMenu, { \"annotatable-images\": _unref(annotatableImages) }, null, 8, [\"annotatable-images\"])\n ]),\n page: _withCtx(() => [\n _createVNode(CowImagesAnnotationPage, {\n \"annotatable-images\": _unref(annotatableImages),\n ref_key: \"cowImagesAnnotationPageRef\",\n ref: cowImagesAnnotationPageRef\n }, null, 8, [\"annotatable-images\"])\n ]),\n \"page-footer\": _withCtx(() => [\n _createVNode(CowImagesAnnotationFooter, {\n images: _unref(annotatableImages),\n \"cow-images-annotation-page-ref\": cowImagesAnnotationPageRef.value\n }, null, 8, [\"images\", \"cow-images-annotation-page-ref\"])\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./CowImagesAnnotationView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CowImagesAnnotationView.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import {createRouter, createWebHistory} from 'vue-router';\nimport CowImagesAnnotationView from \"@/views/CowImagesAnnotation/CowImagesAnnotationView.vue\";\n\nconst routes = [\n {\n path: '/',\n name: 'cow_images_annotation_view',\n component: CowImagesAnnotationView,\n },\n];\n\nconst router = createRouter({\n history: createWebHistory(process.env.BASE_URL),\n routes\n})\n\nexport default router","\n\n\n\n\n\n\n","import { render } from \"./App.vue?vue&type=template&id=7d7c06ff\"\nconst script = {}\n\nimport \"./lib/assets/scss/layout.scss?vue&type=style&index=0&lang=scss&external\"\nimport \"./assets/layout.scss?vue&type=style&index=1&lang=scss&external\"\n\nimport exportComponent from \"../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createApp } from 'vue'\nimport router from './router';\nimport store from './lib/store'\nimport App from './App.vue'\nimport Vue3ColorPicker from \"vue3-colorpicker\";\nimport \"vue3-colorpicker/style.css\";\nimport Vue3DraggableResizable from 'vue3-draggable-resizable'\n//default styles\nimport 'vue3-draggable-resizable/dist/Vue3DraggableResizable.css'\n\nconst app = createApp(App)\n .use(router)\n .use(store)\n .use(Vue3ColorPicker)\n .use(Vue3DraggableResizable)\n;\n\napp.mount(\"#app\");","import {Module, Mutation} from 'vuex-module-decorators'\nimport {AbstractStore} from \"@/lib/store/holder/abstract/AbstractStore\";\nimport {\n SAnnotatableBodyPartDisplayParamsData\n} from \"@/store/Spatial2DAnnotation/model/SAnnotatableBodyPartDisplayParamsData\";\nimport {defaultAnnotatableBodyPartsDisplayParams} from \"@/data/annotation/DefaultAnnotatableBodyPartsDisplayParams\";\nimport {SSpatial2DBoundingBox} from \"@/store/Spatial2DAnnotation/model/SSpatial2DBoundingBox\";\n\n@Module({\n name: \"AnnotatableBodyPartDisplayParamsStore\",\n namespaced: true,\n stateFactory: true\n})\n\nexport class AnnotatableBodyPartDisplayParamsStore extends AbstractStore\n{\n get selected()\n {\n return this._entries.filter(entry => entry.isSelected === true);\n }\n\n get byBodyPart()\n {\n const _this = this;\n\n return function (bodyPart: string, strict?: boolean): D|undefined\n {\n const entry = _this._entries.filter(entry => entry.value === bodyPart)\n const result = entry.length ? entry[0] : undefined;\n\n if (strict && typeof result === \"undefined\")\n throw \"Can't find entry of bodyPart \"+ bodyPart +\" on strict mode\";\n\n return result;\n }\n }\n\n @Mutation\n setIsSelected({instanceId, isSelected}: {instanceId: string, isSelected: boolean})\n {\n this._entries.forEach(entry => {\n entry.isSelected = false;\n if (entry.instanceId === instanceId)\n entry.isSelected = isSelected;\n });\n }\n\n @Mutation\n setIsSelectedBasedOnValue({value, isSelected}: {value: string, isSelected: boolean})\n {\n this._entries.forEach(entry => {\n entry.isSelected = false;\n if (entry.value === value)\n entry.isSelected = isSelected;\n });\n }\n\n @Mutation\n setIsSpawnedBasedOnValue({value, isSpawned}: {value: string, isSpawned: boolean})\n {\n this._entries.filter(entry => entry.value === value).map(entry => entry.isSpawned = isSpawned);\n }\n\n @Mutation\n setIsSpawnedForSelected({isSpawned}: {isSpawned: boolean})\n {\n this._entries.filter(entry => entry.isSelected).map(entry => entry.isSpawned = isSpawned);\n }\n\n @Mutation\n resetSelectedAndSpawned()\n {\n this._entries.forEach(entry => {\n entry.isSelected = false;\n entry.isSpawned = false;\n });\n }\n\n @Mutation\n resetSelected()\n {\n this._entries.forEach(entry => {\n entry.isSelected = false;\n });\n }\n\n @Mutation\n switchToNextSelected()\n {\n const selectedIndex = this._entries.findIndex(entry => entry.isSelected === true);\n\n const trySwitch = (testedEntryIndex: number, triedTimes: number = 1) =>\n {\n let nextOneIndex = testedEntryIndex + 1;\n\n if (nextOneIndex >= this._entries.length)\n nextOneIndex = 0;\n\n if (triedTimes > this._entries.length) {\n // if all entries have been tested, abort.\n this._entries.forEach(entry => {\n entry.isSelected = false;\n });\n return;\n }\n\n if (this._entries[nextOneIndex].isSpawned)\n {\n trySwitch(nextOneIndex, ++triedTimes)\n }\n else\n {\n this._entries.forEach(entry => {\n entry.isSelected = false;\n });\n\n this._entries[nextOneIndex].isSelected = true;\n }\n }\n\n trySwitch(selectedIndex >= 0 ? selectedIndex : (this._entries.length - 1))\n }\n\n @Mutation\n switchToPreviousSelected()\n {\n const selectedIndex = this._entries.findIndex(entry => entry.isSelected === true);\n\n const trySwitch = (testedEntryIndex: number, triedTimes: number = 1) =>\n {\n let nextOneIndex = testedEntryIndex - 1;\n\n if (nextOneIndex < 0)\n nextOneIndex = this._entries.length - 1;\n\n if (triedTimes > this._entries.length) {\n // if all entries have been tested, abort.\n this._entries.forEach(entry => {\n entry.isSelected = false;\n });\n return;\n }\n\n if (this._entries[nextOneIndex].isSpawned)\n {\n trySwitch(nextOneIndex, ++triedTimes)\n }\n else\n {\n this._entries.forEach(entry => {\n entry.isSelected = false;\n });\n\n this._entries[nextOneIndex].isSelected = true;\n }\n }\n\n trySwitch(selectedIndex >= 0 ? selectedIndex : (this._entries.length - 1))\n }\n\n public populate()\n {\n // Get wrapped parent module to access getters\n const base: any = Module({})(AbstractStore);\n // Copy parent getters to child\n Object.assign(AnnotatableBodyPartDisplayParamsStore.getters, base.getters);\n Object.assign(AnnotatableBodyPartDisplayParamsStore.mutations, base.mutations);\n }\n}","import {Module, Mutation} from 'vuex-module-decorators'\nimport {AbstractStore} from \"@/lib/store/holder/abstract/AbstractStore\";\nimport {SAnnotatableImageData} from \"@/store/Spatial2DAnnotation/model/SAnnotatableImageData\";\nimport {SSpatial2DDotAnnotation} from \"@/store/Spatial2DAnnotation/model/SSpatial2DDotAnnotation\";\nimport {SSpatial2DBoundingBox} from \"@/store/Spatial2DAnnotation/model/SSpatial2DBoundingBox\";\n\n@Module({\n name: \"AnnotatableImagesStore\",\n namespaced: true,\n stateFactory: true\n})\n\nexport class AnnotatableImagesStore extends AbstractStore\n{\n // ------------------------------\n // General\n // ------------------------------\n\n get annotated()\n {\n return this._entries.filter(entry => entry.boundingBoxes.length);\n }\n\n // ------------------------------\n // Currently selected\n // ------------------------------\n\n get currentAnnotatableImage()\n {\n const currentAnnotatableImage = this._entries.filter(entry => entry.isCurrent);\n\n return currentAnnotatableImage.length ? currentAnnotatableImage[0] : undefined;\n }\n\n get currentBoundingBox()\n {\n const currentAnnotatableImage = this._entries.filter(entry => entry.isCurrent);\n const currentBoundingBox = currentAnnotatableImage && currentAnnotatableImage.length ? currentAnnotatableImage[0].boundingBoxes.filter(boundingBox => boundingBox.isCurrent) : undefined;\n\n return currentBoundingBox && currentBoundingBox.length ? currentBoundingBox[0] : undefined;\n }\n\n @Mutation\n setCurrentAnnotatableImage(annotatableImageInstanceId: string)\n {\n this._entries.map(entry => entry.isCurrent = entry.instanceId === annotatableImageInstanceId);\n }\n\n @Mutation\n setCurrentBoundingBox(boundingBoxInstanceId: string)\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.boundingBoxes.map(boundingBox => boundingBox.isCurrent = boundingBox.instanceId === boundingBoxInstanceId)\n );\n }\n\n @Mutation\n setCurrentBoundingBoxDimensions({top, left, width, height}: {top: number, left: number, width: number, height: number})\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.boundingBoxes.filter(boundingBox => boundingBox.isCurrent).map(boundingBox => {\n boundingBox.top = top;\n boundingBox.left = left;\n boundingBox.width = width;\n boundingBox.height = height;\n })\n );\n }\n\n @Mutation\n setCurrentBoundingBoxAnnotations(annotations: SSpatial2DDotAnnotation[])\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.boundingBoxes.filter(boundingBox => boundingBox.isCurrent).map(boundingBox => {\n boundingBox.annotations = annotations;\n })\n );\n }\n\n @Mutation\n removeDotAnnotationOfTypeFromCurrentBoundingBox(type: string)\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.boundingBoxes.filter(boundingBox => boundingBox.isCurrent).map(boundingBox => {\n boundingBox.annotations = boundingBox.annotations.filter(annotation => annotation.type !== type);\n })\n );\n }\n\n @Mutation\n removeDotAnnotationOfInstanceIdFromCurrentBoundingBox(instanceId: string)\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.boundingBoxes.filter(boundingBox => boundingBox.isCurrent).map(boundingBox => {\n boundingBox.annotations = boundingBox.annotations.filter(annotation => annotation.instanceId !== instanceId);\n })\n );\n }\n\n @Mutation\n resetCurrentAnnotatableImage()\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => {\n entry.boundingBoxes = [];\n }\n );\n }\n\n @Mutation\n resetCurrentBoundingBox()\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.boundingBoxes.map(boundingBox => boundingBox.isCurrent = false)\n );\n }\n\n // ------------------------------\n // Bounding boxes\n // ------------------------------\n\n get boundingBoxByInstanceId()\n {\n const _this = this;\n\n return function (annotatableImageInstanceId: string, boundingBoxInstanceId: string): SSpatial2DBoundingBox\n {\n const entry = _this._entries.filter(entry => entry.instanceId === annotatableImageInstanceId);\n const boundingBox = entry.length ? entry[0].boundingBoxes.filter(boundingBox => boundingBox.instanceId === boundingBoxInstanceId) : [];\n\n const result = boundingBox ? boundingBox[0] : undefined;\n\n if (typeof result === \"undefined\")\n throw \"Fatal error : Can't find boundingBox of instanceId \"+ boundingBoxInstanceId +\" for annotatableImage of instanceId \"+ annotatableImageInstanceId;\n\n return result;\n }\n }\n\n @Mutation\n addBoundingBox({annotatableImage, boundingBox}: {annotatableImage: SAnnotatableImageData, boundingBox: SSpatial2DBoundingBox})\n {\n annotatableImage.boundingBoxes.push(boundingBox);\n }\n\n @Mutation\n removeBoundingBox(boundingBoxInstanceId: string)\n {\n this._entries.map(entry => {\n entry.boundingBoxes = entry.boundingBoxes.filter(boundingBox => boundingBox.instanceId !== boundingBoxInstanceId);\n });\n }\n\n public populate()\n {\n // Get wrapped parent module to access getters\n const base: any = Module({})(AbstractStore);\n // Copy parent getters to child\n Object.assign(AnnotatableImagesStore.getters, base.getters);\n Object.assign(AnnotatableImagesStore.mutations, base.mutations);\n }\n}","var map = {\n\t\"./file/CsvStore\": 523,\n\t\"./file/CsvStore.ts\": 523,\n\t\"./file/FilesStore\": 2314,\n\t\"./file/FilesStore.ts\": 2314,\n\t\"./media/ImagesStore\": 4114,\n\t\"./media/ImagesStore.ts\": 4114,\n\t\"./media/MediasStore\": 306,\n\t\"./media/MediasStore.ts\": 306,\n\t\"./media/VideosStore\": 9042,\n\t\"./media/VideosStore.ts\": 9042,\n\t\"./popup/PopUpsStore\": 688,\n\t\"./popup/PopUpsStore.ts\": 688\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 7027;","var map = {\n\t\"./Spatial2DAnnotation/holder/AnnotatableBodyPartDisplayParamsStore\": 5897,\n\t\"./Spatial2DAnnotation/holder/AnnotatableImagesStore\": 6769\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 6029;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkcow_images_annotation_tool\"] = self[\"webpackChunkcow_images_annotation_tool\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(2104); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["AbstractStore","VuexModule","constructor","module","super","Object","defineProperty","this","populate","_entries","entries","byInstanceId","_this","instanceId","strict","entry","filter","result","length","undefined","add","push","setByInstanceId","keys","key","removeByInstanceId","reset","__decorate","Mutation","CsvStore","CsvStore_1","FilesStore","base","Module","assign","getters","mutations","name","namespaced","stateFactory","FilesStore_1","filesData","fileDataOfInstanceId","ImagesStore","ImagesStore_1","MediasStore","MediasStore_1","medias","mediaOfInstanceId","VideosStore","VideosStore_1","store","PopUpsStore","PopUpsStore_1","popUpsStates","popUpOfInstanceId","setPopUpStateVisibility","visibility","popUpState","isVisible","context_lib","require","context_app","modules","registerContextToStore","context","forEach","file","splitPath","split","moduleName","includes","default","createStore","process","completeFilename","filename","splitName","join","generateInstanceId","uuid","v4","removeExtensionFromFilename","replace","ON_INVALID_DO","final","target","descriptor","writable","AbstractValidator","onInvalidDo","value","validate","isValid","errorMessage","modelTransformer","IsNotNullLikeValidator","AbstractValidatorCenter","entity","validator","THROW","getter","encapsulatedValidators","baseValidators","fuseValidators","setEntity","validateEntity","returnedErrors","encapsulatedValidator","validationResult","TRANSFORM","SILENT","RETURN_ERROR","CONSOLE_LOG","console","log","CONSOLE_ERROR","error","transformEntity","errorMessages","transformedEntity","_a","setter","BaseValidatorCenter","AbstractSubStoreManager","static","defaultInstanceId","trySetInstanceId","getValidatorCenterForEntity","onValidationError","errors","AbstractStoreManagerBuilder","_store","defaultPopUpsInstanceIds","userManual","PopUpsStoreManagerBuilder","getModule","createPopupState","defaultVisibility","createInstanceId","registerPopUp","PopUpsStoreManager","_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_defineComponent","props","headerText","String","mainIcon","type","required","setup","__props","openUserManual","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","src","alt","_toDisplayString","onClick","__exports__","isHorizontalScroll","Boolean","expose","scrollable","ref","scrollHorizontally","e","preventDefault","stopPropagation","race","deltaY","scrollLeft","onMounted","addEventListener","_normalizeClass","ref_key","_renderSlot","$slots","render","$props","$setup","$data","$options","footerText","defineComponent","_createVNode","MenuHeader","ScrollableElement","_withCtx","_","MenuFooter","_createBlock","MenuLayout","onOpenHelp","$event","$emit","UserManualData","title","content","_hoisted_5","hasSubHeader","_createCommentVNode","popupClass","isVisibleByDefault","computed","closePopUp","_unref","_withModifiers","userManualElements","_Transition","PopUp","_Fragment","_renderList","element","index","innerHTML","script","KonamiBuilder","start","callback","keyHandler","event","pattern","indexOf","current","document","Konami","gsap","registerPlugin","DraggablePlugin","DrawSVGPlugin","CircAnim","Draggable","Circ","isEventHappening","konamiEventContainer","nbCows","cowsLeft","setTimeout","i","Math","floor","random","offsetWidth","to","duration","y","offsetHeight","ease","easeOut","paused","play","backgroundColor","cowId","startDelay","rotation","id","style","_normalizeStyle","getUserManualElements","messages","BaseLayout","LeftMenu","PageHeader","page","UserManual","KonamiEvent","icon","text","accept","is_multiple","emits","emit","onChange","files","multiple","manager_class","manager_mutator","linkToInstanceId","empty_store_before_load","instanceIds","FileSelector","MediasStoreManagerBuilder","mediaFile","toString","url","URL","createObjectURL","addMedia","createMediaData","ImagesStoreManagerBuilder","ImagesStoreManager","linkToImageInstanceId","AutoStoringFileSelector","onOnStored","ButtonMargin","buttons","Array","margin","NONE","_useCssVars","onButtonClick","button","isDisabled","additionalClass","disabled","FilesStoreManagerBuilder","FilesStoreManager","linkToCsvInstanceId","AnnotationType","FileHelper","readAsText","fileText","Promise","resolve","reader","FileReader","onload","BoxBoundedAnnotatedImageValidatorCenter","config","freeze","DefaultAnnotatableBodyPart","IsWithinXInstancesOfTypeValidator","x","annotations","keptAnnotations","removedInstances","annotation","nbInstances","IsNumberBetweenValidator","min","max","Spatial2DBoundingBoxValidatorCenter","annotationTypeToValidate","maxNumberOfInstancesForType","top","left","Spatial2DDotAnnotationValidatorCenter","Spatial2DDotAnnotationManager","serve","defaultAnnotatableBodyPartsDisplayParams","colorCode","connectionLines","connectedWith","AnnotatableBodyPartDisplayParamsStoreManagerBuilder","AnnotatableBodyPartDisplayParamsStore","defaultAnnotatableBodyPartDisplayParams","resetBaseOnBoundingBox","BoundingBox","resetSelectedAndSpawned","map","setIsSpawnedBasedOnValue","isSpawned","switchToNextSelected","AnnotatableBodyPartDisplayParamsStoreManager","Spatial2DBoundingBoxManager","maxInstanceForType","boundingBox","dotAnnotation","rawBoundingBox","toRaw","ValidatedBoundingBox","AnnotatableImagesStoreManager","setCurrentBoundingBoxAnnotations","setIsSpawnedForSelected","maxInstancesPerBoundingBox","annotationTypes","createNew","width","height","tryAddNew","addBoundingBoxForCurrent","manager","concat","AnnotatableImagesStoreManagerBuilder","AnnotatableImagesStore","currentAnnotatableImage","setCurrentAnnotatableImage","currentBoundingBox","setCurrentBoundingBox","addEmpty","image","boundingBoxes","addFromFile","json","data","JSON","parse","imageName","targetEntries","alert","targetEntry","finalEntry","addBoundingBox","annotatableImageInstanceId","annotatableImage","getCheckedCurrentAnnotatableImage","spawnEmptyBoundingBox","spatial2DBoundingBoxManager","MAMMAL","setCurrentAnnotatableImageFromImageData","imageData","setBoundingBoxDimensions","setCurrentBoundingBoxDimensions","setAnnotations","boundingBoxInstanceId","getCheckedCurrentBoundingBox","getByInstanceId","removeBoundingBox","resetCurrentBoundingBox","removeDotAnnotationOfInstanceIdAndTypeFromCurrentBoundingBox","removeDotAnnotationOfInstanceIdFromCurrentBoundingBox","resetSelected","getByImageInstanceId","imageInstanceId","compatibleImages","annotatableImageData","annotatableImages","spawnBoundingBox","SubMenu","ImagesSelector","_withDirectives","JsonSelector","_vShow","ButtonGroup","AspectRatio","PageContentLayoutSpaceTaken","CarouselShortcutType","overriddenOverlayWidth","Number","overriddenOverlayHeight","overlayWidth","overlayHeight","updateOverlayDimensions","watch","onElementResize","HTMLElement","ResizeObserver","observe","$el","screenshotDomElementToCanvas","domElement","onElementCloned","__awaiter","html2canvas","onclone","clonedDoc","loadImageAsResource","imageResource","Image","canvasToBlob","canvas","toBlob","blob","slots","useSlots","hasSlot","HTMLImage","recalculateOverlayDimensions","surveyChangesInImageDimensions","FrameOverlay","SPECIAL_SHORTCUT_CODE","ShortcutsManager","code","values","shortcuts","shortcut","shortcutCode","ctrlKey","ctrlPart","altKey","altPart","shiftKey","shiftPart","window","repeat","checkAndRunShortcuts","LEFT_CLICK","throttledWheel","WHEEL_DOWN","WHEEL_UP","getShortcutCode","keyCode","requiresCtrl","requiresAlt","requiresShift","hasRegistered","register","unregister","unregisterAll","images","selectedImage","selectImage","currentSlideId","findIndex","controlBar","centerDiv","div","scrollTo","offsetLeft","behavior","carouselControlBarSlideSelectors","slides","currentSlideKeyArray","slideKey","classList","contains","currentSlideKey","targetSlide","TO_PREVIOUS_SLIDE","TO_NEXT_SLIDE","TO_FIRST_SLIDE","TO_LAST_SLIDE","click","onUnmounted","forceReload","ref_for","onImageSelected","firstImage","carouselImages","OverlayableImage","CarouselControlsBar","onOnImageSelected","ratio","customClass","aspectRatio","PageContentLayoutPositioning","PageContentLayoutSpaceTakenPaddings","ALL","CENTER","FLEX_START","FLEX_END","MODERATELY","pageContentLayoutPositioning","pageContentLayoutSpaceTaken","flexDirection","alignItems","pagePaddingTop","pagePaddingRight","pagePaddingBottom","pagePaddingLeft","alignments","pageHolder","adjustDimensions","ratioWidth","ratioHeight","getPagePadding","direction","recalculatePagePadding","AspectRatioedElement","vElementSize","PageContent","CursorHelperBuilder","_top","_left","_cursorFollower","checkForTrueMouseHover","enterCallback","leaveCallback","cursorHelperEvents","isHovering","splice","createElement","position","zIndex","body","append","updateCoordinates","pageY","pageX","onresize","dispatchEvent","Event","cursorFollower","getComputedStyle","display","elementCoordinates","getBoundingClientRect","right","bottom","CursorHelper","parentBoundingBox","parentOverlayRef","adjustedTop","adjustedLeft","dotAnnotationRef","cursorHelperEventInstanceId","watchTrueMouseHover","unwatchTrueMouseHover","fromElementId","toElementId","color","forceRedraw","doElementsExist","from","lineSvg","lineIndex","unwatchers","init","tryDraw","Vector2D","getElementById","isLineReset","unwatcher","rect","fromRect","toRect","initialPosOfLine","finalPosOfLine","drawToPos","line","initial","move","createElementNS","setAttribute","dotAnnotations","forceConnectingLineRedraw","hoveredAnnotations","onDotAnnotationMouseOver","hoveredAnnotation","onDotAnnotationMouseLeave","DotAnnotation","onOnTrueMouseover","onOnTrueMouseleave","bodyPartParams","connectionLine","ConnectionLine","_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_6","startLeftPosition","startTopPosition","startWidth","startHeight","parentContainerRef","className","isDraggable","isDraggableOnlyFromBorders","isResizable","leftPx","topPx","widthPx","heightPx","drElement","drElementInside","bottomRightResizer","bottomLeftResizer","topRightResizer","topLeftResizer","draggablePortionsContainer","onParentResize","handleDraggable","handleResizable","create","trigger","children","edgeResistance","bounds","onDragStart","onDragEnd","initResizeBottomRight","minimum_size","currentResizer","original_width","original_height","original_x","original_y","original_mouse_x","original_mouse_y","resizeHandler","parentRect","parseFloat","getPropertyValue","resize","stopResize","drRect","removeEventListener","onClickInTheMiddle","drElementMiddle","onMousedown","BoundingBoxShortcutType","parentInstanceId","isSelected","displayAnnotationsHolder","borderColor","cursorOnBoundingBoxY","cursorOnBoundingBoxX","spawnableDotAnnotationColor","deleteBoundingBox","boundingBoxElement","saveBoundingBoxDimensions","offsetTop","spawnableDotAnnotationDisplayParams","selected","spawnableDotAnnotationConnectionLinesParams","param","spawnableDotAnnotationName","isCursorInsideBoundingBox","onHoveredAnnotations","DELETE_ANNOTATION_DOT","shortcutHolderInstanceIds","registerShortcuts","shortcutHolderInstanceId","deleteDotAnnotation","DraggableResizableElement","onOnClick","onOnClickInTheMiddle","onOnDragResizeEnd","DotAnnotations","onOnHoveredAnnotations","connectionLineParams","overlay","isBoundingBoxCurrent","cursorOnOverlayX","cursorOnOverlayY","cursorTrackingByBoundingBox","reactive","onCursorEntersCurrentBoundingBox","onCursorLeavesCurrentBoundingBox","boundingBoxShortcuts","SPAWN_BOUNDING_BOX","CLEAR_ALL","SWITCH_TO_NEXT_SPAWNLABLE","SWITCH_TO_PREVIOUS_SPAWNLABLE","clearAll","switchToPreviousSpawnableAnnotation","switchToNextSpawnableAnnotation","isCowImageCurrent","resetCurrentAnnotatableImage","switchToPreviousSelected","spawnDotAnnotation","annotatableBodyPartDisplayParamsData","boundingBoxManager","addDotAnnotation","isArray","Spatial2DBoundingBox","onOnBoundingBoxClicked","onOnCursorEntersBoundingBox","onOnCursorLeavesBoundingBox","onSpawnNewDotAnnotation","overlayableImagesCarouselRef","getOverlaySlotName","carouselShortcuts","onImageSelectedAfter","AppPage","OverlayableImagesCarousel","onOnImageSelectedAfter","_createSlots","fn","BoundingBoxOverlay","delay","time","CsvUtilities","strData","strDelimiter","objPattern","RegExp","arrData","arrMatches","exec","strMatchedDelimiter","strMatchedValue","createBlobFile","mimeType","Blob","Uint8Array","createTextBlobFile","createCsvBlobFile","arrayToCsv","createJsonBlobFile","stringify","createBlobFiles","blobFileCreationArgumentsHolders","blobFileCreationArgumentsHolder","createDownloadableResource","resource","HTMLCanvasElement","toDataURL","overlayCanvasOntoImage","then","fusingCanvas","naturalWidth","naturalHeight","getContext","drawImage","DownloadHelper","download","downloadableResources","nbDownloadedSuccessively","downloadWatcher","a","href","appendChild","removeChild","revokeObjectURL","downloadBlob","blobFile","downloadFile","downloadAsText","downloadAsCsv","downloadAsJson","downloadCanvasAsImage","downloadCanvasOverlaidOntoImage","resultCanvas","downloadDomElementAsImage","downloadOverlaidImage","zipAndDownloadBlobs","blobFiles","folderName","zip","JSZip","folder","generateAsync","zipAndDownloadResources","resources","zipName","fetch","r","zipAndDownload","AnnotatableImagesDownloadHelper","downloadAllAnnotatedImagesData","Date","toISOString","annotatedCowImagesData","annotated","annotatedImages","prepareAnnotatedImages","downloadResources","mainDownloadableResources","getAnnotatableImageDataBlobs","annotatedImage","mainDownloadableResource","jsonFilename","annotatableImagesData","imagesInstanceIds","instanceIdedBlobFiles","reduce","previousPromise","carouselImage","dataset","container","prototype","call","getElementsByClassName","cowImagesAnnotationPageRef","isImagesEmpty","bottomDownloadButtons","onBottomDownload","buttonId","onDownloadJsonData","PageFooter","EXTRA_WIDE","AppLayout","CowImagesAnnotationLeftMenu","CowImagesAnnotationPage","CowImagesAnnotationFooter","routes","path","component","CowImagesAnnotationView","router","createRouter","history","createWebHistory","_component_router_view","app","createApp","App","use","Vue3ColorPicker","Vue3DraggableResizable","mount","AnnotatableBodyPartDisplayParamsStore_1","byBodyPart","bodyPart","setIsSelected","setIsSelectedBasedOnValue","selectedIndex","trySwitch","testedEntryIndex","triedTimes","nextOneIndex","AnnotatableImagesStore_1","isCurrent","removeDotAnnotationOfTypeFromCurrentBoundingBox","boundingBoxByInstanceId","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","exports","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","m","deferred","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","every","__esModule","d","definition","enumerable","get","g","globalThis","Function","obj","prop","hasOwnProperty","Symbol","toStringTag","nmd","paths","p","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}