{"version":3,"file":"js/app.33354a7a.js","mappings":"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","sources":["webpack://segmentation-annotation-tool/./src/lib/store/holder/abstract/AbstractStore.ts","webpack://segmentation-annotation-tool/./src/lib/store/holder/file/CsvStore.ts","webpack://segmentation-annotation-tool/./src/lib/store/holder/file/FilesStore.ts","webpack://segmentation-annotation-tool/./src/lib/store/holder/media/ImagesStore.ts","webpack://segmentation-annotation-tool/./src/lib/store/holder/media/MediasStore.ts","webpack://segmentation-annotation-tool/./src/lib/store/holder/media/VideosStore.ts","webpack://segmentation-annotation-tool/./src/lib/store/holder/popup/PopUpsStore.ts","webpack://segmentation-annotation-tool/./src/lib/store/index.ts","webpack://segmentation-annotation-tool/./src/lib/common/utilities/StringUtilities.ts","webpack://segmentation-annotation-tool/./src/lib/store/validator/center/abstract/enum/ON_INVALID_DO.ts","webpack://segmentation-annotation-tool/./src/lib/common/decorators/final.ts","webpack://segmentation-annotation-tool/./src/lib/store/validator/validator/abstract/AbstractValidator.ts","webpack://segmentation-annotation-tool/./src/lib/store/validator/validator/common/IsNotNullLikeValidator.ts","webpack://segmentation-annotation-tool/./src/lib/store/validator/center/abstract/AbstractValidatorCenter.ts","webpack://segmentation-annotation-tool/./src/lib/store/validator/center/base/BaseValidatorCenter.ts","webpack://segmentation-annotation-tool/./src/lib/store/manager/abstract/AbstractSubStoreManager.ts","webpack://segmentation-annotation-tool/./src/lib/store/manager/abstract/AbstractStoreManager.ts","webpack://segmentation-annotation-tool/./src/lib/store/manager/popup/PopUpsStoreManager.ts","webpack://segmentation-annotation-tool/./src/lib/components/layout/menu/MenuHeader.vue?77ef","webpack://segmentation-annotation-tool/./src/lib/components/layout/menu/MenuHeader.vue","webpack://segmentation-annotation-tool/./src/lib/components/flexible/ScrollableElement.vue?a1a5","webpack://segmentation-annotation-tool/./src/lib/components/flexible/ScrollableElement.vue","webpack://segmentation-annotation-tool/./src/lib/components/layout/menu/MenuFooter.vue?6d43","webpack://segmentation-annotation-tool/./src/lib/components/layout/menu/MenuFooter.vue?6e3b","webpack://segmentation-annotation-tool/./src/lib/components/layout/menu/MenuFooter.vue","webpack://segmentation-annotation-tool/./src/lib/components/layout/menu/MenuLayout.vue?3dae","webpack://segmentation-annotation-tool/./src/lib/components/layout/menu/MenuLayout.vue","webpack://segmentation-annotation-tool/./src/layouts/LeftMenu.vue?f59b","webpack://segmentation-annotation-tool/./src/layouts/LeftMenu.vue","webpack://segmentation-annotation-tool/./src/data/popup/UserManualData.ts","webpack://segmentation-annotation-tool/./src/lib/components/layout/page/PageHeader.vue?2b49","webpack://segmentation-annotation-tool/./src/lib/components/layout/page/PageHeader.vue","webpack://segmentation-annotation-tool/./src/lib/components/popup/PopUp.vue?9ac7","webpack://segmentation-annotation-tool/./src/lib/components/popup/PopUp.vue","webpack://segmentation-annotation-tool/./src/lib/components/popup/UserManual.vue?8fd1","webpack://segmentation-annotation-tool/./src/lib/components/popup/UserManual.vue","webpack://segmentation-annotation-tool/./src/lib/components/layout/BaseLayout.vue","webpack://segmentation-annotation-tool/./src/lib/components/layout/BaseLayout.vue?3406","webpack://segmentation-annotation-tool/./src/layouts/AppLayout.vue?b3be","webpack://segmentation-annotation-tool/./src/layouts/AppLayout.vue","webpack://segmentation-annotation-tool/./src/lib/common/helpers/FileHelper.ts","webpack://segmentation-annotation-tool/./src/lib/store/manager/media/MediasStoreManager.ts","webpack://segmentation-annotation-tool/./src/store/Spatial2DAnnotation/validator/center/SegmentedImageValidatorCenter.ts","webpack://segmentation-annotation-tool/./src/store/Spatial2DAnnotation/validator/center/SegmentedTargetValidatorCenter.ts","webpack://segmentation-annotation-tool/./src/lib/store/validator/validator/common/IsNumberBetweenValidator.ts","webpack://segmentation-annotation-tool/./src/store/Spatial2DAnnotation/validator/center/SegmentValidatorCenter.ts","webpack://segmentation-annotation-tool/./src/store/Spatial2DAnnotation/manager/subManager/SegmentManager.ts","webpack://segmentation-annotation-tool/./src/lib/common/utilities/ArrayUtilities.ts","webpack://segmentation-annotation-tool/./src/store/Spatial2DAnnotation/manager/subManager/SegmentedTargetManager.ts","webpack://segmentation-annotation-tool/./src/data/annotation/DefaultSegmentationsParams.ts","webpack://segmentation-annotation-tool/./src/store/Spatial2DAnnotation/manager/SegmentationTargetTypeParamsStoreManager.ts","webpack://segmentation-annotation-tool/./src/store/Spatial2DAnnotation/manager/SegmentedImagesStoreManager.ts","webpack://segmentation-annotation-tool/./src/lib/components/form/file/FileSelector.vue?40a9","webpack://segmentation-annotation-tool/./src/lib/components/form/file/FileSelector.vue","webpack://segmentation-annotation-tool/./src/lib/components/form/file/auto-storing/AutoStoringFileSelector.vue?5583","webpack://segmentation-annotation-tool/./src/lib/components/form/file/auto-storing/AutoStoringFileSelector.vue","webpack://segmentation-annotation-tool/./src/lib/store/manager/media/ImagesStoreManager.ts","webpack://segmentation-annotation-tool/./src/lib/components/form/file/auto-storing/ImageSelector.vue?96a6","webpack://segmentation-annotation-tool/./src/lib/components/form/file/auto-storing/ImageSelector.vue","webpack://segmentation-annotation-tool/./src/lib/components/layout/menu/SubMenu.vue?a67b","webpack://segmentation-annotation-tool/./src/lib/components/layout/menu/SubMenu.vue","webpack://segmentation-annotation-tool/./src/lib/store/manager/file/FilesStoreManager.ts","webpack://segmentation-annotation-tool/./src/lib/components/form/file/auto-storing/JsonSelector.vue?02d7","webpack://segmentation-annotation-tool/./src/lib/components/form/file/auto-storing/JsonSelector.vue","webpack://segmentation-annotation-tool/./src/lib/components/form/selection/SelectionGroup.vue?eeff","webpack://segmentation-annotation-tool/./src/lib/components/form/selection/SelectionGroup.vue","webpack://segmentation-annotation-tool/./src/lib/components/form/selection/color/DefaultSuggestedColors.ts","webpack://segmentation-annotation-tool/./src/lib/components/form/color/AutoColorPicker.vue?2782","webpack://segmentation-annotation-tool/./src/lib/components/form/color/AutoColorPicker.vue","webpack://segmentation-annotation-tool/./src/lib/components/form/selection/ColoredSelectionGroup.vue?4683","webpack://segmentation-annotation-tool/./src/lib/components/form/selection/ColoredSelectionGroup.vue","webpack://segmentation-annotation-tool/./src/lib/components/UI/enum/ButtonMargin.ts","webpack://segmentation-annotation-tool/./src/lib/components/UI/ButtonGroup.vue?bf44","webpack://segmentation-annotation-tool/./src/lib/components/UI/ButtonGroup.vue","webpack://segmentation-annotation-tool/./src/views/Segmentation2D/Segmentation2DLeftMenu.vue?9926","webpack://segmentation-annotation-tool/./src/views/Segmentation2D/Segmentation2DLeftMenu.vue","webpack://segmentation-annotation-tool/./src/lib/components/flexible/enum/AspectRatio.ts","webpack://segmentation-annotation-tool/./src/lib/components/layout/page/enum/PageContentLayoutSpaceTaken.ts","webpack://segmentation-annotation-tool/./src/lib/components/frame/carousel/enum/CarouselShortcutType.ts","webpack://segmentation-annotation-tool/./src/lib/components/frame/overlay/FrameOverlay.vue?4947","webpack://segmentation-annotation-tool/./src/lib/components/frame/overlay/FrameOverlay.vue","webpack://segmentation-annotation-tool/./src/lib/common/utilities/DomUtilities.ts","webpack://segmentation-annotation-tool/./src/lib/components/frame/image/OverlayableImage.vue?709a","webpack://segmentation-annotation-tool/./src/lib/components/frame/image/OverlayableImage.vue","webpack://segmentation-annotation-tool/./src/lib/common/helpers/ShortcutsManager.ts","webpack://segmentation-annotation-tool/./src/lib/components/frame/carousel/CarouselControlsBar.vue?f67b","webpack://segmentation-annotation-tool/./src/lib/components/frame/carousel/CarouselControlsBar.vue","webpack://segmentation-annotation-tool/./src/lib/components/frame/carousel/image/OverlayableImagesCarousel.vue?b05f","webpack://segmentation-annotation-tool/./src/lib/components/frame/carousel/image/OverlayableImagesCarousel.vue","webpack://segmentation-annotation-tool/./src/lib/components/flexible/AspectRatioedElement.vue?5513","webpack://segmentation-annotation-tool/./src/lib/components/flexible/AspectRatioedElement.vue","webpack://segmentation-annotation-tool/./src/lib/components/layout/page/enum/PageContentLayoutPositioning.ts","webpack://segmentation-annotation-tool/./src/lib/components/layout/page/enum/PageContentLayoutSpaceTakenPaddings.ts","webpack://segmentation-annotation-tool/./src/lib/components/layout/page/PageContent.vue?db29","webpack://segmentation-annotation-tool/./src/lib/components/layout/page/PageContent.vue","webpack://segmentation-annotation-tool/./src/layouts/AppPage.vue?f6f4","webpack://segmentation-annotation-tool/./src/layouts/AppPage.vue","webpack://segmentation-annotation-tool/./src/components/frame/image/annotation/ConnectionLine.vue?1b1e","webpack://segmentation-annotation-tool/./src/components/frame/image/annotation/ConnectionLine.vue","webpack://segmentation-annotation-tool/./src/lib/common/helpers/CursorHelper.ts","webpack://segmentation-annotation-tool/./src/components/frame/image/annotation/DotAnnotation.vue?20ec","webpack://segmentation-annotation-tool/./src/components/frame/image/annotation/DotAnnotation.vue","webpack://segmentation-annotation-tool/./src/components/frame/image/annotation/DotAnnotations.vue?63ff","webpack://segmentation-annotation-tool/./src/components/frame/image/annotation/DotAnnotations.vue","webpack://segmentation-annotation-tool/./src/components/frame/image/annotation/enum/SegmentationShortcutType.ts","webpack://segmentation-annotation-tool/./src/components/frame/image/annotation/SegmentationOverlay.vue?ee75","webpack://segmentation-annotation-tool/./src/components/frame/image/annotation/SegmentationOverlay.vue","webpack://segmentation-annotation-tool/./src/views/Segmentation2D/Segmentation2DPage.vue?7f3f","webpack://segmentation-annotation-tool/./src/views/Segmentation2D/Segmentation2DPage.vue","webpack://segmentation-annotation-tool/./src/lib/components/layout/page/PageFooter.vue","webpack://segmentation-annotation-tool/./src/lib/components/layout/page/PageFooter.vue?db65","webpack://segmentation-annotation-tool/./src/lib/common/utilities/FlowUtilities.ts","webpack://segmentation-annotation-tool/./src/lib/common/utilities/CsvUtilities.ts","webpack://segmentation-annotation-tool/./src/lib/common/helpers/type/BlobFile.ts","webpack://segmentation-annotation-tool/./src/lib/common/helpers/type/DownloadableResource.ts","webpack://segmentation-annotation-tool/./src/lib/common/utilities/ImageUtilities.ts","webpack://segmentation-annotation-tool/./src/lib/common/helpers/DownloadHelper.ts","webpack://segmentation-annotation-tool/./src/lib/common/helpers/AbstractCocoDatasetHelper.ts","webpack://segmentation-annotation-tool/./src/helpers/CocoDatasetHelper.ts","webpack://segmentation-annotation-tool/./src/helpers/AnnotatableImagesDownloadHelper.ts","webpack://segmentation-annotation-tool/./src/views/Segmentation2D/Segmentation2DFooter.vue?c245","webpack://segmentation-annotation-tool/./src/views/Segmentation2D/Segmentation2DFooter.vue","webpack://segmentation-annotation-tool/./src/views/Segmentation2D/Segmentation2DView.vue?f39f","webpack://segmentation-annotation-tool/./src/views/Segmentation2D/Segmentation2DView.vue","webpack://segmentation-annotation-tool/./src/router/index.ts","webpack://segmentation-annotation-tool/./src/App.vue","webpack://segmentation-annotation-tool/./src/App.vue?7ccd","webpack://segmentation-annotation-tool/./src/main.ts","webpack://segmentation-annotation-tool/./src/store/Spatial2DAnnotation/holder/SegmentationTargetTypeParamsStore.ts","webpack://segmentation-annotation-tool/./src/store/Spatial2DAnnotation/holder/SegmentedImagesStore.ts","webpack://segmentation-annotation-tool/./src/lib/store/holder/ sync ^((","webpack://segmentation-annotation-tool/./src/store/ sync ^((","webpack://segmentation-annotation-tool/webpack/bootstrap","webpack://segmentation-annotation-tool/webpack/runtime/chunk loaded","webpack://segmentation-annotation-tool/webpack/runtime/compat get default export","webpack://segmentation-annotation-tool/webpack/runtime/define property getters","webpack://segmentation-annotation-tool/webpack/runtime/global","webpack://segmentation-annotation-tool/webpack/runtime/hasOwnProperty shorthand","webpack://segmentation-annotation-tool/webpack/runtime/make namespace object","webpack://segmentation-annotation-tool/webpack/runtime/node module decorator","webpack://segmentation-annotation-tool/webpack/runtime/publicPath","webpack://segmentation-annotation-tool/webpack/runtime/jsonp chunk loading","webpack://segmentation-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 changeFilenameExtension = (filename: string, newExtension: string) =>\n{\n const splitName = filename.split(\".\");\n\n splitName[splitName.length - 1] = newExtension;\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}\n\nexport const hexToRgb = (hex: string) =>\n{\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null;\n}\n\nexport const rgbToHex = (r: number, g: number, b: number) => {\n function componentToHex(c: number) {\n const hex = c.toString(16);\n return hex.length == 1 ? \"0\" + hex : hex;\n }\n\n return \"#\" + componentToHex(r) + componentToHex(g) + componentToHex(b);\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: 'Segmentation 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=77f47741&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-77f47741\"]])\n\nexport default __exports__","export default class UserManualData\n{\n public static messages = [\n {\n title: 'Concept (1)',\n content: 'First, load images of what you want to segment. Then, add a target type (cat, human, etc). Then, with your mouse, click to add a dot, then click again to connect it to another one. Continue until you have covered your target. You can complete a target\\'s segmentation by clicking on its first dot. Finally, download your segmentations using the \"Download JSON\" button on the bottom of the screen. You can also load your segmentations on unannotated images.',\n },\n {\n title: 'Concept (2)',\n content: 'You can adjust your target\\'s segmentation by removing and adding segment dots, and by selecting between which segment dots you want to spawn a new one. However, you cannot drag and move segment dots.',\n },\n {\n title: 'Export',\n content: 'Annotations are exported in the CocoDataset format along with the original image, the image with the annotations visible as well as a mask image. The mask image contains the segmentations drawn using the color of their target type with the difference that each subsequent segmentation target of a same type on the same image will have its mask drawn with a slightly different color to allow for differentiation programmatically : (previous target of its type\\'s color\\'s r+0, g+0 and b+1).',\n },\n {\n title: 'Adding a target type',\n content: 'Fill the New target name field and click on the「Add」button',\n },\n {\n title: 'Selecting a target type',\n content: 'Click on the target type on the left menu. Be careful, if no target type is selected, you won\\'t be able to annotate.',\n },\n {\n title: 'Adding a segment dot',\n content: 'Left Click inside the image to add a segment dot. If you click on the first segment dot of this target, you will complete it, unselecting it automatically.',\n },\n {\n title: 'Removing a segment dot',\n content: 'Press Shift + Left Click on the segment dot you wish to remove.',\n },\n {\n title: 'Switching to the previous possible connections for the next spawnable segment dot',\n content: 'Scroll Up.',\n },\n {\n title: 'Switching to the previous possible connections for the next spawnable segment dot',\n content: 'Scroll Down.',\n },\n {\n title: 'Switching to the previous target',\n content: 'Shift + Scroll Up.',\n },\n {\n title: 'Switching to the next target',\n content: 'Shift + Scroll Down.',\n },\n {\n title: 'Copy previous image\\'s annotations',\n content: 'Press the Copy previous image\\'s annotations button. This will erase all of the current image\\'s annotations and will position the previous image\\'s by respecting the same image\\'s size ratio.',\n },\n {\n title: 'Remove all current target\\'s segment dots',\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-60b0e151\"),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=60b0e151&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-60b0e151\"]])\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__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } 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\";\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(), _createBlock(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}\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=519481e8&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-519481e8\"]])\n\nexport default __exports__","/**\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 {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 {AbstractValidatorCenter} from \"@/lib/store/validator/center/abstract/AbstractValidatorCenter\";\nimport EncapsulatedValidator from \"@/lib/store/validator/center/abstract/type/EncapsulatedValidator\";\nimport {SSegmentedImage} from \"@/store/Spatial2DAnnotation/model/SSegmentedImage\";\n\nexport class SegmentedImageValidatorCenter extends AbstractValidatorCenter\n{\n protected encapsulatedValidators: EncapsulatedValidator[] = [\n\n ];\n}","import {AbstractValidatorCenter} from \"@/lib/store/validator/center/abstract/AbstractValidatorCenter\";\nimport {ON_INVALID_DO} from \"@/lib/store/validator/center/abstract/enum/ON_INVALID_DO\";\nimport EncapsulatedValidator from \"@/lib/store/validator/center/abstract/type/EncapsulatedValidator\";\nimport {IsNotNullLikeValidator} from \"@/lib/store/validator/validator/common/IsNotNullLikeValidator\";\nimport {SSegmentedTarget} from \"@/store/Spatial2DAnnotation/model/SSegmentedTarget\";\n\n\nexport class SegmentedTargetValidatorCenter extends AbstractValidatorCenter\n{\n protected encapsulatedValidators: EncapsulatedValidator[] = [\n {\n validator: new IsNotNullLikeValidator({onInvalidDo: ON_INVALID_DO.THROW}),\n getter: (entity: D) => entity.type\n },\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 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 {S2DSegment} from \"@/store/Spatial2DAnnotation/model/S2DSegment\";\n\nexport class SegmentValidatorCenter extends AbstractValidatorCenter\n{\n protected encapsulatedValidators: EncapsulatedValidator[] = [\n {\n validator: new IsNumberBetweenValidator({onInvalidDo: ON_INVALID_DO.THROW, min: 0, max: 100}),\n getter: (entity: S2DSegment) => entity.top\n },\n {\n validator: new IsNumberBetweenValidator({onInvalidDo: ON_INVALID_DO.THROW, min: 0, max: 100}),\n getter: (entity: S2DSegment) => entity.left\n },\n ];\n}","\nimport {\n SegmentValidatorCenter\n} from \"@/store/Spatial2DAnnotation/validator/center/SegmentValidatorCenter\";\nimport {AbstractSubStoreManager} from \"@/lib/store/manager/abstract/AbstractSubStoreManager\";\nimport {S2DSegment} from \"@/store/Spatial2DAnnotation/model/S2DSegment\";\n\nexport class SegmentManager extends AbstractSubStoreManager\n{\n protected getValidatorCenterForEntity = (entity: S2DSegment) => {\n return new SegmentValidatorCenter(entity);\n };\n\n protected serve(entity: S2DSegment): S2DSegment {\n throw \"On this project, annotations are inside bounding boxes and therefore, shouldn't be added this way, but only validated.\";\n }\n}","export const insertKey = (key: number, value: any, arr: Array) =>\n{\n const newArray: any[] = [];\n let passedTheThreshold = false;\n\n for (let index = 0; index <= arr.length; index++)\n {\n if (index === key)\n {\n newArray.push(value);\n passedTheThreshold = true;\n }\n else if (passedTheThreshold)\n newArray.push(arr[index - 1])\n else\n newArray.push(arr[index])\n }\n \n return newArray;\n}\n","import {toRaw} from \"vue\";\nimport {generateInstanceId} from \"@/lib/common/utilities/StringUtilities\";\nimport config from \"@/config\";\nimport {\n SegmentedTargetValidatorCenter\n} from \"@/store/Spatial2DAnnotation/validator/center/SegmentedTargetValidatorCenter\";\nimport {\n SegmentedImagesStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/SegmentedImagesStoreManager\";\nimport {\n SegmentManager\n} from \"@/store/Spatial2DAnnotation/manager/subManager/SegmentManager\";\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 {SSegmentedTarget} from \"@/store/Spatial2DAnnotation/model/SSegmentedTarget\";\nimport {S2DSegment} from \"@/store/Spatial2DAnnotation/model/S2DSegment\";\nimport {insertKey} from \"@/lib/common/utilities/ArrayUtilities\";\n\nexport class SegmentedTargetManager extends AbstractSubStoreManager\n{\n protected annotationTypeToValidate: string|undefined;\n protected maxInstanceForType: number|undefined;\n\n constructor(annotationTypeToValidate: string|void)\n {\n super();\n\n if (annotationTypeToValidate)\n {\n this.annotationTypeToValidate = annotationTypeToValidate;\n this.maxInstanceForType = 99999999999999;\n }\n }\n\n public createNew(type: string, colorCode: string): SSegmentedTarget\n {\n return {\n type: type,\n colorCode: colorCode,\n instanceId: generateInstanceId(),\n segments: [],\n }\n }\n\n protected getValidatorCenterForEntity = (entity: SSegmentedTarget): AbstractValidatorCenter => {\n return new SegmentedTargetValidatorCenter(entity);\n };\n\n public tryAddNew(type: string, colorCode: string): SSegmentedTarget\n {\n const result = this.validate(this.createNew(type, colorCode));\n\n if (!result.isValid)\n throw result.errorMessages;\n\n const segmentedTarget = result.transformedEntity as SSegmentedTarget;\n\n SegmentedImagesStoreManager.addTargetForCurrent(segmentedTarget)\n\n return segmentedTarget;\n }\n\n public addSegment = (target: SSegmentedTarget, segment: S2DSegment, segmentKey: number|undefined) => {\n const rawTarget = toRaw(target);\n\n if (typeof segmentKey === \"undefined\")\n rawTarget.segments.push(segment);\n else {\n rawTarget.segments = insertKey(segmentKey + 1, segment, rawTarget.segments)\n }\n\n const result = this.validate(rawTarget);\n\n if (!result.isValid)\n return result.errorMessages;\n\n const ValidatedBoundingBox = result.transformedEntity as SSegmentedTarget;\n\n SegmentedImagesStoreManager.setSegmentsForCurrentTarget(ValidatedBoundingBox.segments);\n\n return ValidatedBoundingBox.segments[ValidatedBoundingBox.segments.length - 1];\n }\n\n public validate(entity: SSegmentedTarget): ValidationResult\n {\n const errors: string[] = [],\n segments: S2DSegment[] = [];\n\n for ( const key in entity.segments )\n {\n const annotation = entity.segments[key],\n manager = new SegmentManager(),\n validationResult = manager.validate(annotation);\n\n if (!validationResult.isValid)\n errors.concat(...validationResult.errorMessages);\n else\n segments.push(validationResult.transformedEntity as S2DSegment);\n }\n\n entity.segments = segments;\n\n return super.validate(entity);\n }\n}","import {SSegmentationTargetTypeParams} from \"@/store/Spatial2DAnnotation/model/SSegmentationTargetTypeParams\";\n\nexport const defaultSegmentationsParams: SSegmentationTargetTypeParams[] = [\n\n];\n\nexport const getDisplayParamsFromType = (type: string) =>\n{\n const displayParams = defaultSegmentationsParams.filter(params => params.value === type);\n\n if (displayParams.length === 0 || displayParams.length >= 2)\n throw \"Can't get display params for type '\" + type + \"' : none or more than one exist with that name\";\n\n return displayParams[0];\n}","import {getModule} from \"vuex-module-decorators\";\nimport store from \"@/lib/store\";\nimport {\n defaultSegmentationsParams\n} from \"@/data/annotation/DefaultSegmentationsParams\";\nimport {AbstractStoreManagerBuilder} from \"@/lib/store/manager/abstract/AbstractStoreManager\";\nimport {SegmentationTargetTypeParamsStore} from \"@/store/Spatial2DAnnotation/holder/SegmentationTargetTypeParamsStore\";\nimport {SSegmentationTargetTypeParams} from \"@/store/Spatial2DAnnotation/model/SSegmentationTargetTypeParams\";\nimport {SSegmentedTarget} from \"@/store/Spatial2DAnnotation/model/SSegmentedTarget\";\n\nexport class SegmentationTargetTypeParamsStoreManagerBuilder extends AbstractStoreManagerBuilder, SSegmentationTargetTypeParams>\n{\n protected _store: SegmentationTargetTypeParamsStore = getModule(SegmentationTargetTypeParamsStore, store);\n\n /**\n * May add the default params (used for menus and dot annotation creation\n */\n constructor()\n {\n super();\n\n this._store.reset();\n\n defaultSegmentationsParams.forEach(defaultSegmentedBodyPartDisplayParams =>\n {\n this.add({\n ...defaultSegmentedBodyPartDisplayParams\n });\n })\n }\n\n public addTypesFromTargets(targets: SSegmentedTarget[])\n {\n const entries = this._store.entries;\n\n targets.map(target => {\n if (entries.filter(entry => entry.value === target.type).length === 0)\n this._store.add({\n instanceId: AbstractStoreManagerBuilder.createInstanceId(),\n value: target.type,\n colorCode: target.colorCode,\n })\n })\n }\n}\n\nexport const SegmentationTargetTypeParamsStoreManager = new SegmentationTargetTypeParamsStoreManagerBuilder();","import {getModule} from \"vuex-module-decorators\";\nimport store from \"@/lib/store\";\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 {SegmentedImagesStore} from \"@/store/Spatial2DAnnotation/holder/SegmentedImagesStore\";\nimport {SSegmentedImage} from \"@/store/Spatial2DAnnotation/model/SSegmentedImage\";\nimport {S2DSegment} from \"@/store/Spatial2DAnnotation/model/S2DSegment\";\nimport {\n SegmentedImageValidatorCenter\n} from \"@/store/Spatial2DAnnotation/validator/center/SegmentedImageValidatorCenter\";\nimport {AbstractValidatorCenter} from \"@/lib/store/validator/center/abstract/AbstractValidatorCenter\";\nimport {\n SegmentedTargetManager\n} from \"@/store/Spatial2DAnnotation/manager/subManager/SegmentedTargetManager\";\nimport {SSegmentedTarget} from \"@/store/Spatial2DAnnotation/model/SSegmentedTarget\";\nimport {\n SegmentationTargetTypeParamsStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/SegmentationTargetTypeParamsStoreManager\";\nimport {CocoDataset} from \"@/lib/common/helpers/AbstractCocoDatasetHelper\";\n\nexport class SegmentedImagesStoreManagerBuilder extends AbstractStoreManagerBuilder, SSegmentedImage>\n{\n protected _store: SegmentedImagesStore = getModule(SegmentedImagesStore, store);\n\n protected getValidatorCenterForEntity = (entity: SSegmentedImage): AbstractValidatorCenter => {\n return new SegmentedImageValidatorCenter(entity);\n };\n\n // ------------------------------\n // Current cat image and its bounding box\n // ------------------------------\n\n public setCurrentSegmentedImage = (currentSegmentedImage: SSegmentedImage) => {\n this._store.setCurrentSegmentedImage(currentSegmentedImage.instanceId);\n }\n public setCurrentSegmentedTarget = (currentSegmentedTarget: SSegmentedTarget) =>\n {\n this._store.setCurrentSegmentedImage(currentSegmentedTarget.instanceId);\n // SegmentedBodyPartDisplayParamsStoreManager.resetBaseOnBoundingBox(currentSegmentedTarget);\n }\n\n public setCurrentSegmentedTargetBasedOnType = (type: string) =>\n {\n this._store.resetIsCurrentTargetForCurrentSegmentedImage();\n this._store.setFirstUncompletedTargetOfTypeIsCurrent(type);\n // SegmentedBodyPartDisplayParamsStoreManager.resetBaseOnBoundingBox(currentSegmentedTarget);\n }\n\n protected getCheckedCurrentSegmentedImage = () => {\n if (typeof this.store.currentSegmentedImage === \"undefined\")\n throw \"this._currentSegmentedImage shouldn't be undefined\"\n\n return this.store.currentSegmentedImage;\n }\n protected getCheckedCurrentSegmentedTarget = () => {\n if (typeof this.store.currentSegmentedTarget === \"undefined\")\n throw \"this._currentSegmentedTarget shouldn't be undefined\"\n\n return this.store.currentSegmentedTarget;\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 targets: [],\n });\n }\n\n public async addFromFile(file: File)\n {\n const json = await FileHelper.readAsText(file);\n const data = JSON.parse(json) as CocoDataset;\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 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: SSegmentedImage = result.transformedEntity as SSegmentedImage;\n\n const targets: SSegmentedTarget[] = [];\n\n data.annotations.map(annotation =>\n {\n if (annotation.segmentation && annotation.segmentation[0])\n {\n const target: SSegmentedTarget = {\n instanceId: AbstractStoreManagerBuilder.createInstanceId(),\n type: annotation.caption,\n colorCode: '#'+(Math.random()*0xFFFFFF<<0).toString(16),\n segments: [],\n isCompleted: true,\n }\n\n const image = data.images[data.images.findIndex(image => image.id === annotation.image_id)]\n\n const pairs = annotation.segmentation[0].reduce((result, value, index, sourceArray) => index % 2 === 0 ? [...result, sourceArray.slice(index, index + 2)] : result, []);\n\n pairs.forEach(segmentationCoordinate =>\n {\n target.segments.push({\n instanceId: AbstractStoreManagerBuilder.createInstanceId(),\n type: annotation.caption,\n colorCode: target.colorCode,\n left: segmentationCoordinate[0] * 100 / image.width,\n top: segmentationCoordinate[1] * 100 / image.height\n })\n })\n\n targets.push(target);\n }\n })\n\n targets.map(target => SegmentedImagesStoreManager.addTarget(finalEntry.instanceId, target))\n\n // also add the segment types to the menu\n SegmentationTargetTypeParamsStoreManager.addTypesFromTargets(targets);\n }\n\n public addTarget(annotatableImageInstanceId: string, target: SSegmentedTarget)\n {\n const entry = this._store.byInstanceId(annotatableImageInstanceId);\n\n if (entry) {\n this.store.addTarget({\n segmentedImage: entry,\n target: target,\n })\n }\n }\n\n public addTargetForCurrent(target: SSegmentedTarget)\n {\n this.store.addTarget({\n target: target,\n segmentedImage: this.getCheckedCurrentSegmentedImage()\n })\n }\n\n public createEmptyTargetForCurrent(type: string, colorCode: string, makeCurrent: boolean)\n {\n if (makeCurrent)\n this.store.resetIsCurrentTargetForCurrentSegmentedImage();\n\n this.store.addTarget({\n target: {\n segments: [],\n instanceId: AbstractStoreManagerBuilder.createInstanceId(),\n type: type,\n colorCode: colorCode,\n isCurrent: makeCurrent,\n },\n segmentedImage: this.getCheckedCurrentSegmentedImage()\n })\n }\n\n public attachEmptyTarget(type: string, colorCode: string)\n {\n const spatial2DBoundingBoxManager = new SegmentedTargetManager();\n\n const result = spatial2DBoundingBoxManager.tryAddNew(type, colorCode);\n\n this.setCurrentSegmentedTarget(result);\n }\n\n // ------------------------------\n // Set\n // ------------------------------\n\n public setCurrentSegmentedImageFromImageData(imageData: SImageData)\n {\n this._store.setCurrentSegmentedImage(this._store.entries.filter(entry => entry.image.instanceId === imageData.instanceId)[0].instanceId);\n }\n\n public setSegmentsForCurrentTarget(segments: S2DSegment[])\n {\n this._store.setSegmentsForCurrentTarget(segments);\n }\n\n public setSegments(segments: S2DSegment[])\n {\n const annotatableImageInstanceId = this.getCheckedCurrentSegmentedImage().instanceId;\n const targetId = this.getCheckedCurrentSegmentedTarget().instanceId;\n\n const annotatableImage = this.getByInstanceId(annotatableImageInstanceId);\n\n const target = annotatableImage.targets.filter(target => target.instanceId === targetId);\n\n if (target.length === 1)\n {\n target[0].segments = segments;\n\n this.setByInstanceId(annotatableImageInstanceId, annotatableImage);\n }\n else\n {\n throw \"Can't add segments to target of instanceId \"+ targetId +\" : bounding box doesn't exist for annotatableImage of instanceId \"+ annotatableImageInstanceId;\n }\n }\n\n // ------------------------------\n // Copy\n // ------------------------------\n\n public copyPreviousImageAnnotations = () =>\n {\n const previousImage = this._store.previousSegmentedImage;\n const currentImage = this._store.currentSegmentedImage;\n\n if (previousImage && currentImage && previousImage.targets.length)\n {\n this._store.removeCurrentImageTargets();\n\n previousImage.targets.map(target =>\n {\n const newTarget: SSegmentedTarget = {\n instanceId: AbstractStoreManagerBuilder.createInstanceId(),\n type: target.type,\n colorCode: target.colorCode,\n isCompleted: target.isCompleted,\n isCurrent: target.isCurrent,\n nextInsertableSegmentIndex: target.nextInsertableSegmentIndex,\n segments: target.segments.map(segment => {\n return {\n instanceId: AbstractStoreManagerBuilder.createInstanceId(),\n type: segment.type,\n isCurrent: segment.isCurrent,\n left: segment.left,\n top: segment.top,\n colorCode: segment.colorCode\n }\n })\n };\n\n this.addTarget(currentImage.instanceId, newTarget);\n })\n }\n else\n {\n alert(\"No previous image with targets to copy\")\n }\n }\n\n // ------------------------------\n // Delete\n // ------------------------------\n\n public removeTarget(target: SSegmentedTarget)\n {\n this._store.resetCurrentSegmentedImage();\n\n this._store.removeTarget(target.instanceId);\n }\n\n public removeSegmentOfInstanceIdFromCurrentTarget(instanceId: string)\n {\n this.store.removeSegmentFromCurrentTarget(instanceId);\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 SSegmentedImage\n }\n\n protected setByInstanceId(instanceId: string, annotatableImage: SSegmentedImage)\n {\n this._store.setByInstanceId({\n entry: annotatableImage,\n instanceId: instanceId\n });\n }\n}\n\nexport const SegmentedImagesStoreManager = new SegmentedImagesStoreManagerBuilder();","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 {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__","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__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, renderSlot as _renderSlot, createCommentVNode as _createCommentVNode, unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, vShow as _vShow, withDirectives as _withDirectives, isRef as _isRef, vModelText as _vModelText, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-27268f3a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"title\", \"onClick\"]\nconst _hoisted_2 = { class: \"selector-left\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"selector-shortcut\"\n}\nconst _hoisted_4 = {\n key: 0,\n class: \"with-ctrl\"\n}\nconst _hoisted_5 = { class: \"selector-right\" }\nconst _hoisted_6 = { class: \"selector-value\" }\nconst _hoisted_7 = [\"onClick\"]\nconst _hoisted_8 = { class: \"add-option\" }\nconst _hoisted_9 = [\"placeholder\"]\nconst _hoisted_10 = [\"disabled\"]\n\nimport {PropType, ref} from \"vue\";\nimport {SelectionGroupOptionData} from \"@/lib/components/form/selection/type/SelectionGroupOptionsData\";\nimport {spaceCamelCase} from \"@/lib/common/utilities/StringUtilities\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'SelectionGroup',\n props: {\n options: {\n type: Array as PropType,\n required: true,\n },\n selectedOptionsIds: {\n type: Array as PropType<(String|Number)[]>,\n required: true,\n },\n canOptionsBeDeleted: {\n type: Boolean,\n default: false,\n },\n canAddNewOptions: {\n type: Boolean,\n default: false,\n },\n addNewOptionPlaceholder: {\n type: String,\n default: \"Option name\",\n },\n optionIdHolder: String // if you don't wanna use the array index key as the option id, define a property here\n},\n emits: ['select', 'deleteOption', 'addOption'],\n setup(__props, { emit }) {\n\nconst props = __props\n\n\n\n\nlet newOption = ref(\"\");\n\n\n\nconst onSelect = (optionId: string|number) =>\n{\n emit(\"select\", optionId);\n}\n\nconst onDeleteOption = (optionId: string|number) =>\n{\n emit(\"deleteOption\", optionId);\n}\n\nconst onAddOption = () =>\n{\n const newOptionCopy = newOption.value;\n\n emit(\"addOption\", newOptionCopy);\n\n newOption.value = \"\";\n}\n\nconst getOptionId = (option: SelectionGroupOptionData, key: number) => {\n return props.optionIdHolder && props.optionIdHolder in option ? option[props.optionIdHolder as keyof typeof option] : key;\n}\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(props.options, (option, id) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"option\",\n key: id\n }, [\n _createElementVNode(\"button\", {\n type: \"button\",\n class: _normalizeClass('selector button-style-bordered ' + (__props.selectedOptionsIds.includes(getOptionId(option, id)) ? ' active' : '')),\n title: option.tooltip ? option.tooltip : '',\n onClick: ($event: any) => (onSelect(getOptionId(option, id)))\n }, [\n _createElementVNode(\"span\", _hoisted_2, [\n _renderSlot(_ctx.$slots, \"selectionBody\", { option: option }),\n (option.shortcut)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, [\n (option.shortcut.requiresCtrl)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \"Ctrl+ \"))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\" \" + _toDisplayString(_unref(spaceCamelCase)(option.shortcut.keyCode)), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"span\", _hoisted_5, [\n _createElementVNode(\"span\", _hoisted_6, _toDisplayString(option.value), 1)\n ])\n ], 10, _hoisted_1),\n _withDirectives(_createElementVNode(\"button\", {\n type: \"button\",\n class: \"deleter\",\n onClick: ($event: any) => (onDeleteOption(getOptionId(option, id)))\n }, \"Del\", 8, _hoisted_7), [\n [_vShow, __props.canOptionsBeDeleted]\n ]),\n _renderSlot(_ctx.$slots, \"additionalOptionActions\", { option: option })\n ]))\n }), 128)),\n _withDirectives(_createElementVNode(\"div\", _hoisted_8, [\n _renderSlot(_ctx.$slots, \"add-selection\"),\n _withDirectives(_createElementVNode(\"input\", {\n type: \"text\",\n class: \"add-option-input\",\n placeholder: __props.addNewOptionPlaceholder,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => (_isRef(newOption) ? (newOption).value = $event : newOption = $event))\n }, null, 8, _hoisted_9), [\n [_vModelText, _unref(newOption)]\n ]),\n _createElementVNode(\"button\", {\n type: \"button\",\n class: \"add-option-submit\",\n disabled: _unref(newOption) === '',\n onClick: onAddOption\n }, \"Add\", 8, _hoisted_10)\n ], 512), [\n [_vShow, __props.canAddNewOptions]\n ])\n ]))\n}\n}\n\n})","import script from \"./SelectionGroup.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SelectionGroup.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./SelectionGroup.vue?vue&type=style&index=0&id=27268f3a&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-27268f3a\"]])\n\nexport default __exports__","export const defaultSuggestedColors = [\n \"#aa47bc\",\n \"#fe5722\",\n \"#007e7a\",\n \"#fcc02e\",\n \"#5eab9d\",\n \"#ff0b70\",\n \"#25cc0e\",\n \"#4362ce\",\n \"#ec2626\",\n \"#aae000\",\n \"#fa6ccf\",\n];","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport {ColorPicker} from \"vue3-colorpicker\";\nimport {onMounted, PropType, ref, watch} from \"vue\";\nimport {defaultSuggestedColors} from \"@/lib/components/form/selection/color/DefaultSuggestedColors\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'AutoColorPicker',\n props: {\n suggestedColors: {\n type: Array as PropType,\n default: defaultSuggestedColors\n },\n switchToNextSuggestedColor: Number,\n inputShape: {\n type: String, // circle or square\n default: \"circle\"\n }\n},\n emits: ['onColorPicked'],\n setup(__props, { emit }) {\n\nconst props = __props\n\n\n\n\n\n\nconst suggestedColorIndex = ref(0),\n pureColor = ref(props.suggestedColors[suggestedColorIndex.value] as string),\n gradientColor = ref(\"linear-gradient(0deg, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 1) 100%)\");\n\nconst onPureColorChange = () =>\n{\n const pickedColor = pureColor.value;\n\n emit(\"onColorPicked\", pickedColor);\n}\n\nwatch(() => props.switchToNextSuggestedColor, () =>\n{\n if (props.switchToNextSuggestedColor) // avoids calling at mounted\n {\n // auto selects the next color to save time\n if (++suggestedColorIndex.value < props.suggestedColors?.length)\n {\n pureColor.value = props.suggestedColors[suggestedColorIndex.value] as string;\n onPureColorChange();\n }\n }\n});\n\nonMounted(() =>\n{\n onPureColorChange();\n})\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(_unref(ColorPicker), {\n pureColor: pureColor.value,\n \"onUpdate:pureColor\": _cache[0] || (_cache[0] = ($event: any) => ((pureColor).value = $event)),\n gradientColor: gradientColor.value,\n \"onUpdate:gradientColor\": _cache[1] || (_cache[1] = ($event: any) => ((gradientColor).value = $event)),\n onPureColorChange: onPureColorChange,\n shape: __props.inputShape\n }, null, 8, [\"pureColor\", \"gradientColor\", \"shape\"]))\n}\n}\n\n})","import script from \"./AutoColorPicker.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AutoColorPicker.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, createVNode as _createVNode, renderSlot as _renderSlot, withCtx as _withCtx, renderList as _renderList, createSlots as _createSlots, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport {PropType, ref} from \"vue\";\nimport {ColoredSelectionGroupOptionData} from \"@/lib/components/form/selection/type/ColoredSelectionGroupOptionsData\";\nimport SelectionGroup from \"@/lib/components/form/selection/SelectionGroup.vue\";\nimport AutoColorPicker from \"@/lib/components/form/color/AutoColorPicker.vue\";\nimport {defaultSuggestedColors} from \"@/lib/components/form/selection/color/DefaultSuggestedColors\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'ColoredSelectionGroup',\n props: {\n suggestedColors: {\n type: Array as PropType,\n default: defaultSuggestedColors\n },\n options: {\n type: Array as PropType,\n required: true,\n },\n selectedOptionsIds: {\n type: Array as PropType<(String|Number)[]>,\n required: true,\n },\n canOptionsBeDeleted: {\n type: Boolean,\n default: false,\n },\n canAddNewOptions: {\n type: Boolean,\n default: false,\n },\n addNewOptionPlaceholder: {\n type: String,\n default: \"Option name\",\n },\n optionIdHolder: String\n},\n emits: ['addColoredOption'],\n setup(__props, { emit }) {\n\nconst props = __props\n\n\n\n\nconst getSelectionBodySlotName = (optionId: string) => {\n return \"selection-body-\" + optionId;\n}\n\nconst currentPickedColor = ref(),\n switchToNextSuggestedColor = ref(0);\n\nconst onColorPicked = (color: string) => {\n currentPickedColor.value = color;\n}\n\n\n\nconst onAddOption = (newOptionValue: string) =>\n{\n emit(\"addColoredOption\", {\n value: newOptionValue,\n colorCode: currentPickedColor.value\n });\n\n switchToNextSuggestedColor.value++; // switches to the next suggested color to save time\n}\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(SelectionGroup, {\n options: __props.options,\n \"selected-options-ids\": __props.selectedOptionsIds,\n \"add-new-option-placeholder\": __props.addNewOptionPlaceholder,\n \"can-add-new-options\": __props.canAddNewOptions,\n \"can-options-be-deleted\": __props.canOptionsBeDeleted,\n \"option-id-holder\": __props.optionIdHolder,\n onAddOption: onAddOption\n }, _createSlots({\n selectionBody: _withCtx(({ option }: {option: ColoredSelectionGroupOptionData}) => [\n _createElementVNode(\"div\", {\n class: \"option-color\",\n style: _normalizeStyle('background-color:' + option.colorCode + ';')\n }, null, 4)\n ]),\n \"add-selection\": _withCtx(() => [\n _createVNode(AutoColorPicker, {\n suggestedColors: __props.suggestedColors,\n switchToNextSuggestedColor: switchToNextSuggestedColor.value,\n onOnColorPicked: onColorPicked\n }, null, 8, [\"suggestedColors\", \"switchToNextSuggestedColor\"])\n ]),\n additionalOptionActions: _withCtx(({ option }: {option: ColoredSelectionGroupOptionData}) => [\n _renderSlot(_ctx.$slots, \"additionalOptionActions\", { option: option })\n ]),\n _: 2\n }, [\n _renderList(props.options, (option, id) => {\n return {\n name: getSelectionBodySlotName(id),\n fn: _withCtx(() => [])\n }\n })\n ]), 1032, [\"options\", \"selected-options-ids\", \"add-new-option-placeholder\", \"can-add-new-options\", \"can-options-be-deleted\", \"option-id-holder\"]))\n}\n}\n\n})","import script from \"./ColoredSelectionGroup.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ColoredSelectionGroup.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./ColoredSelectionGroup.vue?vue&type=style&index=0&id=948678dc&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-948678dc\"]])\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 { 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)\nconst _hoisted_2 = /*#__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 {computed, PropType} from \"vue\";\nimport JsonSelector from \"@/lib/components/form/file/auto-storing/JsonSelector.vue\";\nimport {SSegmentedImage} from \"@/store/Spatial2DAnnotation/model/SSegmentedImage\";\nimport {\n SegmentedImagesStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/SegmentedImagesStoreManager\";\nimport ColoredSelectionGroup from \"@/lib/components/form/selection/ColoredSelectionGroup.vue\";\nimport {\n SegmentationTargetTypeParamsStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/SegmentationTargetTypeParamsStoreManager\";\nimport {AbstractSubStoreManager} from \"@/lib/store/manager/abstract/AbstractSubStoreManager\";\nimport ButtonGroup from \"@/lib/components/UI/ButtonGroup.vue\";\nimport {ButtonData} from \"@/lib/components/UI/type/ButtonData\";\n\n// ------------------------------\n// Base\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'Segmentation2DLeftMenu',\n props: {\n segmentedImages: Array as PropType,\n},\n setup(__props) {\n\n\n\n\n// ------------------------------\n// Annotations menu\n// ------------------------------\n\nconst selectedOptionsIds = computed(() => {\n return SegmentationTargetTypeParamsStoreManager.store.selected;\n})\n\nconst coloredSelectionGroupOptions = computed(() => {\n return SegmentationTargetTypeParamsStoreManager.store.entries;\n})\n\nlet hasNotPreviousSegmentedImage = computed(() => {\n return !SegmentedImagesStoreManager.store.hasPreviousSegmentedImageTargets;\n})\n\nconst onGroupSelectSelection = (instanceId: string) =>\n{\n SegmentationTargetTypeParamsStoreManager.store.setIsSelected({instanceId: instanceId, isSelected: true});\n}\n\nconst onGroupSelectAddition = ({value, colorCode}: {value: string, colorCode: string}) =>\n{\n SegmentationTargetTypeParamsStoreManager.add({\n instanceId: AbstractSubStoreManager.createInstanceId(),\n isSelected: false,\n value: value,\n colorCode: colorCode,\n });\n}\n\nconst annotationToolsButtons: ButtonData[] = [\n {\n id: 'copy-previous-annotations',\n text: 'Copy previous image\\'s annotations',\n isDisabled: hasNotPreviousSegmentedImage\n }\n];\n\nconst copyPreviousAnnotations = () =>\n{\n SegmentedImagesStoreManager.copyPreviousImageAnnotations();\n}\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createVNode(SubMenu, {\n title: \"Load\",\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(SegmentedImagesStoreManager),\n manager_mutator: \"addEmpty\"\n }, null, 8, [\"icon\", \"manager_class\"]),\n _hoisted_1,\n _withDirectives(_createVNode(JsonSelector, {\n text: \"Load segmentation data\",\n icon: require('@/assets/img/icons/segmentation.svg'),\n is_multiple: true,\n manager_class: _unref(SegmentedImagesStoreManager),\n manager_mutator: \"addFromFile\",\n empty_store_before_load: false\n }, null, 8, [\"icon\", \"manager_class\"]), [\n [_vShow, __props.segmentedImages && __props.segmentedImages.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(ColoredSelectionGroup, {\n options: _unref(coloredSelectionGroupOptions),\n selectedOptionsIds: _unref(selectedOptionsIds).map(entry => entry.instanceId),\n \"can-options-be-deleted\": false,\n \"can-add-new-options\": true,\n \"add-new-option-placeholder\": \"New target name\",\n optionIdHolder: \"instanceId\",\n onSelect: onGroupSelectSelection,\n onAddColoredOption: onGroupSelectAddition\n }, null, 8, [\"options\", \"selectedOptionsIds\"]),\n _hoisted_2,\n _createVNode(ButtonGroup, {\n buttons: annotationToolsButtons,\n onClick: copyPreviousAnnotations\n })\n ]),\n _: 1\n }, 8, [\"icon\"]), [\n [_vShow, __props.segmentedImages && __props.segmentedImages.length && _unref(SegmentedImagesStoreManager).store.currentSegmentedImage]\n ])\n ], 64))\n}\n}\n\n})","import script from \"./Segmentation2DLeftMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Segmentation2DLeftMenu.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-187ed20e\"),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 const box = HTMLImage.value.getBoundingClientRect();\n\n overriddenOverlayWidth.value = box.width;\n overriddenOverlayHeight.value = box.height;\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=187ed20e&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-187ed20e\"]])\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 { defineComponent as _defineComponent } from 'vue'\nimport { openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nimport {onMounted, onUnmounted, ref, watch} from \"vue\";\nimport {AbstractStoreManagerBuilder} from \"@/lib/store/manager/abstract/AbstractStoreManager\";\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();\nlet mutationObserver: MutationObserver|undefined;\n\nonMounted(() =>\n{\n init();\n\n tryDraw();\n\n watch(() => props.forceRedraw, () => {\n init();\n tryDraw();\n })\n})\n\nonUnmounted(() => {\n disconnectMutationObserver();\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 (!mutationObserver)\n {\n mutationObserver = new MutationObserver(function() {\n tryDraw();\n });\n\n mutationObserver.observe(from.value, { attributes : true, attributeFilter : ['style'] });\n mutationObserver.observe(to.value, { attributes : true, attributeFilter : ['style'] });\n }\n }\n else\n {\n doElementsExist = false;\n\n lineSvg.value.innerHTML = \"\";\n isLineReset = true;\n\n disconnectMutationObserver();\n }\n\n}\n\nconst disconnectMutationObserver = () =>\n{\n if (mutationObserver)\n {\n mutationObserver.disconnect();\n mutationObserver = undefined;\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=3579bb23&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3579bb23\"]])\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 { normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-628eac5e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"id\"]\nconst _hoisted_2 = {\n key: 0,\n class: \"type-container\"\n}\nconst _hoisted_3 = { class: \"type\" }\n\nimport {onMounted, onUnmounted, PropType, Ref, ref} from \"vue\";\nimport {CursorHelper} from \"@/lib/common/helpers/CursorHelper\";\nimport {SSegmentedTarget} from \"@/store/Spatial2DAnnotation/model/SSegmentedTarget\";\nimport {S2DSegment} from \"@/store/Spatial2DAnnotation/model/S2DSegment\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'DotAnnotation',\n props: {\n dotAnnotation: {\n type: Object as PropType,\n required: true,\n },\n parentTarget: {\n type: Object as PropType,\n required: true,\n },\n parentOverlayRef: {\n type: Object as PropType>,\n required: true,\n },\n isFirst: Boolean\n},\n emits: [\"onTrueMouseover\", \"onTrueMouseleave\"],\n setup(__props, { expose, emit: emits }) {\n\nconst props = __props\n\n_useCssVars(_ctx => ({\n \"597a7696\": (adjustedTop),\n \"545eda34\": (adjustedLeft),\n \"3998083f\": (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\nconst isTrueMouseHovering = ref(false);\n\n\n\nonMounted(() =>\n{\n cursorHelperEventInstanceId = CursorHelper.watchTrueMouseHover(\n dotAnnotationRef.value,\n () => {\n isTrueMouseHovering.value = true;\n emits(\"onTrueMouseover\", props.dotAnnotation)\n }, () => {\n isTrueMouseHovering.value = false;\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\", {\n class: _normalizeClass('dot-annotation-container ' + (__props.isFirst ? 'first-annotation' : '') + ' ' + (__props.parentTarget.isCurrent ? 'current' : '') + ' ' + (__props.parentTarget.isCompleted ? 'completed' : ''))\n }, [\n _createElementVNode(\"div\", {\n id: 'dot-annotation-' + __props.dotAnnotation.instanceId + '-' + __props.dotAnnotation.type,\n class: _normalizeClass('dot-annotation ' + (isTrueMouseHovering.value ? 'hovered' : '')),\n ref_key: \"dotAnnotationRef\",\n ref: dotAnnotationRef\n }, null, 10, _hoisted_1),\n false\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(__props.dotAnnotation.type), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ], 2))\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=628eac5e&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-628eac5e\"]])\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, vShow as _vShow, createBlock as _createBlock, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2880a924\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n class: \"annotations\",\n ref: \"annotationsDiv\"\n}\nconst _hoisted_2 = { class: \"connection-lines\" }\nconst _hoisted_3 = { class: \"connecting-lines-group\" }\n\nimport {PropType, Ref} from \"vue\";\nimport DotAnnotation from \"@/components/frame/image/annotation/DotAnnotation.vue\";\nimport ConnectionLine from \"@/components/frame/image/annotation/ConnectionLine.vue\";\nimport {SSegmentedTarget} from \"@/store/Spatial2DAnnotation/model/SSegmentedTarget\";\nimport {S2DSegment} from \"@/store/Spatial2DAnnotation/model/S2DSegment\";\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 parentTarget: {\n type: Object as PropType,\n required: true,\n },\n parentOverlayRef: {\n type: Object as PropType>,\n required: true,\n },\n forceConnectingLineRedraw: Number,\n undisplayConnectingLinesOfDotAnnotationsIndex: Number,\n},\n emits: [\"onHoveredAnnotations\"],\n setup(__props, { emit: emits }) {\n\nconst props = __props\n\n\n\n\n\n\n// ------------------------------\n// Annotations hover handling\n// ------------------------------\n\nconst hoveredAnnotations: S2DSegment[] = [];\n\nconst onDotAnnotationMouseOver = (annotation: S2DSegment) => {\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: S2DSegment) =>\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\nconst isConnectingLineDisplayed = (index: number): boolean =>\n{\n return (typeof props.undisplayConnectingLinesOfDotAnnotationsIndex === 'undefined' || (index - 1) !== props.undisplayConnectingLinesOfDotAnnotationsIndex)\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, index) => {\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-target\": __props.parentTarget,\n \"is-first\": index === 0,\n onOnTrueMouseover: onDotAnnotationMouseOver,\n onOnTrueMouseleave: onDotAnnotationMouseLeave\n }, null, 8, [\"dot-annotation\", \"parent-overlay-ref\", \"parent-target\", \"is-first\"])\n ]))\n }), 128)),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(__props.dotAnnotations, (dotAnnotation, index) => {\n return _withDirectives((_openBlock(), _createBlock(ConnectionLine, {\n key: index,\n color: __props.parentTarget.colorCode,\n \"from-element-id\": 'dot-annotation-' + __props.dotAnnotations[index === 0 ? 0 : index - 1].instanceId + '-' + __props.dotAnnotations[index === 0 ? 0 : index - 1].type,\n \"to-element-id\": 'dot-annotation-' + dotAnnotation.instanceId + '-' + dotAnnotation.type,\n \"force-redraw\": __props.forceConnectingLineRedraw\n }, null, 8, [\"color\", \"from-element-id\", \"to-element-id\", \"force-redraw\"])), [\n [_vShow, isConnectingLineDisplayed(index)]\n ])\n }), 128)),\n (__props.parentTarget.isCompleted)\n ? _withDirectives((_openBlock(), _createBlock(ConnectionLine, {\n key: 0,\n color: __props.parentTarget.colorCode,\n \"from-element-id\": 'dot-annotation-' + __props.dotAnnotations[__props.dotAnnotations.length - 1].instanceId + '-' + __props.dotAnnotations[__props.dotAnnotations.length - 1].type,\n \"to-element-id\": 'dot-annotation-' + __props.dotAnnotations[0].instanceId + '-' + __props.dotAnnotations[0].type,\n \"force-redraw\": __props.forceConnectingLineRedraw\n }, null, 8, [\"color\", \"from-element-id\", \"to-element-id\", \"force-redraw\"])), [\n [_vShow, isConnectingLineDisplayed(__props.dotAnnotations.length)]\n ])\n : _createCommentVNode(\"\", true)\n ])\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=2880a924&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2880a924\"]])\n\nexport default __exports__","export enum SegmentationShortcutType {\n SWITCH_TO_NEXT_SEGMENT = \"SWITCH_TO_NEXT_SEGMENT\", // no meta\n SWITCH_TO_PREVIOUS_SEGMENT = \"SWITCH_TO_PREVIOUS_SEGMENT\", // no meta\n SWITCH_TO_NEXT_TARGET = \"SWITCH_TO_NEXT_TARGET\", // no meta\n SWITCH_TO_PREVIOUS_TARGET = \"SWITCH_TO_PREVIOUS_TARGET\", // no meta\n DELETE_ANNOTATION_DOT = \"DELETE_ANNOTATION_DOT\", // no meta\n CLEAR_CURRENT_TYPE = \"CLEAR_CURRENT_TYPE\", // no meta\n CLEAR_ALL = \"CLEAR_ALL\", // no meta\n}","import { useCssVars as _useCssVars, defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, vShow as _vShow, createVNode as _createVNode, withDirectives as _withDirectives, Transition as _Transition, withCtx as _withCtx, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b7bb0b48\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"id\"]\nconst _hoisted_2 = { class: \"spawnable-dot-annotation\" }\nconst _hoisted_3 = { class: \"type-container\" }\nconst _hoisted_4 = { class: \"type\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"mouse-linked-connection-lines\"\n}\n\nimport {computed, onMounted, onUnmounted, PropType, Ref, ref, watch} from \"vue\";\nimport {SegmentationShortcut} from \"@/components/frame/image/annotation/type/SegmentationShortcut\";\nimport ShortcutsManager, {SPECIAL_SHORTCUT_CODE} from \"@/lib/common/helpers/ShortcutsManager\";\nimport {SSegmentedImage} from \"@/store/Spatial2DAnnotation/model/SSegmentedImage\";\nimport {SegmentedImagesStoreManager} from \"@/store/Spatial2DAnnotation/manager/SegmentedImagesStoreManager\";\nimport {SSegmentationTargetTypeParams} from \"@/store/Spatial2DAnnotation/model/SSegmentationTargetTypeParams\";\nimport {SegmentedTargetManager} from \"@/store/Spatial2DAnnotation/manager/subManager/SegmentedTargetManager\";\nimport {AbstractSubStoreManager} from \"@/lib/store/manager/abstract/AbstractSubStoreManager\";\nimport {\n SegmentationTargetTypeParamsStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/SegmentationTargetTypeParamsStoreManager\";\nimport ConnectionLine from \"@/components/frame/image/annotation/ConnectionLine.vue\";\nimport {onElementResize} from \"@/lib/common/utilities/DomUtilities\";\nimport DotAnnotations from \"@/components/frame/image/annotation/DotAnnotations.vue\";\nimport {SegmentationShortcutType} from \"@/components/frame/image/annotation/enum/SegmentationShortcutType\";\nimport {S2DSegment} from \"@/store/Spatial2DAnnotation/model/S2DSegment\";\nimport {SWITCH_DIRECTION} from \"@/store/Spatial2DAnnotation/holder/SegmentedImagesStore\";\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'SegmentationOverlay',\n props: {\n segmentedImage: {\n type: Object as PropType,\n required: true\n }\n},\n setup(__props) {\n\nconst props = __props\n\n_useCssVars(_ctx => ({\n \"46ea55bf\": (cursorOnOverlayY.value),\n \"46ea55be\": (cursorOnOverlayX.value),\n \"15b0dc82\": (_unref(spawnableDotAnnotationColor))\n}))\n\n\n\n\n// ------------------------------\n// Overlay\n// ------------------------------\n\nconst overlay = ref();\n\n// ------------------------------\n// Bounding Box\n// ------------------------------\n\nconst currentTarget = computed(() => {\n return SegmentedImagesStoreManager.store.currentSegmentedTarget;\n})\n\n// const isTargetCurrent = computed(() => {\n// return (instanceId: string) => {\n// return !!(SegmentedImagesStoreManager.store.currentSegmentedTarget && SegmentedImagesStoreManager.store.currentSegmentedTarget.instanceId === instanceId)\n// };\n// });\n//\n// const setCurrentTarget = (target: SSegmentedTarget) =>\n// {\n// if (\n// !currentTarget.value\n// || currentTarget.value.instanceId !== target.instanceId\n// )\n// SegmentedImagesStoreManager.setCurrentSegmentedTarget(target);\n// }\n\nconst segmentationTargetTypeParams: Ref = computed(() => {\n return SegmentationTargetTypeParamsStoreManager.store.selected[0];\n});\n\nwatch(() => segmentationTargetTypeParams.value, () => {\n SegmentedImagesStoreManager.setCurrentSegmentedTargetBasedOnType(segmentationTargetTypeParams.value.value)\n})\n\n// ------------------------------\n// Mouse position tracking\n// ------------------------------\n\nconst cursorOnOverlayX = ref(),\n cursorOnOverlayY = ref(),\n isCursorInsideImage = ref(false);\n\nonMounted(() =>\n{\n overlay.value.addEventListener(\"mouseover\", function()\n {\n isCursorInsideImage.value = true;\n });\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) + \"px\";\n cursorOnOverlayY.value = (event.pageY - rect.top) + \"px\";\n });\n\n overlay.value.addEventListener(\"mouseleave\", function()\n {\n isCursorInsideImage.value = false;\n });\n})\n\n// ------------------------------\n// Shortcuts\n// ------------------------------\n\nconst shortcuts: Ref = computed(() =>\n{\n const base = [\n {\n type: SegmentationShortcutType.CLEAR_CURRENT_TYPE,\n keyCode: \"Escape\"\n },\n {\n type: SegmentationShortcutType.DELETE_ANNOTATION_DOT,\n keyCode: SPECIAL_SHORTCUT_CODE.LEFT_CLICK,\n requiresShift: true,\n },\n {\n type: SegmentationShortcutType.SWITCH_TO_NEXT_SEGMENT,\n keyCode: SPECIAL_SHORTCUT_CODE.WHEEL_DOWN,\n },\n {\n type: SegmentationShortcutType.SWITCH_TO_PREVIOUS_SEGMENT,\n keyCode: SPECIAL_SHORTCUT_CODE.WHEEL_UP,\n },\n {\n type: SegmentationShortcutType.SWITCH_TO_PREVIOUS_TARGET,\n keyCode: SPECIAL_SHORTCUT_CODE.WHEEL_DOWN,\n requiresShift: true,\n },\n {\n type: SegmentationShortcutType.SWITCH_TO_NEXT_TARGET,\n keyCode: SPECIAL_SHORTCUT_CODE.WHEEL_UP,\n requiresShift: 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 SegmentationShortcutType.CLEAR_CURRENT_TYPE:\n clearCurrentType();\n break;\n\n case SegmentationShortcutType.DELETE_ANNOTATION_DOT:\n deleteDotAnnotation();\n break;\n\n case SegmentationShortcutType.SWITCH_TO_NEXT_SEGMENT:\n switchToNextSegment();\n break;\n\n case SegmentationShortcutType.SWITCH_TO_PREVIOUS_SEGMENT:\n switchToPreviousSegment();\n break;\n\n case SegmentationShortcutType.SWITCH_TO_NEXT_TARGET:\n switchToNextTarget();\n break;\n\n case SegmentationShortcutType.SWITCH_TO_PREVIOUS_TARGET:\n switchToPreviousTarget();\n break;\n }\n }));\n })\n}\n\n// ------------------------------\n// Clear\n// ------------------------------\n\nconst isImageCurrent = computed(() => {\n return SegmentedImagesStoreManager.store.currentSegmentedImage?.instanceId === props.segmentedImage.instanceId;\n});\n\n// const clearAll = () =>\n// {\n// if (isImageCurrent.value)\n// SegmentedImagesStoreManager.store.resetCurrentSegmentedImage();\n// }\n\nconst clearCurrentType = () =>\n{\n if (isImageCurrent.value && currentTarget.value)\n SegmentedImagesStoreManager.store.removeTarget(currentTarget.value.instanceId);\n}\n\n// ------------------------------\n// Annotation\n// ------------------------------\n\nconst displayAnnotationsHolder = ref(true);\n\nconst spawnSegment = (e: MouseEvent) =>\n{\n if (!e.ctrlKey && !e.altKey && !e.shiftKey && segmentationTargetTypeParams.value)\n {\n const x = +cursorOnOverlayX.value.replace(\"px\", \"\");\n const y = +cursorOnOverlayY.value.replace(\"px\", \"\");\n\n let currentTarget = SegmentedImagesStoreManager.store.currentSegmentedTarget;\n\n if (!currentTarget) {\n SegmentedImagesStoreManager.createEmptyTargetForCurrent(segmentationTargetTypeParams.value.value, segmentationTargetTypeParams.value.colorCode, true);\n currentTarget = SegmentedImagesStoreManager.store.currentSegmentedTarget;\n }\n\n if (\n x && y\n && currentTarget\n && isCursorInsideImage\n && isImageCurrent.value\n )\n {\n const segmentedTargetManager = new SegmentedTargetManager(segmentationTargetTypeParams.value.value);\n\n if (isHoveringTheStartSegment())\n {\n // Connect the last annotation and complete the target\n SegmentedImagesStoreManager.store.setCurrentTargetIsCompleted(true);\n }\n else\n {\n // Add an annotation\n const result = segmentedTargetManager.addSegment(currentTarget, {\n instanceId: AbstractSubStoreManager.createInstanceId(),\n left: x * 100 / overlay.value.offsetWidth,\n top: y * 100 / overlay.value.offsetHeight,\n type: currentTarget.type,\n colorCode: currentTarget.colorCode\n }, currentTarget.nextInsertableSegmentIndex);\n\n if (Array.isArray(result))\n throw \"Couldn't create annotation. Errors : \" + result.join(\", \");\n }\n\n SegmentedImagesStoreManager.store.incrementNextInsertableSegmentIndexForCurrentTarget();\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\nconst isHoveringTheStartSegment = () =>\n{\n if (!currentTarget.value || !currentTarget.value.segments.length)\n return false;\n\n const firstSegmentInstanceId = currentTarget.value.segments[0].instanceId;\n\n return hoveredSegments.value.filter(segment => segment.instanceId === firstSegmentInstanceId).length > 0;\n}\n\n// ------------------------------\n// Target\n// ------------------------------\n\nconst switchToNextTarget = () => {\n if (isImageCurrent.value)\n SegmentedImagesStoreManager.store.switchToNextOrPreviousTarget({direction: SWITCH_DIRECTION.NEXT, allowIsComplete: true});\n}\n\nconst switchToPreviousTarget = () => {\n if (isImageCurrent.value)\n SegmentedImagesStoreManager.store.switchToNextOrPreviousTarget({direction: SWITCH_DIRECTION.PREVIOUS, allowIsComplete: true});\n}\n\n// ------------------------------\n// Spawnable annotation\n// ------------------------------\n\nconst switchToNextSegment = () => {\n if (isImageCurrent.value)\n SegmentedImagesStoreManager.store.switchToNextOrPreviousNextInsertableSegmentIndexForCurrentTarget({direction: SWITCH_DIRECTION.NEXT});\n}\n\nconst switchToPreviousSegment = () => {\n if (isImageCurrent.value)\n SegmentedImagesStoreManager.store.switchToNextOrPreviousNextInsertableSegmentIndexForCurrentTarget({direction: SWITCH_DIRECTION.PREVIOUS});\n}\n\n// const switchToNextSpawnableAnnotation = () => {\n// if (isImageCurrent.value)\n// SegmentationTargetTypeParamsStoreManager.store.switchToNextSelected();\n// }\n\n// const switchToPreviousSpawnableAnnotation = () => {\n// if (isImageCurrent.value)\n// SegmentationTargetTypeParamsStoreManager.store.switchToPreviousSelected();\n// }\n\nconst spawnableDotAnnotationDisplayParams = computed(() => {\n return SegmentationTargetTypeParamsStoreManager.store.selected;\n})\n\nconst spawnableDotAnnotationConnectionLinesParams = ref();\n\nconst nextInsertableSegmentIndexForCurrentTarget = computed(() => {\n return SegmentedImagesStoreManager.store.nextInsertableSegmentIndexForCurrentTarget;\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\n// ------------------------------\n// Connecting lines\n// ------------------------------\n\nconst forceConnectingLineRedraw = ref(0);\n\n// watch(() => currentTarget.value, () => {\n// setTimeout(() => forceConnectingLineRedraw.value++, 50);\n// })\n\nwatch(() => SegmentedImagesStoreManager.store.nextSegmentsAroundNextInsertableSegmentIndexForCurrentTarget, () => {\n setTimeout(() => spawnableDotAnnotationConnectionLinesParams.value = SegmentedImagesStoreManager.store.nextSegmentsAroundNextInsertableSegmentIndexForCurrentTarget, 50);\n setTimeout(() => forceConnectingLineRedraw.value++, 50);\n})\n\nwatch(() => SegmentationTargetTypeParamsStoreManager.store.selected, () => {\n setTimeout(() => forceConnectingLineRedraw.value++, 50);\n})\n\nwatch(() => isCursorInsideImage.value, () => {\n setTimeout(() => forceConnectingLineRedraw.value++, 50);\n})\n\nonMounted(() => {\n onElementResize(overlay.value, () => forceConnectingLineRedraw.value++);\n})\n\n// ------------------------------\n// Annotations deletion\n// ------------------------------\n\nconst hoveredSegments: Ref = ref([]);\n\nconst onHoveredAnnotations = (annotations: S2DSegment[]) =>\n{\n hoveredSegments.value = annotations;\n}\n\nconst deleteDotAnnotation = () =>\n{\n hoveredSegments.value.map(dotAnnotation => {\n SegmentedImagesStoreManager.removeSegmentOfInstanceIdFromCurrentTarget(dotAnnotation.instanceId);\n })\n}\n\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass('image-overlay ' + (_unref(spawnableDotAnnotationName) ? 'ready-to-annotate' : '')),\n id: 'image-overlay-' + __props.segmentedImage.image.instanceId,\n onClick: spawnSegment,\n ref_key: \"overlay\",\n ref: overlay\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(__props.segmentedImage.targets, (target) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: target.instanceId\n }, [\n _createVNode(_Transition, { name: \"fade\" }, {\n default: _withCtx(() => [\n _withDirectives(_createVNode(DotAnnotations, {\n \"dot-annotations\": target.segments,\n \"parent-target\": target,\n \"parent-overlay-ref\": overlay.value,\n \"force-connecting-line-redraw\": forceConnectingLineRedraw.value,\n \"undisplay-connecting-lines-of-dot-annotations-index\": (isCursorInsideImage.value && _unref(currentTarget) && _unref(currentTarget).instanceId === target.instanceId) ? _unref(nextInsertableSegmentIndexForCurrentTarget) : undefined,\n onOnHoveredAnnotations: onHoveredAnnotations\n }, null, 8, [\"dot-annotations\", \"parent-target\", \"parent-overlay-ref\", \"force-connecting-line-redraw\", \"undisplay-connecting-lines-of-dot-annotations-index\"]), [\n [_vShow, displayAnnotationsHolder.value && _unref(isImageCurrent)]\n ])\n ]),\n _: 2\n }, 1024)\n ]))\n }), 128)),\n _withDirectives(_createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_unref(spawnableDotAnnotationName)), 1)\n ])\n ], 512), [\n [_vShow, _unref(isImageCurrent) && isCursorInsideImage.value && _unref(spawnableDotAnnotationName)]\n ]),\n (_unref(currentTarget) && displayAnnotationsHolder.value)\n ? _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(spawnableDotAnnotationConnectionLinesParams.value, (surroundingSegment, index) => {\n return (_openBlock(), _createBlock(ConnectionLine, {\n color: surroundingSegment ? surroundingSegment.colorCode : 'transparent',\n \"to-element-id\": surroundingSegment ? 'dot-annotation-' + surroundingSegment.instanceId + '-' + surroundingSegment.type : 'dot-annotation-unknown',\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, _unref(currentTarget) && _unref(isImageCurrent) && isCursorInsideImage.value && _unref(spawnableDotAnnotationName)]\n ])\n : _createCommentVNode(\"\", true)\n ], 10, _hoisted_1))\n}\n}\n\n})","import script from \"./SegmentationOverlay.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SegmentationOverlay.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./SegmentationOverlay.vue?vue&type=style&index=0&id=b7bb0b48&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b7bb0b48\"]])\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-55ec43a8\"),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 {SImageData} from \"@/lib/store/model/media/SImageData\";\nimport {SSegmentedImage} from \"@/store/Spatial2DAnnotation/model/SSegmentedImage\";\nimport {SegmentedImagesStoreManager} from \"@/store/Spatial2DAnnotation/manager/SegmentedImagesStoreManager\";\nimport SegmentationOverlay from \"@/components/frame/image/annotation/SegmentationOverlay.vue\";\n\n// ------------------------------\n// Base\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'Segmentation2DPage',\n props: {\n segmentedImages: 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.segmentedImages, () => {\n if (props.segmentedImages)\n images.value = props.segmentedImages.map(segmentedImage => segmentedImage.image);\n});\n\n// ------------------------------\n// Images carousel display\n// ------------------------------\n\nconst overlayableImagesCarouselRef = ref();\n\nconst getOverlaySlotName = (segmentedImageData: SSegmentedImage) => {\n return \"overlay \" + segmentedImageData.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 SegmentedImagesStoreManager.setCurrentSegmentedImageFromImageData(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.segmentedImages, (segmentedImage) => {\n return {\n name: getOverlaySlotName(segmentedImage),\n fn: _withCtx(() => [\n _createVNode(SegmentationOverlay, { \"segmented-image\": segmentedImage }, null, 8, [\"segmented-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 \"./Segmentation2DPage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Segmentation2DPage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Segmentation2DPage.vue?vue&type=style&index=0&id=55ec43a8&scoped=true&lang=scss\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-55ec43a8\"]])\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 return loadImageAsResource(image.src).then((imageResource: HTMLImageElement) => {\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 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/**\n * Load an image from a given URL\n */\nexport const loadImage = (url: string): Promise =>\n{\n return new Promise(resolve =>\n {\n const image = new Image();\n\n image.addEventListener('load', () => {\n resolve(image);\n });\n\n image.src = url;\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 {getHeightAndWidthFromImageFile} from \"@/lib/common/utilities/ImageUtilities\";\n\nexport type CocoDataset = {\n info: CocoInfo,\n images: CocoImage[],\n annotations: CocoAnnotation[],\n licenses: CocoLicense[],\n categories: CocoCategory[]\n}\n\n// General info about the dataset\nexport type CocoInfo = {\n year: number, // year of the dataset's release\n version: string, // dataset's version\n description: string, // description of the dataset\n contributor?: string, // creator of the dataset\n url: string, // website that allowed the creation of the dataset\n data_created: string, // date of the creation of the dataset\n}\n\n// List of all images in the dataset\nexport type CocoImage = {\n id: number, // unique identifier\n width: number, // the image width\n height: number, // the image height\n file_name: string, // the file name of the image\n license?: number, // its license id\n flickr_url?: string, // (optional) the url to the image on flickr\n coco_url?: string, // (optional) the url to the image on the Coco website\n date_capture: string, // the date of the capture\n}\n\n// List of all object annotations for each image\nexport type CocoAnnotation = {\n id: number, // unique identifier\n image_id: number, // the image's id from which the annotation is from\n category_id: number, // the annotation's category id (ex : the id of \"person\")\n segmentation?: number[][], // the coordinates of each point making the segmentation, per section (one block = 1 section) in the shape of (dot1x, dot1y, dot2x, dot2y, ...)\n num_keypoints?: number, // the number of keypoints\n keypoints?: number[], // the skeleton's keypoints inside the segmentated item\n area?: number, // the number of pixels defining the area inside the segmentation\n bbox?: [number, number, number, number], // the bounding box that fills the target annotation (x, y, width, height)\n iscrowd: number, // if the annotation actually includes multiple targets\n caption: string, // a description of the annotation (ex : \"a person sitting\")\n}\n\n// Information about the licenses for the images in the dataset\n/* The License may be among these 8 :\n- id : 1. Name : Attribution-NonCommercial-ShareAlike License. Url: http://creativecommons.org/licenses/by-nc-sa/2.0/\n- id : 2. Name : Attribution-NonCommercial License. Url: http://creativecommons.org/licenses/by-nc/2.0/\n- id : 3. Name : Attribution-NonCommercial-NoDerivs License. Url : http://creativecommons.org/licenses/by-nc-nd/2.0/\n- id : 4. Name : Attribution License. Url : http://creativecommons.org/licenses/by/2.0/\n- id : 5. Name : Attribution-ShareAlike License. Url : http://creativecommons.org/licenses/by-sa/2.0/\n- id : 6. Name : Attribution-NoDerivs License. Url : http://creativecommons.org/licenses/by-nd/2.0/\n- id : 7. Name : No known copyright restrictions. Url : http://flickr.com/commons/usage/\n- id : 8. Name : United States Government Work. Url : http://www.usa.gov/copyright.shtml\n */\nexport type CocoLicense = {\n id: number, // unique identifier\n name: string, // name of the license (ex : Attribution-NonCommercial-ShareAlike 4.0 International)\n url: string // url to the license\n}\n\n// List of all dataset object categories\nexport type CocoCategory = {\n supercategory?: string, // (optional) the parent category\n id: number, // unique identifier\n name: string, // name of the category\n keypoints?: string[], // キーポイントの順番(=ID)と名称\n skeleton?: [number, number][] // 描画のためのキーポイントの連結関係. \"keypoints\"での記述順番がIDと対応するため、例えば[16,14]は\"left_ankle\"と\"left_knee\"を繋ぐことを意味する。\n}\n\n/**\n * Handles CocoDataset format\n * More info on : https://qiita.com/kHz/items/8c06d0cb620f268f4b3e\n */\nexport default abstract class AbstractCocoDatasetHelper\n{\n public getEmptyDataset = (): CocoDataset =>\n {\n return {\n info: {\n year: new Date().getFullYear(),\n version: \"1.0.0\",\n contributor: \"\",\n description: \"This dataset was created with webfarmer's annotation tool\",\n url: window.location.origin,\n data_created: new Date().toISOString().split('T')[0]\n },\n annotations: [],\n images: [],\n licenses: [],\n categories: []\n }\n }\n\n public addImage = async (dataset: CocoDataset, image: File): Promise =>\n {\n const id = dataset.images.length;\n\n const dimensions = await getHeightAndWidthFromImageFile(image)\n\n const cocoImage = {\n id: id,\n file_name: image.name,\n width: dimensions.width,\n height: dimensions.height,\n date_capture: new Date(image.lastModified).toISOString().split('T')[0]\n };\n\n dataset.images.push(cocoImage)\n\n return cocoImage;\n }\n\n public addCategoryIsNotExists = (dataset: CocoDataset, name: string, parentCategory?: string): CocoCategory =>\n {\n const existingCategory = dataset.categories.filter(category => category.name === name);\n\n if (existingCategory.length > 0)\n return existingCategory[0];\n else\n {\n const id = dataset.categories.length;\n\n const category: CocoCategory = {\n id: id,\n name: name,\n }\n\n if (parentCategory)\n category.supercategory = parentCategory;\n\n dataset.categories.push(category)\n\n return category;\n }\n }\n}","import AbstractCocoDatasetHelper, {\n CocoAnnotation,\n CocoCategory,\n CocoDataset,\n CocoImage\n} from \"@/lib/common/helpers/AbstractCocoDatasetHelper\";\nimport {SSegmentedTarget} from \"@/store/Spatial2DAnnotation/model/SSegmentedTarget\";\nimport {SSegmentedImage} from \"@/store/Spatial2DAnnotation/model/SSegmentedImage\";\n\nclass CocoDatasetHelper extends AbstractCocoDatasetHelper\n{\n public segmentedImageToCocoDataset = async (segmentedImage: SSegmentedImage) =>\n {\n const cocoDataset = this.getEmptyDataset()\n\n await this.addImage(cocoDataset, segmentedImage.image.file)\n\n segmentedImage.targets.map(target =>\n {\n const category = this.addCategoryIsNotExists(cocoDataset, target.type)\n\n this.addAnnotationFromTarget(cocoDataset, target, cocoDataset.images[0], category)\n })\n\n return cocoDataset;\n }\n\n public addAnnotationFromTarget = (dataset: CocoDataset, target: SSegmentedTarget, image: CocoImage, category: CocoCategory): CocoAnnotation =>\n {\n const id = dataset.annotations.length;\n\n const segmentation: number[] = [];\n\n let minLeft = image.width,\n minTop = image.height,\n maxLeft = 0,\n maxTop = 0;\n\n target.segments.map(segment =>\n {\n const leftPx = segment.left * image.width / 100,\n topPx = segment.top * image.height / 100;\n\n segmentation.push(leftPx, topPx);\n\n if (minLeft > leftPx)\n minLeft = leftPx;\n\n if (maxLeft < leftPx)\n maxLeft = leftPx;\n\n if (minTop > topPx)\n minTop = topPx;\n\n if (maxTop < topPx)\n maxTop = topPx;\n })\n\n const annotation: CocoAnnotation = {\n id: id,\n iscrowd: 0,\n image_id: image.id,\n category_id: category.id,\n caption: category.name,\n segmentation: [segmentation],\n }\n\n if (target.segments.length > 0)\n annotation.bbox = [minLeft, minTop, maxLeft - minLeft, maxTop - minTop];\n\n dataset.annotations.push(annotation)\n\n return annotation;\n }\n}\n\nexport default new CocoDatasetHelper();","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 {\n changeFilenameExtension,\n completeFilename, hexToRgb,\n removeExtensionFromFilename, rgbToHex\n} from \"@/lib/common/utilities/StringUtilities\";\nimport {getHeightAndWidthFromImageFile, loadImage, 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 SegmentedImagesStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/SegmentedImagesStoreManager\";\nimport {SSegmentedImage} from \"@/store/Spatial2DAnnotation/model/SSegmentedImage\";\nimport CocoDatasetHelper from \"@/helpers/CocoDatasetHelper\";\n\ntype CarouselImageType = {\n HTMLImage: HTMLImageElement,\n}\n\nclass AnnotatableImagesDownloadHelper\n{\n public async downloadAllAnnotatedImagesData(carouselImages: typeof OverlayableImage[])\n {\n const folderName = \"segmented annotations\";\n const zipName = new Date().toISOString() + \" segmented annotations\";\n\n const annotatedCowImagesData = SegmentedImagesStoreManager.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: SSegmentedImage)\n {\n const resource: DownloadableResource[] = [];\n\n const jsonFilename = removeExtensionFromFilename(annotatableImageData.image.name) + \".json\";\n\n const cocoDataset = await CocoDatasetHelper.segmentedImageToCocoDataset(annotatableImageData)\n\n resource.push(createDownloadableResource(annotatableImageData.image.file, annotatableImageData.image.file.name));\n resource.push(createDownloadableResource(createJsonBlobFile(cocoDataset, jsonFilename).blob, jsonFilename));\n\n return resource;\n }\n\n protected async prepareAnnotatedImages(annotatableImagesData: SSegmentedImage[], 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(\"dot-annotation-container\")].map((element: HTMLElement) => element.classList.remove(\"current\"));\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 const annotatableImageData = annotatableImagesData.filter(annotatableImageData => annotatableImageData.image.instanceId === instanceId)[0];\n\n instanceIdedBlobFiles.push({\n instanceId: instanceId,\n blobFile: {\n blob: await this.createMaskBlob(annotatableImageData),\n filename: \"mask.\" + changeFilenameExtension(filename, \"png\")\n }\n })\n }\n }, Promise.resolve())\n\n return instanceIdedBlobFiles;\n }\n\n protected createMaskBlob = async (annotatableImageData: SSegmentedImage) =>\n {\n type UsedColor = {\n hex: string,\n rgb: {r: number, g: number, b: number},\n timesUsed: number\n }\n\n const canvas = document.createElement('canvas'),\n imageDimensions = await getHeightAndWidthFromImageFile(annotatableImageData.image.file),\n usedColors: UsedColor[] = []\n\n canvas.width = imageDimensions.width;\n canvas.height = imageDimensions.height;\n\n const ctx= canvas.getContext(\"2d\");\n\n if (!ctx)\n throw \"Unsupported canvas context\";\n\n ctx.fillStyle = \"black\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n annotatableImageData.targets.map(target =>\n {\n let usedColorIndex = usedColors.findIndex(usedColor => usedColor.hex === target.colorCode)\n\n if (usedColorIndex === -1)\n {\n usedColors.push({\n hex: target.colorCode,\n rgb: hexToRgb(target.colorCode) as {r: number, g: number, b: number},\n timesUsed: 1\n })\n\n usedColorIndex = usedColors.length - 1;\n }\n else {\n usedColors[usedColorIndex].timesUsed++\n }\n\n /// use save when using clip Path\n ctx.save();\n\n ctx.beginPath();\n\n let i = 0;\n\n target.segments.map(segment =>\n {\n const segmentX = segment.left * imageDimensions.width / 100;\n const segmentY = segment.top * imageDimensions.height / 100;\n\n if (0 === i++)\n ctx.moveTo(segmentX, segmentY);\n else\n ctx.lineTo(segmentX, segmentY);\n })\n\n ctx.closePath();\n\n /// define this Path as clipping mask\n ctx.clip();\n\n const nextRgbNumber = (current: number, timesCalled: number) => {\n return (current + timesCalled) > 255 ? 0 : (current + timesCalled - 1);\n }\n\n /// draw the image\n const hex = rgbToHex(\n nextRgbNumber(usedColors[usedColorIndex].rgb.r, 1),\n nextRgbNumber(usedColors[usedColorIndex].rgb.g, 1),\n nextRgbNumber(usedColors[usedColorIndex].rgb.b, usedColors[usedColorIndex].timesUsed)\n );\n\n ctx.fillStyle = hex;\n\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n /// reset clip to default\n ctx.restore();\n })\n\n const image = await loadImage(\"\" + annotatableImageData.image.url)\n\n return await canvasToBlob(await overlayCanvasOntoImage(canvas, image))\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 AnnotatableImagesDownloadHelper from \"@/helpers/AnnotatableImagesDownloadHelper\";\nimport {SSegmentedImage} from \"@/store/Spatial2DAnnotation/model/SSegmentedImage\";\nimport Segmentation2DPage from \"@/views/Segmentation2D/Segmentation2DPage.vue\";\n\n// ------------------------------\n// Base\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'Segmentation2DFooter',\n props: {\n images: Array as PropType,\n segmentation2DPageRef: 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.segmentation2DPageRef)\n AnnotatableImagesDownloadHelper.downloadAllAnnotatedImagesData(props.segmentation2DPageRef.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 \"./Segmentation2DFooter.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Segmentation2DFooter.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 {\n SegmentedImagesStoreManager\n} from \"@/store/Spatial2DAnnotation/manager/SegmentedImagesStoreManager\";\nimport Segmentation2DLeftMenu from \"@/views/Segmentation2D/Segmentation2DLeftMenu.vue\";\nimport Segmentation2DPage from \"@/views/Segmentation2D/Segmentation2DPage.vue\";\nimport Segmentation2DFooter from \"@/views/Segmentation2D/Segmentation2DFooter.vue\";\n\n// ------------------------------\n// Images selection listener\n// ------------------------------\n\n\nexport default /*#__PURE__*/_defineComponent({\n name: 'Segmentation2DView',\n setup(__props) {\n\n\nconst segmentedImages = computed(() => {\n return SegmentedImagesStoreManager.store.entries;\n})\n\nconst segmentation2DPageRef = ref();\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(AppLayout, null, {\n \"left-menu\": _withCtx(() => [\n _createVNode(Segmentation2DLeftMenu, { \"segmented-images\": _unref(segmentedImages) }, null, 8, [\"segmented-images\"])\n ]),\n page: _withCtx(() => [\n _createVNode(Segmentation2DPage, {\n \"segmented-images\": _unref(segmentedImages),\n ref_key: \"segmentation2DPageRef\",\n ref: segmentation2DPageRef\n }, null, 8, [\"segmented-images\"])\n ]),\n \"page-footer\": _withCtx(() => [\n _createVNode(Segmentation2DFooter, {\n images: _unref(segmentedImages),\n \"segmentation2-d-page-ref\": segmentation2DPageRef.value\n }, null, 8, [\"images\", \"segmentation2-d-page-ref\"])\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./Segmentation2DView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Segmentation2DView.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import {createRouter, createWebHistory} from 'vue-router';\nimport Segmentation2DView from \"@/views/Segmentation2D/Segmentation2DView.vue\";\n\nconst routes = [\n {\n path: '/',\n name: 'segmentation_2D_view',\n component: Segmentation2DView,\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 SSegmentationTargetTypeParams\n} from \"@/store/Spatial2DAnnotation/model/SSegmentationTargetTypeParams\";\n\n@Module({\n name: \"SegmentationTargetTypeParamsStore\",\n namespaced: true,\n stateFactory: true\n})\n\nexport class SegmentationTargetTypeParamsStore 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 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 let nextOneIndex = selectedIndex + 1;\n\n if (nextOneIndex >= this._entries.length)\n nextOneIndex = 0;\n\n this._entries.forEach(entry => {\n entry.isSelected = false;\n });\n\n this._entries[nextOneIndex].isSelected = true;\n }\n\n @Mutation\n switchToPreviousSelected()\n {\n const selectedIndex = this._entries.findIndex(entry => entry.isSelected === true);\n\n let nextOneIndex = selectedIndex - 1;\n\n if (nextOneIndex < 0)\n nextOneIndex = this._entries.length - 1;\n\n this._entries.forEach(entry => {\n entry.isSelected = false;\n });\n\n this._entries[nextOneIndex].isSelected = true;\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(SegmentationTargetTypeParamsStore.getters, base.getters);\n Object.assign(SegmentationTargetTypeParamsStore.mutations, base.mutations);\n }\n}","import {Module, Mutation} from 'vuex-module-decorators'\nimport {AbstractStore} from \"@/lib/store/holder/abstract/AbstractStore\";\nimport {S2DSegment} from \"@/store/Spatial2DAnnotation/model/S2DSegment\";\nimport {SSegmentedImage} from \"@/store/Spatial2DAnnotation/model/SSegmentedImage\";\nimport {SSegmentedTarget} from \"@/store/Spatial2DAnnotation/model/SSegmentedTarget\";\n\nexport enum SWITCH_DIRECTION {\n NEXT = \"NEXT\",\n PREVIOUS = \"PREVIOUS\",\n}\n\n@Module({\n name: \"SegmentedImagesStore\",\n namespaced: true,\n stateFactory: true\n})\n\nexport class SegmentedImagesStore extends AbstractStore\n{\n // ------------------------------\n // General\n // ------------------------------\n\n get annotated()\n {\n return this._entries.filter(entry => entry.targets.length);\n }\n\n // ------------------------------\n // Currently selected\n // ------------------------------\n\n // ------------\n // Image\n // ------------\n\n get currentSegmentedImage()\n {\n const currentSegmentedImage = this._entries.filter(entry => entry.isCurrent);\n\n return currentSegmentedImage.length ? currentSegmentedImage[0] : undefined;\n }\n\n get previousSegmentedImage()\n {\n const previousSegmentedImageIndex = this._entries.findIndex(entry => entry.isCurrent);\n\n return previousSegmentedImageIndex === 0 ? undefined : this._entries[previousSegmentedImageIndex - 1];\n }\n\n get hasPreviousSegmentedImageTargets()\n {\n const previousSegmentedImageIndex = this._entries.findIndex(entry => entry.isCurrent);\n\n return !!(previousSegmentedImageIndex > 0 && this._entries[previousSegmentedImageIndex - 1].targets.length);\n }\n\n @Mutation\n setCurrentSegmentedImage(annotatableImageInstanceId: string)\n {\n this._entries.map(entry => entry.isCurrent = entry.instanceId === annotatableImageInstanceId);\n }\n\n @Mutation\n resetCurrentSegmentedImage()\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => {\n entry.targets = [];\n }\n );\n }\n\n // ------------\n // Target\n // ------------\n\n get currentSegmentedTarget()\n {\n const currentImage = this._entries.filter(entry => entry.isCurrent);\n const currentTargets = currentImage && currentImage.length ? currentImage[0].targets.filter(target => target.isCurrent) : undefined;\n\n return currentTargets && currentTargets.length ? currentTargets[0] : undefined;\n }\n\n @Mutation\n resetIsCurrentTargetForCurrentSegmentedImage()\n {\n this._entries.filter(entry => entry.isCurrent).map(entry => entry.targets.map(target => target.isCurrent = false));\n }\n\n @Mutation\n setTargetIsCurrent(targetInstanceId: string, isCurrent: boolean)\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.targets.filter(target => target.instanceId === targetInstanceId).map(target => target.isCurrent = isCurrent)\n );\n }\n\n @Mutation\n setCurrentTargetIsCompleted(isCompleted: boolean, unCurrent: boolean = true)\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.targets.filter(target => target.isCurrent).map(target => {\n target.isCompleted = isCompleted;\n if (unCurrent)\n target.isCurrent = false;\n })\n );\n }\n\n @Mutation\n setFirstUncompletedTargetOfTypeIsCurrent(targetType: string)\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.targets.filter(target => target.type === targetType && !target.isCompleted).map(target => target.isCurrent = true)\n );\n }\n\n // ------------\n // Segments\n // ------------\n\n get nextInsertableSegmentIndexForCurrentTarget ()\n {\n let index;\n\n this._entries.filter(entry => entry.isCurrent).map(entry => entry.targets.filter(target => target.isCurrent).map(currentTarget =>\n {\n index = currentTarget.nextInsertableSegmentIndex;\n }));\n\n return index;\n }\n\n get nextSegmentsAroundNextInsertableSegmentIndexForCurrentTarget ()\n {\n const nextSegmentsAround: S2DSegment[] = [];\n\n this._entries.filter(entry => entry.isCurrent).map(entry => entry.targets.filter(target => target.isCurrent).map(currentTarget =>\n {\n if (\n typeof currentTarget.nextInsertableSegmentIndex === \"undefined\"\n || currentTarget.nextInsertableSegmentIndex === currentTarget.segments.length -1\n )\n {\n if (currentTarget.isCompleted)\n nextSegmentsAround.push(currentTarget.segments[0])\n\n nextSegmentsAround.push(currentTarget.segments[currentTarget.segments.length -1])\n }\n else\n {\n nextSegmentsAround.push(currentTarget.segments[currentTarget.nextInsertableSegmentIndex])\n nextSegmentsAround.push(currentTarget.segments[currentTarget.nextInsertableSegmentIndex + 1])\n }\n }))\n\n return nextSegmentsAround;\n }\n\n @Mutation\n setNextInsertableSegmentIndexForCurrentTarget(index: number)\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.targets.filter(target => target.isCurrent).map(target => {\n target.nextInsertableSegmentIndex = index;\n })\n );\n }\n\n @Mutation\n incrementNextInsertableSegmentIndexForCurrentTarget()\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.targets.filter(target => target.isCurrent).map(target => {\n target.nextInsertableSegmentIndex = typeof target.nextInsertableSegmentIndex === 'undefined' ? target.segments.length - 1 : (target.nextInsertableSegmentIndex + 1);\n })\n );\n }\n\n @Mutation\n setSegmentsForCurrentTarget(segments: S2DSegment[])\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.targets.filter(target => target.isCurrent).map(target => {\n target.segments = segments;\n })\n );\n }\n\n @Mutation\n switchToNextOrPreviousNextInsertableSegmentIndexForCurrentTarget({direction}: {direction: SWITCH_DIRECTION})\n {\n const thisImageIndex = this._entries.findIndex(entry => entry.isCurrent);\n\n if (thisImageIndex === -1)\n return;\n\n const thisTargetIndex = this._entries[thisImageIndex].targets.findIndex(target => target.isCurrent);\n\n if (thisTargetIndex === -1)\n return;\n\n let selectedIndex = this._entries[thisImageIndex].targets[thisTargetIndex].nextInsertableSegmentIndex;\n\n if (typeof selectedIndex === \"undefined\")\n selectedIndex = this._entries[thisImageIndex].targets[thisTargetIndex].segments.length - 1;\n\n const testedEntryIndex = selectedIndex >= 0 ? selectedIndex : (this._entries[thisImageIndex].targets.length - 1);\n\n let nextOneIndex = testedEntryIndex + (direction === SWITCH_DIRECTION.NEXT ? 1 : -1);\n\n if (nextOneIndex < 0)\n nextOneIndex = this._entries[thisImageIndex].targets[thisTargetIndex].segments.length - 1;\n\n if (direction === SWITCH_DIRECTION.NEXT)\n {\n if (nextOneIndex >= this._entries[thisImageIndex].targets[thisTargetIndex].segments.length)\n nextOneIndex = 0;\n }\n else\n {\n if (nextOneIndex < 0)\n nextOneIndex = this._entries[thisImageIndex].targets[thisTargetIndex].segments.length - 1;\n }\n\n this._entries[thisImageIndex].targets[thisTargetIndex].nextInsertableSegmentIndex = nextOneIndex;\n }\n\n @Mutation\n removeSegmentFromCurrentTarget(segmentInstanceId: string)\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.targets.filter(target => target.isCurrent).map(target => {\n const key = target.segments.findIndex(segment => segment.instanceId === segmentInstanceId);\n target.segments = target.segments.filter(segment => segment.instanceId !== segmentInstanceId);\n target.nextInsertableSegmentIndex = key - 1;\n })\n );\n }\n\n @Mutation\n removeSegmentFromTarget(targetInstanceId: string, segmentInstanceId: string)\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.targets.filter(target => target.instanceId === targetInstanceId).map(target => {\n target.segments = target.segments.filter(segment => segment.instanceId !== segmentInstanceId);\n })\n );\n }\n\n // ------------------------------\n // Targets\n // ------------------------------\n\n get targetByInstanceId()\n {\n const _this = this;\n\n return function (segmentedImageInstanceId: string, targetInstanceId: string): SSegmentedTarget\n {\n const entry = _this._entries.filter(entry => entry.instanceId === segmentedImageInstanceId);\n const target = entry.length ? entry[0].targets.filter(target => target.instanceId === targetInstanceId) : [];\n\n const result = target ? target[0] : undefined;\n\n if (typeof result === \"undefined\")\n throw \"Fatal error : Can't find boundingBox of instanceId \"+ targetInstanceId +\" for segmentedImage of instanceId \"+ segmentedImageInstanceId;\n\n return result;\n }\n }\n\n @Mutation\n addTarget({segmentedImage, target}: {segmentedImage: SSegmentedImage, target: SSegmentedTarget})\n {\n segmentedImage.targets.push(target);\n }\n\n @Mutation\n setSegmentsForTarget(targetInstanceId: string, segments: S2DSegment[])\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => entry.targets.filter(target => target.instanceId === targetInstanceId).map(target => {\n target.segments = segments;\n })\n );\n }\n\n @Mutation\n switchToNextOrPreviousTarget({direction, allowIsComplete}: {direction: SWITCH_DIRECTION, allowIsComplete: boolean})\n {\n const thisImageIndex = this._entries.findIndex(entry => entry.isCurrent);\n\n if (thisImageIndex === -1)\n return;\n\n const selectedIndex = this._entries[thisImageIndex].targets.findIndex(target => target.isCurrent);\n\n const trySwitch = (testedEntryIndex: number, triedTimes: number = 1) =>\n {\n let nextOneIndex = testedEntryIndex + (direction === SWITCH_DIRECTION.NEXT ? 1 : -1);\n\n if (direction === SWITCH_DIRECTION.NEXT)\n {\n if (nextOneIndex >= this._entries[thisImageIndex].targets.length)\n nextOneIndex = -1;\n }\n else\n {\n if (nextOneIndex === -2)\n nextOneIndex = this._entries[thisImageIndex].targets.length - 1;\n }\n\n if (nextOneIndex === -1 || triedTimes > this._entries[thisImageIndex].targets.length) {\n // if all entries have been tested, abort.\n this._entries[thisImageIndex].targets.forEach(target => {\n target.isCurrent = false;\n });\n return;\n }\n\n if (!allowIsComplete && this._entries[thisImageIndex].targets[nextOneIndex].isCompleted)\n {\n trySwitch(nextOneIndex, ++triedTimes)\n }\n else\n {\n this._entries[thisImageIndex].targets.forEach(target => {\n target.isCurrent = false;\n });\n\n this._entries[thisImageIndex].targets[nextOneIndex].isCurrent = true;\n }\n }\n\n trySwitch(selectedIndex)\n }\n\n @Mutation\n removeTarget(targetInstanceId: string)\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => {\n entry.targets = entry.targets.filter(target => target.instanceId !== targetInstanceId)\n }\n );\n }\n\n @Mutation\n removeCurrentImageTargets()\n {\n this._entries.filter(entry => entry.isCurrent).map(\n entry => {\n entry.targets = []\n }\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(SegmentedImagesStore.getters, base.getters);\n Object.assign(SegmentedImagesStore.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/SegmentationTargetTypeParamsStore\": 3944,\n\t\"./Spatial2DAnnotation/holder/SegmentedImagesStore\": 2452\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[\"webpackChunksegmentation_annotation_tool\"] = self[\"webpackChunksegmentation_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__(9091); })\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","changeFilenameExtension","newExtension","generateInstanceId","uuid","v4","spaceCamelCase","camelCaseWord","replace","removeExtensionFromFilename","hexToRgb","hex","exec","r","parseInt","g","b","rgbToHex","componentToHex","c","toString","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","args","_defineProperty","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","getUserManualElements","messages","BaseLayout","LeftMenu","PageHeader","page","UserManual","FileHelper","readAsText","fileText","Promise","resolve","reader","FileReader","onload","MediasStoreManagerBuilder","mediaFile","url","URL","createObjectURL","addMedia","createMediaData","SegmentedImageValidatorCenter","SegmentedTargetValidatorCenter","IsNumberBetweenValidator","min","max","SegmentValidatorCenter","top","left","SegmentManager","serve","insertKey","arr","newArray","passedTheThreshold","SegmentedTargetManager","annotationTypeToValidate","segment","segmentKey","rawTarget","toRaw","segments","ValidatedBoundingBox","SegmentedImagesStoreManager","setSegmentsForCurrentTarget","maxInstanceForType","createNew","colorCode","tryAddNew","segmentedTarget","addTargetForCurrent","annotation","manager","concat","defaultSegmentationsParams","SegmentationTargetTypeParamsStoreManagerBuilder","SegmentationTargetTypeParamsStore","defaultSegmentedBodyPartDisplayParams","addTypesFromTargets","targets","map","SegmentationTargetTypeParamsStoreManager","SegmentedImagesStoreManagerBuilder","SegmentedImagesStore","currentSegmentedImage","setCurrentSegmentedImage","currentSegmentedTarget","resetIsCurrentTargetForCurrentSegmentedImage","setFirstUncompletedTargetOfTypeIsCurrent","previousImage","previousSegmentedImage","currentImage","removeCurrentImageTargets","newTarget","isCompleted","isCurrent","nextInsertableSegmentIndex","addTarget","alert","addEmpty","image","addFromFile","json","data","JSON","parse","imageName","targetEntries","targetEntry","finalEntry","annotations","segmentation","caption","Math","random","images","findIndex","id","image_id","pairs","reduce","sourceArray","slice","segmentationCoordinate","width","height","annotatableImageInstanceId","segmentedImage","getCheckedCurrentSegmentedImage","createEmptyTargetForCurrent","makeCurrent","attachEmptyTarget","spatial2DBoundingBoxManager","setCurrentSegmentedTarget","setCurrentSegmentedImageFromImageData","imageData","setSegments","targetId","getCheckedCurrentSegmentedTarget","annotatableImage","getByInstanceId","removeTarget","resetCurrentSegmentedImage","removeSegmentOfInstanceIdFromCurrentTarget","removeSegmentFromCurrentTarget","getByImageInstanceId","imageInstanceId","compatibleImages","annotatableImageData","icon","text","accept","is_multiple","emits","emit","onChange","files","i","multiple","manager_class","manager_mutator","linkToInstanceId","empty_store_before_load","instanceIds","FileSelector","ImagesStoreManagerBuilder","ImagesStoreManager","linkToImageInstanceId","AutoStoringFileSelector","onOnStored","FilesStoreManagerBuilder","FilesStoreManager","linkToCsvInstanceId","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","options","Array","selectedOptionsIds","canOptionsBeDeleted","canAddNewOptions","addNewOptionPlaceholder","optionIdHolder","newOption","onSelect","optionId","onDeleteOption","onAddOption","newOptionCopy","getOptionId","option","tooltip","shortcut","requiresCtrl","_createTextVNode","keyCode","_withDirectives","_vShow","placeholder","_isRef","_vModelText","disabled","defaultSuggestedColors","suggestedColors","switchToNextSuggestedColor","Number","inputShape","suggestedColorIndex","pureColor","gradientColor","onPureColorChange","pickedColor","watch","ColorPicker","shape","getSelectionBodySlotName","currentPickedColor","onColorPicked","color","newOptionValue","SelectionGroup","_createSlots","selectionBody","style","_normalizeStyle","AutoColorPicker","onOnColorPicked","additionalOptionActions","fn","ButtonMargin","buttons","margin","NONE","_useCssVars","onButtonClick","button","isDisabled","additionalClass","segmentedImages","selected","coloredSelectionGroupOptions","hasNotPreviousSegmentedImage","hasPreviousSegmentedImageTargets","onGroupSelectSelection","setIsSelected","isSelected","onGroupSelectAddition","annotationToolsButtons","copyPreviousAnnotations","copyPreviousImageAnnotations","SubMenu","ImagesSelector","JsonSelector","ColoredSelectionGroup","onAddColoredOption","ButtonGroup","AspectRatio","PageContentLayoutSpaceTaken","CarouselShortcutType","overriddenOverlayWidth","overriddenOverlayHeight","overlayWidth","overlayHeight","updateOverlayDimensions","onElementResize","callback","HTMLElement","ResizeObserver","observe","$el","screenshotDomElementToCanvas","domElement","onElementCloned","__awaiter","html2canvas","backgroundColor","onclone","clonedDoc","loadImageAsResource","imageResource","Image","canvasToBlob","canvas","toBlob","blob","slots","useSlots","hasSlot","HTMLImage","recalculateOverlayDimensions","box","getBoundingClientRect","surveyChangesInImageDimensions","FrameOverlay","SPECIAL_SHORTCUT_CODE","ShortcutsManager","code","values","shortcuts","shortcutCode","ctrlKey","ctrlPart","altKey","altPart","shiftKey","shiftPart","window","repeat","checkAndRunShortcuts","LEFT_CLICK","throttledWheel","WHEEL_DOWN","WHEEL_UP","getShortcutCode","requiresAlt","requiresShift","hasRegistered","register","unregister","unregisterAll","selectedImage","selectImage","currentSlideId","controlBar","centerDiv","div","scrollTo","offsetLeft","offsetWidth","behavior","carouselControlBarSlideSelectors","slides","currentSlideKeyArray","slideKey","classList","contains","currentSlideKey","targetSlide","TO_PREVIOUS_SLIDE","TO_NEXT_SLIDE","TO_FIRST_SLIDE","TO_LAST_SLIDE","click","onUnmounted","forceReload","setTimeout","ref_for","onImageSelected","firstImage","carouselImages","OverlayableImage","CarouselControlsBar","onOnImageSelected","ratio","customClass","aspectRatio","PageContentLayoutPositioning","PageContentLayoutSpaceTakenPaddings","ALL","CENTER","FLEX_START","FLEX_END","MODERATELY","freeze","pageContentLayoutPositioning","pageContentLayoutSpaceTaken","flexDirection","alignItems","pagePaddingTop","pagePaddingRight","pagePaddingBottom","pagePaddingLeft","alignments","pageHolder","adjustDimensions","ratioWidth","ratioHeight","getPagePadding","direction","recalculatePagePadding","AspectRatioedElement","vElementSize","PageContent","fromElementId","toElementId","forceRedraw","doElementsExist","from","to","lineSvg","lineIndex","mutationObserver","init","tryDraw","disconnectMutationObserver","Vector2D","x","y","document","getElementById","MutationObserver","attributes","attributeFilter","isLineReset","disconnect","rect","fromRect","toRect","initialPosOfLine","finalPosOfLine","drawToPos","line","initial","move","createElementNS","setAttribute","append","CursorHelperBuilder","_top","_left","_cursorFollower","checkForTrueMouseHover","enterCallback","leaveCallback","cursorHelperEvents","isHovering","splice","event","createElement","position","zIndex","body","updateCoordinates","pageY","pageX","onresize","dispatchEvent","Event","cursorFollower","getComputedStyle","display","elementCoordinates","right","bottom","CursorHelper","dotAnnotation","parentTarget","parentOverlayRef","isFirst","adjustedTop","adjustedLeft","dotAnnotationRef","cursorHelperEventInstanceId","isTrueMouseHovering","watchTrueMouseHover","unwatchTrueMouseHover","dotAnnotations","forceConnectingLineRedraw","undisplayConnectingLinesOfDotAnnotationsIndex","hoveredAnnotations","onDotAnnotationMouseOver","hoveredAnnotation","onDotAnnotationMouseLeave","isConnectingLineDisplayed","DotAnnotation","onOnTrueMouseover","onOnTrueMouseleave","ConnectionLine","SegmentationShortcutType","cursorOnOverlayY","cursorOnOverlayX","spawnableDotAnnotationColor","overlay","currentTarget","segmentationTargetTypeParams","setCurrentSegmentedTargetBasedOnType","isCursorInsideImage","CLEAR_CURRENT_TYPE","DELETE_ANNOTATION_DOT","SWITCH_TO_NEXT_SEGMENT","SWITCH_TO_PREVIOUS_SEGMENT","SWITCH_TO_PREVIOUS_TARGET","SWITCH_TO_NEXT_TARGET","shortcutHolderInstanceIds","registerShortcuts","shortcutHolderInstanceId","clearCurrentType","deleteDotAnnotation","switchToNextSegment","switchToPreviousSegment","switchToNextTarget","switchToPreviousTarget","isImageCurrent","displayAnnotationsHolder","spawnSegment","segmentedTargetManager","isHoveringTheStartSegment","setCurrentTargetIsCompleted","addSegment","offsetHeight","isArray","incrementNextInsertableSegmentIndexForCurrentTarget","firstSegmentInstanceId","hoveredSegments","switchToNextOrPreviousTarget","SWITCH_DIRECTION","NEXT","allowIsComplete","PREVIOUS","switchToNextOrPreviousNextInsertableSegmentIndexForCurrentTarget","spawnableDotAnnotationDisplayParams","spawnableDotAnnotationConnectionLinesParams","nextInsertableSegmentIndexForCurrentTarget","spawnableDotAnnotationName","nextSegmentsAroundNextInsertableSegmentIndexForCurrentTarget","onHoveredAnnotations","DotAnnotations","onOnHoveredAnnotations","surroundingSegment","overlayableImagesCarouselRef","getOverlaySlotName","segmentedImageData","carouselShortcuts","onImageSelectedAfter","AppPage","OverlayableImagesCarousel","onOnImageSelectedAfter","SegmentationOverlay","delay","time","CsvUtilities","strData","strDelimiter","objPattern","RegExp","arrData","arrMatches","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","loadImage","getHeightAndWidthFromImageFile","img","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","zipAndDownload","AbstractCocoDatasetHelper","info","year","Date","getFullYear","version","contributor","description","location","origin","data_created","toISOString","licenses","categories","dataset","dimensions","cocoImage","file_name","date_capture","lastModified","parentCategory","existingCategory","category","supercategory","CocoDatasetHelper","async","cocoDataset","getEmptyDataset","addImage","addCategoryIsNotExists","addAnnotationFromTarget","minLeft","minTop","maxLeft","maxTop","leftPx","topPx","iscrowd","category_id","bbox","AnnotatableImagesDownloadHelper","imageDimensions","usedColors","ctx","fillStyle","fillRect","usedColorIndex","usedColor","rgb","timesUsed","save","beginPath","segmentX","segmentY","moveTo","lineTo","closePath","clip","nextRgbNumber","current","timesCalled","restore","annotatedCowImagesData","annotated","annotatedImages","prepareAnnotatedImages","downloadResources","mainDownloadableResources","getAnnotatableImageDataBlobs","annotatedImage","mainDownloadableResource","jsonFilename","segmentedImageToCocoDataset","annotatableImagesData","imagesInstanceIds","instanceIdedBlobFiles","previousPromise","carouselImage","container","prototype","call","getElementsByClassName","className","remove","createMaskBlob","segmentation2DPageRef","isImagesEmpty","bottomDownloadButtons","onBottomDownload","buttonId","onDownloadJsonData","downloadAllAnnotatedImagesData","PageFooter","EXTRA_WIDE","AppLayout","Segmentation2DLeftMenu","Segmentation2DPage","Segmentation2DFooter","routes","path","component","Segmentation2DView","router","createRouter","history","createWebHistory","_component_router_view","app","createApp","App","use","Vue3ColorPicker","Vue3DraggableResizable","mount","SegmentationTargetTypeParamsStore_1","byBodyPart","bodyPart","setIsSelectedBasedOnValue","resetSelected","switchToNextSelected","selectedIndex","nextOneIndex","switchToPreviousSelected","SegmentedImagesStore_1","previousSegmentedImageIndex","currentTargets","setTargetIsCurrent","targetInstanceId","unCurrent","targetType","nextSegmentsAround","setNextInsertableSegmentIndexForCurrentTarget","thisImageIndex","thisTargetIndex","testedEntryIndex","segmentInstanceId","removeSegmentFromTarget","targetByInstanceId","segmentedImageInstanceId","setSegmentsForTarget","trySwitch","triedTimes","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","n","__esModule","d","definition","enumerable","get","globalThis","Function","obj","prop","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","p","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}