@anzusystems/common-admin 1.40.0-alpha13 → 1.40.0-alpha16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common-admin.es.d.ts +35 -10
- package/dist/common-admin.es.js +1 -1
- package/dist/{lib-kOdj6XwH.js → lib-FCyWNSIh.js} +8884 -8812
- package/dist/lib-FCyWNSIh.js.map +1 -0
- package/dist/{shortcut-buttons-flatpickr-069FUbrc.js → shortcut-buttons-flatpickr-BlFE8JiL.js} +2 -2
- package/dist/{shortcut-buttons-flatpickr-069FUbrc.js.map → shortcut-buttons-flatpickr-BlFE8JiL.js.map} +1 -1
- package/dist/{webfontloader-KSx0bHnU.js → webfontloader-oQ6ox9Rp.js} +2 -2
- package/dist/{webfontloader-KSx0bHnU.js.map → webfontloader-oQ6ox9Rp.js.map} +1 -1
- package/package.json +5 -5
- package/dist/lib-kOdj6XwH.js.map +0 -1
package/dist/lib-kOdj6XwH.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lib-kOdj6XwH.js","sources":["../src/components/ABooleanValue.vue","../src/components/ACard.vue","../src/utils/common.ts","../src/utils/string.ts","../src/components/injectionKeys.ts","../src/components/form/AFormTextField.vue","../src/components/form/AFormTextarea.vue","../src/components/form/ASystemEntityScope.vue","../src/components/ADatatablePagination.vue","../src/components/ADatatableConfigButton.vue","../src/components/ADatatableOrdering.vue","../src/components/ADialogToolbar.vue","../src/components/ALogData.vue","../node_modules/@kyvg/vue3-notification/dist/index.es.js","../src/plugins/i18n.ts","../src/model/error/AnzuFatalError.ts","../src/composables/statusCodes.ts","../src/model/error/AnzuApiForbiddenError.ts","../src/model/error/AnzuApiValidationError.ts","../src/model/error/AnzuApiResponseCodeError.ts","../src/model/error/AnzuApiForbiddenOperationError.ts","../src/composables/system/alerts.ts","../src/components/ACreateDialog.vue","../src/components/AAdminSwitcher.vue","../node_modules/dayjs/dayjs.min.js","../node_modules/dayjs/plugin/utc.js","../src/utils/datetime.ts","../src/components/ATimeTrackingFields.vue","../src/composables/filter/filterHelpers.ts","../src/components/filter/AFilterString.vue","../src/components/filter/AFilterMixed.vue","../src/components/filter/AFilterInteger.vue","../src/utils/event.ts","../src/components/buttons/filter/AFilterAdvancedButton.vue","../src/components/buttons/filter/AFilterSubmitButton.vue","../src/components/buttons/filter/AFilterResetButton.vue","../src/components/filter/AFilterWrapper.vue","../src/model/valueObject/Grant.ts","../src/components/permission/APermissionGrantEditor.vue","../src/model/valueObject/GrantOrigin.ts","../src/components/permission/APermissionValueChip.vue","../src/utils/object.ts","../src/types/OwnerAware.ts","../src/types/CreatedByAware.ts","../src/composables/system/ability.ts","../src/components/permission/Acl.vue","../src/components/ADatetime.vue","../node_modules/flatpickr/dist/esm/types/options.js","../node_modules/flatpickr/dist/esm/l10n/default.js","../node_modules/flatpickr/dist/esm/utils/index.js","../node_modules/flatpickr/dist/esm/utils/dom.js","../node_modules/flatpickr/dist/esm/utils/formatting.js","../node_modules/flatpickr/dist/esm/utils/dates.js","../node_modules/flatpickr/dist/esm/utils/polyfills.js","../node_modules/flatpickr/dist/esm/index.js","../node_modules/vue-flatpickr-component/dist/esm/events.js","../node_modules/vue-flatpickr-component/dist/esm/util.js","../node_modules/vue-flatpickr-component/dist/esm/component.js","../node_modules/flatpickr/dist/l10n/sk.js","../node_modules/flatpickr/dist/l10n/cs.js","../node_modules/flatpickr/dist/l10n/default.js","../src/validators/vuelidate/common/useValidateRequiredIf.ts","../src/composables/languageSettings.ts","../src/components/ADatetimePicker.vue","../src/components/form/AFormDatetimePicker.vue","../src/components/form/AFormFlagDatetimePicker.vue","../src/components/filter/AFilterDatetimePicker.vue","../src/composables/system/pagination.ts","../src/components/form/AFormRemoteAutocomplete.vue","../src/components/form/AFormRemoteCheckbox.vue","../src/components/form/AFormRemoteSwitch.vue","../src/components/form/AFormValueObjectOptionsSelect.vue","../src/components/filter/AFilterValueObjectOptionsSelect.vue","../src/components/filter/AFilterRemoteAutocomplete.vue","../src/components/filter/AFilterBooleanGroup.vue","../src/components/filter/AFilterBooleanSelect.vue","../src/model/valueObject/JobStatus.ts","../src/components/job/AJobStatusChip.vue","../src/model/commonConfig.ts","../src/components/ACachedChip.vue","../src/model/valueObject/LogLevel.ts","../src/components/log/ALogLevelChip.vue","../src/utils/number.ts","../src/components/ACopyText.vue","../src/components/AChipNoLink.vue","../src/components/AUserAndTimeTrackingFields.vue","../src/components/buttons/action/AActionCloseButton.vue","../src/components/buttons/action/AActionCreateButton.vue","../src/components/buttons/action/AActionDeleteButton.vue","../src/components/buttons/action/AActionEditButton.vue","../src/components/buttons/action/AActionSaveAndCloseButton.vue","../src/components/buttons/action/AActionSaveButton.vue","../src/components/buttons/table/ATableCopyIdButton.vue","../src/components/buttons/table/ATableDetailButton.vue","../src/components/buttons/table/ATableEditButton.vue","../src/components/buttons/ABtnSplit.vue","../src/composables/themeSettings.ts","../src/components/AThemeSelect.vue","../src/components/flags/FlagEn.vue","../src/components/flags/FlagEmpty.vue","../src/components/flags/FlagCountry.vue","../src/components/ALanguageSelect.vue","../src/components/systemBar/ASystemBarNewVersion.vue","../src/model/error/AnzuNewVersionFetchError.ts","../src/components/systemBar/ASystemBar.vue","../src/components/AAnzuUserAvatar.vue","../src/components/AAvatarColorPicker.vue","../src/components/ACurrentUserDropdown.vue","../src/components/form/AFormRemoteAutocompleteWithCached.vue","../src/components/view/ALoginView.vue","../src/components/view/ALogoutView.vue","../src/components/view/AUnauthorizedView.vue","../src/components/view/ANotFoundView.vue","../src/components/job/AJobDetailCommon.vue","../src/types/coreDam/Asset.ts","../src/model/coreDam/filter/AssetFilter.ts","../src/types/coreDam/AssetSelect.ts","../src/services/stores/coreDam/assetSelectStore.ts","../src/components/dam/assetSelect/composables/commonAdminCoreDamOptions.ts","../src/services/api/apiHelper.ts","../src/utils/response.ts","../src/services/api/apiFetchOne.ts","../src/services/api/queryBuilder.ts","../src/types/ApiResponse.ts","../src/services/api/apiFetchList.ts","../src/types/coreDam/DamConfig.ts","../src/components/damImage/uploadQueue/composables/damConfigApi.ts","../src/components/damImage/uploadQueue/composables/damAssetCustomFormApi.ts","../src/components/damImage/uploadQueue/composables/damConfigState.ts","../src/components/damImage/uploadQueue/api/damAssetApi.ts","../src/components/dam/assetSelect/composables/assetSelectListActions.ts","../src/components/dam/assetSelect/composables/assetSelectItemActions.ts","../src/assets/image/placeholder16x9.jpg","../src/components/dam/assetSelect/components/AssetImagePreview.vue","../src/utils/file.ts","../src/components/dam/assetSelect/components/AssetSelectTableRowItem.vue","../src/components/dam/assetSelect/components/AssetSelectListTable.vue","../src/components/dam/assetSelect/composables/assetSelectGridView.ts","../src/components/dam/assetSelect/composables/assetSelectFilterSidebar.ts","../src/components/dam/assetSelect/components/AssetSelectListBar.vue","../src/components/dam/assetSelect/components/AssetSelectTilesItem.vue","../src/components/dam/assetSelect/components/AssetSelectListTiles.vue","../src/components/dam/assetSelect/components/filter/AssetSelectFilterFormImage.vue","../src/components/dam/assetSelect/components/filter/AssetSelectFilterFormDefault.vue","../src/components/dam/assetSelect/components/filter/AssetSelectFilter.vue","../src/components/dam/assetSelect/AAssetSelect.vue","../node_modules/sortablejs/modular/sortable.esm.js","../node_modules/@vueuse/integrations/useSortable.mjs","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/v1.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../src/utils/generator.ts","../src/components/sortable/sortableActions.ts","../src/components/sortable/sortableUtils.ts","../src/components/sortable/ASortable.vue","../src/components/sortable/sortableNestedActions.ts","../src/components/sortable/ASortableNestedItem.vue","../src/components/sortable/ASortableNested.vue","../src/components/subjectSelect/ASubjectSelect.vue","../src/components/customDataForm/useCustomDataForm.ts","../src/components/customDataForm/CustomDataFormElementTypes.ts","../src/validators/vuelidate/common/useValidateBetween.ts","../src/validators/vuelidate/common/useValidateEmail.ts","../src/validators/vuelidate/common/useValidateMaxLength.ts","../src/validators/vuelidate/common/useValidateMaxValue.ts","../src/validators/vuelidate/common/useValidateMinLength.ts","../src/validators/vuelidate/common/useValidateMinValue.ts","../src/validators/vuelidate/common/useValidateNumeric.ts","../src/validators/vuelidate/common/useValidateRequired.ts","../src/validators/vuelidate/common/useValidateSlug.ts","../src/validators/vuelidate/common/useValidateStringArrayItemLength.ts","../src/validators/vuelidate/common/useValidateUrl.ts","../src/validators/vuelidate/useValidate.ts","../src/components/customDataForm/ACustomDataFormElement.vue","../src/components/customDataForm/ACustomDataForm.vue","../src/components/file/composables/dropzone.ts","../src/components/file/composables/fileType.ts","../src/components/file/composables/formatAndSizeCheck.ts","../src/components/file/AFileDropzone.vue","../src/components/damImage/composables/commonAdminImageOptions.ts","../src/components/damImage/composables/imageActions.ts","../src/components/damImage/uploadQueue/composables/acceptTypeAndSizeHelper.ts","../src/types/coreDam/UploadQueue.ts","../src/types/coreDam/AssetFile.ts","../src/components/damImage/uploadQueue/composables/UploadQueueItemFactory.ts","../src/components/damImage/uploadQueue/composables/mimeTypeHelper.ts","../src/components/damImage/uploadQueue/composables/damUploadChunkSize.ts","../src/components/damImage/uploadQueue/api/damImageApi.ts","../src/components/damImage/uploadQueue/api/uploadApi.ts","../node_modules/rusha/dist/rusha.js","../src/components/damImage/uploadQueue/composables/uploadService.ts","../src/components/damImage/uploadQueue/composables/damNotificationsEventBus.ts","../src/components/damImage/uploadQueue/composables/damNotifications.ts","../src/components/damImage/uploadQueue/composables/assetSuggestions.ts","../src/composables/system/defineCached.ts","../src/services/api/apiFetchByIds.ts","../src/services/api/apiCreateOne.ts","../src/components/damImage/uploadQueue/api/keywordApi.ts","../src/components/damImage/uploadQueue/keyword/cachedKeywords.ts","../src/components/damImage/uploadQueue/api/authorApi.ts","../src/components/damImage/uploadQueue/author/cachedAuthors.ts","../src/components/damImage/uploadQueue/composables/uploadQueuesStore.ts","../src/components/file/AFileInput.vue","../src/components/damImage/composables/imageWidgetInkectionKeys.ts","../src/services/api/apiUpdateOne.ts","../src/services/api/apiDeleteOne.ts","../src/components/damImage/uploadQueue/api/imageApi.ts","../src/components/damImage/AImageWidgetSimple.vue","../src/components/damImage/uploadQueue/composables/imageStore.ts","../src/components/damImage/uploadQueue/composables/uploadValidations.ts","../src/components/damImage/uploadQueue/components/ImageDetailDialogMetadata.vue","../src/components/damImage/uploadQueue/composables/assetDetailStore.ts","../src/components/damImage/uploadQueue/components/AssetDetailDialogLoader.vue","../src/composables/datetime/remainingTime.ts","../src/assets/dam-meta-icons/2k.svg","../src/assets/dam-meta-icons/4k.svg","../src/assets/dam-meta-icons/8k.svg","../src/assets/dam-meta-icons/qhd.svg","../src/assets/dam-meta-icons/fhd.svg","../src/assets/dam-meta-icons/slot.svg","../src/assets/dam-meta-icons/low.svg","../src/assets/dam-meta-icons/rss.svg","../src/components/damImage/uploadQueue/composables/assetImageIconsConfig.ts","../src/components/damImage/uploadQueue/components/AssetImageMetaIcons.vue","../src/components/damImage/uploadQueue/components/AssetImage.vue","../src/components/damImage/uploadQueue/composables/assetFileFailReason.ts","../src/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue","../src/components/damImage/uploadQueue/components/AssetInfobox.vue","../src/components/damImage/uploadQueue/composables/assetDetailSidebarActionbar.ts","../src/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue","../src/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue","../src/components/dam/AColorBox.vue","../src/components/damImage/uploadQueue/components/AssetMetadataImageAttributes.vue","../src/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChip.vue","../src/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue","../src/components/damImage/uploadQueue/author/authorActions.ts","../src/components/damImage/uploadQueue/author/AuthorFilter.ts","../src/components/damImage/uploadQueue/author/DamAuthorType.ts","../src/components/damImage/uploadQueue/author/authorValidation.ts","../src/components/damImage/uploadQueue/author/AuthorFactory.ts","../src/components/damImage/uploadQueue/author/AuthorCreateButton.vue","../src/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue","../src/components/damImage/uploadQueue/keyword/keywordActions.ts","../src/components/damImage/uploadQueue/keyword/KeywordFilter.ts","../src/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteCachedKeywordChip.vue","../src/components/damImage/uploadQueue/keyword/KeywordFactory.ts","../src/components/damImage/uploadQueue/keyword/keywordValidation.ts","../src/components/damImage/uploadQueue/keyword/KeywordCreateButton.vue","../src/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue","../src/components/damImage/uploadQueue/components/AssetMetadata.vue","../src/components/damImage/uploadQueue/components/AssetDetailSidebarMetadata.vue","../src/components/damImage/uploadQueue/composables/imageRoiStore.ts","../src/components/damImage/uploadQueue/components/AssetFileRotate.vue","../src/components/damImage/uploadQueue/api/damImageRoiApi.ts","../src/components/damImage/uploadQueue/components/AssetDetailSidebarROI.vue","../src/components/damImage/uploadQueue/components/AssetDetailSidebarActionsTeleportTarget.vue","../src/components/damImage/uploadQueue/components/AssetDetailDialogSidebar.vue","../src/components/damImage/uploadQueue/composables/cropperJsService.ts","../node_modules/cropperjs/dist/cropper.esm.js","../src/components/ACropperjs.vue","../src/components/damImage/uploadQueue/components/AssetImageRoiSelect.vue","../src/components/damImage/uploadQueue/components/AssetDetailDialog.vue","../src/components/damImage/uploadQueue/composables/uploadQueueDialog.ts","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebar.vue","../src/components/damImage/uploadQueue/components/UploadQueueButtonStop.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingle.vue","../src/components/damImage/uploadQueue/components/ImageWidgetInner.vue","../src/components/damImage/AImageWidget.vue","../src/components/damImage/uploadQueue/components/ImageWidgetMultipleItem.vue","../src/components/damImage/uploadQueue/components/UploadQueueItemEditable.vue","../src/components/damImage/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue","../src/components/damImage/uploadQueue/composables/uploadQueueMassOperations.ts","../src/components/damImage/uploadQueue/components/AssetQueueSelectedSidebar.vue","../src/components/damImage/uploadQueue/components/UploadQueueEditable.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialog.vue","../src/components/damImage/uploadQueue/components/ImageWidgetMultipleInner.vue","../src/components/damImage/AImageWidgetMultiple.vue","../src/components/damImage/AImageWidgetMultipleSimple.vue","../src/composables/system/datatableColumns.ts","../src/components/subjectSelect/useSubjectSelect.ts","../src/components/subjectSelect/selectStrategies.ts","../src/utils/boolean.ts","../src/model/factory/AnzuUserFactory.ts","../src/model/factory/PermissionConfigFactory.ts","../src/model/factory/PermissionGroupFactory.ts","../src/services/api/apiAnyRequest.ts","../src/services/api/apiFetchListBatch.ts","../src/composables/system/error.ts","../src/services/api/job/jobApi.ts","../src/model/valueObject/JobBaseResource.ts","../src/AnzuSystemsCommonAdmin.ts","../src/utils/array.ts","../src/utils/history.ts","../src/locales/cs.ts","../src/locales/en.ts","../src/locales/sk.ts","../src/model/commonVuetifyConfig.ts","../src/plugins/webfontloader.ts","../src/model/factory/JobFactory.ts","../src/composables/system/loginStatus.ts"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n value: number | string | boolean\n chip?: boolean\n invertColor?: boolean\n }>(),\n {\n chip: false,\n invertColor: false,\n }\n)\n\nconst { t } = useI18n()\n\nconst booleanValue = computed(() => {\n return props.value === true || props.value === 1 || props.value === 'true'\n})\n\nconst text = computed(() => {\n if (booleanValue.value) {\n return t('common.model.boolean.true')\n }\n return t('common.model.boolean.false')\n})\n\nconst color = computed(() => {\n if (props.invertColor) {\n return booleanValue.value ? 'error' : 'success'\n }\n return booleanValue.value ? 'success' : 'error'\n})\n</script>\n\n<template>\n <VChip\n v-if=\"chip\"\n :color=\"color\"\n label\n size=\"small\"\n >\n {{ text }}\n </VChip>\n <span v-else>{{ text }}</span>\n</template>\n","<script lang=\"ts\" setup>\nimport ACardLoader from '@/components/ACardLoader.vue'\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n loading?: boolean\n title?: string\n }>(),\n {\n loading: undefined,\n title: undefined,\n }\n)\n\nconst loadingComputed = computed(() => {\n return props.loading ? 'primary' : false\n})\n</script>\n\n<template>\n <VCard\n :title=\"title\"\n variant=\"flat\"\n :loading=\"loadingComputed\"\n >\n <ACardLoader :loading=\"loading\" />\n <slot />\n </VCard>\n</template>\n","import type { DocId } from '@/types/common'\nimport { isProxy, isRef, toRaw, unref } from 'vue'\n\nexport const isUndefined = (value: unknown): value is undefined => {\n return typeof value === 'undefined'\n}\n\nexport const isDefined = <T>(value: T | undefined): value is T => {\n return !isUndefined(value)\n}\n\nexport const isNull = (value: unknown): value is null => {\n return value === null\n}\n\nexport const isNumber = (value: unknown): value is number => {\n return typeof value === 'number'\n}\n\nexport const isString = (value: unknown): value is string => {\n return typeof value === 'string'\n}\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const isArray = <T = unknown>(value: unknown): value is Array<T> => {\n return Array.isArray(value)\n}\n\nexport const isFunction = <T extends (...args: any[]) => any>(value: unknown): value is T => {\n return typeof value === 'function'\n}\n\nexport const isBoolean = (value: unknown): value is boolean => {\n return typeof value === 'boolean'\n}\n\nexport const isDocId = (value: unknown): value is DocId => {\n return isString(value) && /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(value)\n}\n\nexport const isInt = (value: any): value is number => {\n const x = parseFloat(value)\n\n return !isNaN(value) && (x | 0) === x\n}\n\nexport const isObject = (value: unknown): value is object => {\n return typeof value === 'object' && !isArray(value) && !isNull(value)\n}\n\nexport const isEmptyObject = <T>(value: T): value is T => {\n if (isObject(value)) {\n return Object.keys(value).length === 0\n }\n return false\n}\n\nexport const isEmptyArray = (value: unknown): value is [] => {\n return isArray(value) && value.length === 0\n}\n\nexport const isEmpty = (value: unknown): boolean => {\n return (\n isNull(value) || isUndefined(value) || value === '' || value === 0 || isEmptyArray(value) || isEmptyObject(value)\n )\n}\n/**\n * Use only for objects with some primitives like:\n * number, string, boolean, null. Not supported: function, undefined, symbol, ...\n */\nexport const cloneDeep = <T>(object: T) => {\n if (typeof structuredClone === 'function') {\n try {\n if (isProxy(object)) {\n return structuredClone(toRaw(object)) as T\n }\n if (isRef(object)) {\n return structuredClone(unref(object)) as T\n }\n return structuredClone(object) as T\n } catch (error) {\n return JSON.parse(JSON.stringify(object)) as T\n }\n }\n return JSON.parse(JSON.stringify(object)) as T\n}\n","import type { UrlParams } from '@/services/api/apiHelper'\nimport { isNull, isUndefined } from '@/utils/common'\n\nexport const stringToInt = (value: any, fallbackValue = 0): number => {\n let check = fallbackValue\n try {\n check = Number.parseInt(value, 10)\n } catch {\n return fallbackValue\n }\n\n if (Number.isNaN(check)) {\n return fallbackValue\n }\n\n return check\n}\n\nexport const stringToFloat = (value: any, fallbackValue = 0): number => {\n let check = fallbackValue\n try {\n check = Number.parseFloat(value)\n } catch {\n return fallbackValue\n }\n\n if (Number.isNaN(check)) {\n return fallbackValue\n }\n\n return check\n}\n\nexport const stringSplitOnFirstOccurrence = (value: string, delimiter = '') => {\n const index = value.indexOf(delimiter)\n\n return {\n start: value.slice(0, index),\n end: value.slice(index + delimiter.length),\n }\n}\n\nexport const stringToSlug = (value: string) => {\n return value\n .toString()\n .toLowerCase()\n .trim()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/&/g, '-')\n .replace(/[^\\w-]+/g, '')\n .replace(/--+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '')\n}\n\ntype Kebab<T extends string, A extends string = ''> = T extends `${infer F}${infer R}`\n ? Kebab<R, `${A}${F extends Lowercase<F> ? '' : '-'}${Lowercase<F>}`>\n : A\n\nexport const stringToKebabCase = <T extends string>(value: T): Kebab<T> =>\n value.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase() as Kebab<T>\n\nexport const stringTrimLength = (value: string, maxLength = 80): string => {\n if (value.length > maxLength) {\n return value.substring(1, maxLength) + '...'\n }\n\n return value\n}\n\n/**\n * Converts colon parameters to real values from params.\n *\n * @param template url containing colon parameters, example: '/:id/edit'\n * @param params object containing real values to be replaced, example: { id:5 }\n */\nexport const stringUrlTemplateReplace = (template: string, params: UrlParams) => {\n if (template.indexOf(':') === -1) return template\n const newParts: string[] = []\n const parts = template.split('/')\n parts.forEach((part, index) => {\n newParts[index] = part\n if (!part.startsWith(':')) return\n const key = part.substring(1)\n if (!isUndefined(params[key])) newParts[index] = params[part.substring(1)] + ''\n })\n return newParts.join('/')\n}\n\n/**\n * Converts colon parameters to real values from params. Same as above but it additionally supports vue router regexp.\n *\n * @param template url containing colon parameters, example: '/:id(\\\\d+)/edit'\n * @param params object containing real values to be replaced, example: { id:5 }\n */\nexport const stringUrlTemplateReplaceVueRouter = (template: string, params: UrlParams) => {\n if (template.indexOf(':') === -1) return template\n const newParts: string[] = []\n const parts = template.split('/')\n parts.forEach((part: string, index: number) => {\n newParts[index] = part\n if (!part.startsWith(':')) return\n newParts[index] = part.substring(1)\n const regex = /^:([a-zA-Z0-9_-]+).*/\n const match = part.match(regex)\n if (isNull(match) || !match[1]) return\n if (!isUndefined(params[match[1]])) newParts[index] = params[match[1]] + ''\n })\n return newParts.join('/')\n}\n\n/**\n * Slot names with dots are not valid, Vue takes dots as modifiers, so we must replace dots with dash.\n */\nexport const stringNormalizeForSlotName = (name: string) => name.replace('.', '-')\n\nexport const stringIsValidEmail = (email: string): boolean => {\n const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,63}$/\n return emailRegex.test(email)\n}\n","import type { InjectionKey } from 'vue'\nimport type { CurrentUserType, CustomAclResolver } from '@/AnzuSystemsCommonAdmin'\nimport type { LanguageCode } from '@/composables/languageSettings'\n\nexport const SystemScopeSymbol: InjectionKey<string | undefined> = Symbol.for('anzu:SystemScope')\nexport const SubjectScopeSymbol: InjectionKey<string | undefined> = Symbol.for('anzu:SubjectScope')\nexport const CurrentUserSymbol: InjectionKey<CurrentUserType | undefined> = Symbol.for('anzu:CurrentUser')\nexport const CustomAclResolverSymbol: InjectionKey<CustomAclResolver | undefined> = Symbol.for('anzu:CustomAclResolver')\nexport const AvailableLanguagesSymbol: InjectionKey<LanguageCode[] | undefined> = Symbol.for('anzu:AvailableLanguages')\nexport const DefaultLanguageSymbol: InjectionKey<LanguageCode | undefined> = Symbol.for('anzu:DefaultLanguage')\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport { isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport type { VuetifyIconValue } from '@/types/Vuetify'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string | number | null | undefined\n label?: string\n errorMessage?: string\n required?: boolean\n v?: any\n prependIcon?: VuetifyIconValue\n appendIcon?: VuetifyIconValue\n dataCy?: string\n hideLabel?: boolean\n type?: string\n step?: number\n maxlength?: number | undefined\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n prependIcon: undefined,\n appendIcon: undefined,\n dataCy: undefined,\n hideLabel: false,\n type: 'text',\n step: undefined,\n maxlength: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: string | number | null | undefined): void\n (e: 'click:append', data: string | number | null | undefined): void\n (e: 'blur', data: string | number | null | undefined): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst onUpdate = (newValue: string) => {\n emit('update:modelValue', newValue)\n}\nconst onBlur = () => {\n emit('blur', props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return [props.v.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n</script>\n\n<template>\n <VTextField\n :prepend-icon=\"prependIcon\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :model-value=\"modelValue\"\n :required=\"requiredComputed\"\n :type=\"type\"\n :step=\"step\"\n :append-icon=\"appendIcon\"\n :maxlength=\"maxlength\"\n trim\n @click:append=\"(event: any) => emit('click:append', event)\"\n @blur=\"onBlur\"\n @update:model-value=\"onUpdate($event)\"\n >\n <template\n v-if=\"!hideLabel\"\n #label\n >\n {{ labelComputed\n }}<span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </template>\n </VTextField>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport { isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport type { VuetifyIconValue } from '@/types/Vuetify'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string | null // todo check number and null\n label?: string\n errorMessage?: string\n required?: boolean\n v?: any\n prependIcon?: VuetifyIconValue\n appendIcon?: VuetifyIconValue\n dataCy?: string\n hideLabel?: boolean\n rows?: number\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n prependIcon: undefined,\n appendIcon: undefined,\n dataCy: undefined,\n hideLabel: false,\n rows: 1,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: string | null): void\n (e: 'click:append', data: string | null): void\n (e: 'blur', data: string | null): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst onUpdate = (newValue: string) => {\n emit('update:modelValue', newValue)\n}\nconst onBlur = () => {\n emit('blur', props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return [props.v.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n</script>\n\n<template>\n <VTextarea\n :prepend-icon=\"prependIcon\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :model-value=\"modelValue\"\n :required=\"requiredComputed\"\n :rows=\"rows\"\n auto-grow\n :append-icon=\"appendIcon\"\n trim\n @click:append=\"(event: any) => emit('click:append', event)\"\n @blur=\"onBlur\"\n @update:model-value=\"onUpdate($event)\"\n >\n <template\n v-if=\"!hideLabel\"\n #label\n >\n {{ labelComputed\n }}<span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </template>\n </VTextarea>\n</template>\n","<script lang=\"ts\" setup>\nimport { provide } from 'vue'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n system: string\n subject: string\n }>(),\n {}\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nprovide<string>(SystemScopeSymbol, props.system)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nprovide<string>(SubjectScopeSymbol, props.subject)\n</script>\n\n<template>\n <slot />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, watch } from 'vue'\nimport { cloneDeep, isNull } from '@/utils/common'\nimport type { Pagination } from '@/types/Pagination'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Pagination\n itemsPerPageOptions?: number[]\n hideRecordsPerPage?: boolean\n }>(),\n {\n itemsPerPageOptions: () => [10, 25, 50],\n hideRecordsPerPage: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n (e: 'update:modelValue', data: Pagination): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: Pagination) {\n emit('update:modelValue', cloneDeep(newValue))\n },\n})\n\nconst { t } = useI18n()\n\nconst lastPage = computed(() => {\n return Math.ceil(modelValueComputed.value.totalCount / modelValueComputed.value.rowsPerPage)\n})\n\nconst displayedFrom = computed(() => {\n return modelValueComputed.value.page * modelValueComputed.value.rowsPerPage - modelValueComputed.value.rowsPerPage + 1\n})\n\nconst displayedTo = computed(() => {\n return (\n modelValueComputed.value.page * modelValueComputed.value.rowsPerPage -\n modelValueComputed.value.rowsPerPage +\n modelValueComputed.value.currentViewCount\n )\n})\n\nconst disabledFirstAndPrev = computed(() => {\n return modelValueComputed.value.page === 1\n})\n\nconst disabledLast = computed(() => {\n return !isNull(modelValueComputed.value.hasNextPage) || modelValueComputed.value.page === lastPage.value\n})\n\nconst disabledNext = computed(() => {\n return (\n (isNull(modelValueComputed.value.hasNextPage) && modelValueComputed.value.page === lastPage.value) ||\n modelValueComputed.value.hasNextPage === false\n )\n})\n\nconst computedTotalCountText = computed(() => {\n if (!isNull(modelValueComputed.value.hasNextPage)) {\n return modelValueComputed.value.hasNextPage ? displayedTo.value + 1 + '+' : displayedTo.value\n }\n return modelValueComputed.value.totalCount\n})\n\nconst rowsPerPageComputed = computed(() => {\n return modelValueComputed.value.rowsPerPage\n})\nwatch(rowsPerPageComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n modelValueComputed.value.page = 1\n emit('change')\n }\n})\nconst pageComputed = computed(() => {\n return modelValueComputed.value.page\n})\nwatch(pageComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n emit('change')\n }\n})\n\nconst onClickFirst = () => {\n modelValueComputed.value.page = 1\n}\n\nconst onClickLast = () => {\n modelValueComputed.value.page = lastPage.value\n}\n\nconst onClickPrev = () => {\n modelValueComputed.value.page = modelValueComputed.value.page - 1\n}\n\nconst onClickNext = () => {\n modelValueComputed.value.page = modelValueComputed.value.page + 1\n}\n</script>\n\n<template>\n <div class=\"anzu-data-footer\">\n <div\n v-if=\"!hideRecordsPerPage\"\n class=\"anzu-data-footer__page-limit\"\n >\n {{ t('common.system.datatable.itemsPerPage') }}:\n <VBtnToggle\n v-model=\"modelValueComputed.rowsPerPage\"\n class=\"ml-2\"\n density=\"compact\"\n mandatory\n data-cy=\"table-size\"\n >\n <VBtn\n v-for=\"item in itemsPerPageOptions\"\n :key=\"item\"\n :color=\"item === modelValueComputed.rowsPerPage ? 'secondary' : ''\"\n :value=\"item\"\n density=\"compact\"\n size=\"small\"\n variant=\"text\"\n >\n {{ item }}\n </VBtn>\n </VBtnToggle>\n </div>\n <div class=\"anzu-data-footer__pagination\">\n {{ displayedFrom }} - {{ displayedTo }} {{ t('common.system.datatable.from') }} {{ computedTotalCountText }}\n </div>\n <div class=\"anzu-data-footer__icons-before\">\n <VBtn\n :disabled=\"disabledFirstAndPrev\"\n icon=\"mdi-page-first\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickFirst\"\n />\n <VBtn\n :disabled=\"disabledFirstAndPrev\"\n icon=\"mdi-chevron-left\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickPrev\"\n />\n </div>\n <div class=\"current-page\">\n <span>{{ modelValueComputed.page }}</span>\n </div>\n <div class=\"anzu-data-footer__icons-after\">\n <VBtn\n :disabled=\"disabledNext\"\n icon=\"mdi-chevron-right\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickNext\"\n />\n <VBtn\n :disabled=\"disabledLast\"\n icon=\"mdi-page-last\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickLast\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.anzu-data-footer {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n font-size: 0.75rem;\n padding: 0 8px;\n\n > div.current-page {\n padding-left: 10px;\n padding-right: 10px;\n user-select: none;\n min-width: 40px;\n display: flex;\n text-align: center;\n align-items: center;\n justify-content: center;\n }\n\n &__page-limit {\n display: flex;\n align-items: center;\n flex: 0 0 0;\n justify-content: flex-end;\n white-space: nowrap;\n margin-right: 14px;\n }\n\n &__pagination {\n display: block;\n text-align: center;\n margin: 0 32px 0 24px;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport type { ColumnInternalValues } from '@/composables/system/datatableColumns'\nimport { cloneDeep } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n columnsAll: ColumnInternalValues[]\n columnsHidden: Array<string>\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n buttonT: 'common.system.datatable.config',\n buttonClass: 'ml-1',\n dataCy: 'table-settings',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:columnsHidden', data: Array<string>): void\n}>()\n\nconst { t } = useI18n()\n\nconst isVisible = (key: string) => {\n return !props.columnsHidden.includes(key)\n}\n\nconst toggleVisibility = (key: string) => {\n const cloned = cloneDeep(props.columnsHidden)\n const index = cloned.indexOf(key)\n if (index > -1) {\n cloned.splice(index, 1)\n emit('update:columnsHidden', cloned)\n return\n }\n cloned.push(key)\n emit('update:columnsHidden', cloned)\n}\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n color=\"light\"\n icon\n size=\"x-small\"\n variant=\"text\"\n >\n <VIcon icon=\"mdi-cog\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n <VMenu activator=\"parent\">\n <VCard>\n <VList density=\"compact\">\n <VListItem>\n <VListItemTitle>\n <strong>{{ t('common.system.datatable.displayCols') }}</strong>\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-for=\"column in columnsAll\"\n :key=\"column.key\"\n @click.stop=\"toggleVisibility(column.key)\"\n >\n <VListItemTitle>\n <VIcon\n v-if=\"isVisible(column.key)\"\n class=\"mr-2\"\n icon=\"mdi-checkbox-marked\"\n />\n <VIcon\n v-else\n class=\"mr-2\"\n icon=\"mdi-checkbox-blank-outline\"\n />\n {{ column.title }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DatatableOrderingOption, DatatableOrderingOptions } from '@/composables/system/datatableColumns'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n variant?: 'default' | 'most-relevant'\n modelValue?: number\n customOptions?: undefined | DatatableOrderingOptions\n }>(),\n {\n variant: 'default',\n modelValue: 1,\n customOptions: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: number): void\n (e: 'sortByChange', data: DatatableOrderingOption): void\n}>()\n\nconst { t } = useI18n()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst active = ref(props.modelValue)\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: number) {\n active.value = newValue\n emit('update:modelValue', newValue)\n },\n})\n\nconst defaultItems: DatatableOrderingOptions = [\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'createdAt', order: 'desc' } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'createdAt', order: 'asc' } },\n]\n\nconst defaultItemsMostRelevant: DatatableOrderingOptions = [\n { id: 3, titleT: 'common.system.datatable.ordering.mostRelevant' },\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'createdAt', order: 'desc' } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'createdAt', order: 'asc' } },\n]\n\nconst activeTitle = computed(() => {\n const found = options.value.find((item: any) => item.id === active.value)\n if (found) return t(found.titleT)\n return ''\n})\n\nconst options = computed(() => {\n if (props.customOptions) return props.customOptions\n if (props.variant === 'most-relevant') return defaultItemsMostRelevant\n return defaultItems\n})\n\nconst onItemClick = (item: DatatableOrderingOption) => {\n modelValueComputed.value = item.id\n}\n\nwatch(\n active,\n (newValue, oldValue) => {\n if (isUndefined(oldValue) || newValue === oldValue) return\n const found = options.value.find((item: any) => item.id === newValue)\n if (found) emit('sortByChange', found)\n },\n { immediate: true }\n)\n\nwatch(\n modelValueComputed,\n (newValue, oldValue) => {\n if (isUndefined(oldValue) || newValue === oldValue) return\n active.value = newValue\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div class=\"d-flex align-center justify-center\">\n <div class=\"text-caption mr-1\">\n {{ t('common.system.datatable.ordering.title') }}:\n </div>\n <VBtn\n variant=\"text\"\n rounded=\"xl\"\n size=\"small\"\n append-icon=\"mdi-chevron-down\"\n >\n {{ activeTitle }}\n <VMenu\n activator=\"parent\"\n location=\"bottom\"\n close-on-content-click\n >\n <VList\n density=\"compact\"\n class=\"pa-0\"\n >\n <VListItem\n v-for=\"item in options\"\n :key=\"item.id\"\n @click=\"onItemClick(item)\"\n >\n <VListItemTitle :class=\"{ 'font-weight-bold': item.id === active }\">\n {{ t(item.titleT) }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </div>\n</template>\n","<script setup lang=\"ts\">\nconst emit = defineEmits<{\n (e: 'onCancel'): void\n}>()\n\nconst onCancel = () => {\n emit('onCancel')\n}\n</script>\n\n<template>\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n >\n <VToolbarTitle class=\"flex-fill\">\n <slot />\n </VToolbarTitle>\n <VSpacer />\n <VBtn\n class=\"ml-2\"\n icon=\"mdi-close\"\n size=\"small\"\n variant=\"text\"\n data-cy=\"button-close\"\n @click.stop=\"onCancel\"\n />\n </VToolbar>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, watch } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n data: any\n }>(),\n {}\n)\n\nconst computedData = computed(() => {\n return props.data\n})\n\nwatch(\n computedData,\n (newValue) => {\n console.log(newValue)\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div />\n</template>\n","(function(){var o;\"use strict\";try{if(typeof document<\"u\"){var e=document.createElement(\"style\");e.nonce=(o=document.head.querySelector(\"meta[property=csp-nonce]\"))==null?void 0:o.content,e.appendChild(document.createTextNode(\".vue-notification-group{display:block;position:fixed;z-index:5000}.vue-notification-wrapper{display:block;overflow:hidden;width:100%;margin:0;padding:0}.notification-title{font-weight:600}.vue-notification-template{display:block;box-sizing:border-box;background:white;text-align:left}.vue-notification{display:block;box-sizing:border-box;text-align:left;font-size:12px;padding:10px;margin:0 5px 5px;color:#fff;background:#44A4FC;border-left:5px solid #187FE7}.vue-notification.warn{background:#ffb648;border-left-color:#f48a06}.vue-notification.error{background:#E54D42;border-left-color:#b82e24}.vue-notification.success{background:#68CD86;border-left-color:#42a85f}.vn-fade-enter-active,.vn-fade-leave-active,.vn-fade-move{transition:all .5s}.vn-fade-enter-from,.vn-fade-leave-to{opacity:0}\")),document.head.appendChild(e)}}catch(i){console.error(\"vite-plugin-css-injected-by-js\",i)}})();\nimport { defineComponent as D, createVNode as l, TransitionGroup as H, ref as $, computed as g, onMounted as et, Fragment as C, isVNode as nt } from \"vue\";\nconst R = /* @__PURE__ */ new Map();\nclass it {\n constructor(n, o, a) {\n this.remaining = o, this.callback = n, this.notifyItem = a, this.resume();\n }\n pause() {\n clearTimeout(this.notifyItem.timer), this.remaining -= Date.now() - this.start;\n }\n resume() {\n this.start = Date.now(), clearTimeout(this.notifyItem.timer), this.notifyItem.timer = setTimeout(this.callback, this.remaining);\n }\n}\nfunction ot(t) {\n return { all: t = t || /* @__PURE__ */ new Map(), on: function(n, o) {\n var a = t.get(n);\n a ? a.push(o) : t.set(n, [o]);\n }, off: function(n, o) {\n var a = t.get(n);\n a && (o ? a.splice(a.indexOf(o) >>> 0, 1) : t.set(n, []));\n }, emit: function(n, o) {\n var a = t.get(n);\n a && a.slice().map(function(s) {\n s(o);\n }), (a = t.get(\"*\")) && a.slice().map(function(s) {\n s(n, o);\n });\n } };\n}\nconst T = ot(), b = \"[-+]?[0-9]*.?[0-9]+\", M = [\n {\n name: \"px\",\n regexp: new RegExp(`^${b}px$`)\n },\n {\n name: \"%\",\n regexp: new RegExp(`^${b}%$`)\n },\n /**\n * Fallback option\n * If no suffix specified, assigning \"px\"\n */\n {\n name: \"px\",\n regexp: new RegExp(`^${b}$`)\n }\n], at = (t) => {\n if (t === \"auto\")\n return {\n type: t,\n value: 0\n };\n for (let n = 0; n < M.length; n++) {\n const o = M[n];\n if (o.regexp.test(t))\n return {\n type: o.name,\n value: parseFloat(t)\n };\n }\n return {\n type: \"\",\n value: t\n };\n}, rt = (t) => {\n switch (typeof t) {\n case \"number\":\n return { type: \"px\", value: t };\n case \"string\":\n return at(t);\n default:\n return { type: \"\", value: t };\n }\n}, k = {\n x: /* @__PURE__ */ new Set([\"left\", \"center\", \"right\"]),\n y: /* @__PURE__ */ new Set([\"top\", \"bottom\"])\n}, st = ((t) => () => t++)(0), lt = (t) => typeof t != \"string\" ? [] : t.split(/\\s+/gi).filter(Boolean), ct = (t) => {\n typeof t == \"string\" && (t = lt(t));\n let n = null, o = null;\n return t.forEach((a) => {\n k.y.has(a) && (o = a), k.x.has(a) && (n = a);\n }), { x: n, y: o };\n}, E = {\n position: [\"top\", \"right\"],\n cssAnimation: \"vn-fade\",\n velocityAnimation: {\n enter: (t) => ({\n height: [t.clientHeight, 0],\n opacity: [1, 0]\n }),\n leave: {\n height: 0,\n opacity: [0, 1]\n }\n }\n}, ut = /* @__PURE__ */ D({\n name: \"velocity-group\",\n inheritAttrs: !1,\n props: {\n name: {\n type: String,\n default: \"\"\n }\n },\n emits: {\n /* eslint-disable @typescript-eslint/no-unused-vars */\n enter: (t, n) => !0,\n leave: (t, n) => !0,\n afterLeave: () => !0\n /* eslint-enable @typescript-eslint/no-unused-vars */\n },\n setup: (t, {\n slots: n,\n emit: o\n }) => {\n const a = (c, u) => {\n o(\"enter\", c, u);\n }, s = (c, u) => {\n o(\"leave\", c, u);\n }, h = () => {\n o(\"afterLeave\");\n };\n return () => l(H, {\n tag: \"name\",\n css: !1,\n name: t.name,\n onEnter: a,\n onLeave: s,\n onAfterLeave: h\n }, {\n default: () => {\n var c;\n return [(c = n.default) == null ? void 0 : c.call(n)];\n }\n });\n }\n}), ft = /* @__PURE__ */ D({\n name: \"css-group\",\n inheritAttrs: !1,\n props: {\n name: {\n type: String,\n default: \"\"\n }\n },\n setup: (t, {\n slots: n\n }) => () => l(H, {\n tag: \"name\",\n name: t.name\n }, {\n default: () => {\n var o;\n return [(o = n.default) == null ? void 0 : o.call(n)];\n }\n })\n});\nfunction dt(t) {\n return typeof t == \"function\" || Object.prototype.toString.call(t) === \"[object Object]\" && !nt(t);\n}\nconst x = {\n IDLE: 0,\n DESTROYED: 2\n}, pt = /* @__PURE__ */ D({\n // eslint-disable-next-line vue/multi-word-component-names\n name: \"notifications\",\n props: {\n group: {\n type: String,\n default: \"\"\n },\n /** \n * Width of notification holder, can be `%`, `px` string or number.\n * @example '100%', '200px', 200 \n * */\n width: {\n type: [Number, String],\n default: 300\n },\n reverse: {\n type: Boolean,\n default: !1\n },\n position: {\n type: [String, Array],\n default: () => E.position\n },\n classes: {\n type: String,\n default: \"vue-notification\"\n },\n animationType: {\n type: String,\n default: \"css\",\n validator(t) {\n return t === \"css\" || t === \"velocity\";\n }\n },\n animation: {\n type: Object,\n default() {\n return E.velocityAnimation;\n }\n },\n animationName: {\n type: String,\n default: E.cssAnimation\n },\n speed: {\n type: Number,\n default: 300\n },\n /** Time (in ms) to keep the notification on screen (if **negative** - notification will stay **forever** or until clicked) */\n duration: {\n type: Number,\n default: 3e3\n },\n delay: {\n type: Number,\n default: 0\n },\n max: {\n type: Number,\n default: 1 / 0\n },\n ignoreDuplicates: {\n type: Boolean,\n default: !1\n },\n closeOnClick: {\n type: Boolean,\n default: !0\n },\n pauseOnHover: {\n type: Boolean,\n default: !1\n },\n /** Use [v-html](https://vuejs.org/api/built-in-directives.html#v-html) to set `title` and `text` */\n dangerouslySetInnerHtml: {\n type: Boolean,\n default: !1\n }\n },\n emits: {\n /* eslint-disable @typescript-eslint/no-unused-vars */\n click: (t) => !0,\n destroy: (t) => !0,\n start: (t) => !0\n /* eslint-enable @typescript-eslint/no-unused-vars */\n },\n setup: (t, {\n emit: n,\n slots: o,\n expose: a\n }) => {\n const s = $([]), h = $(null), c = R.get(\"velocity\"), u = g(() => t.animationType === \"velocity\"), j = g(() => u.value ? ut : ft), f = g(() => s.value.filter((e) => e.state !== x.DESTROYED)), N = g(() => rt(t.width)), A = g(() => {\n const {\n x: e,\n y: i\n } = ct(t.position), r = N.value.value, d = N.value.type, m = {\n width: r + d\n };\n return i && (m[i] = \"0px\"), e && (e === \"center\" ? m.left = `calc(50% - ${+r / 2}${d})` : m[e] = \"0px\"), m;\n }), w = g(() => \"bottom\" in A.value), B = (e) => {\n n(\"click\", e), t.closeOnClick && y(e);\n }, V = () => {\n var e;\n t.pauseOnHover && ((e = h.value) == null || e.pause());\n }, Y = () => {\n var e;\n t.pauseOnHover && ((e = h.value) == null || e.resume());\n }, G = (e = {}) => {\n if (e.group || (e.group = \"\"), e.data || (e.data = {}), t.group !== e.group)\n return;\n if (e.clean || e.clear) {\n q();\n return;\n }\n const i = typeof e.duration == \"number\" ? e.duration : t.duration, r = typeof e.speed == \"number\" ? e.speed : t.speed, d = typeof e.ignoreDuplicates == \"boolean\" ? e.ignoreDuplicates : t.ignoreDuplicates, {\n title: m,\n text: K,\n type: Q,\n data: U,\n id: X\n } = e, p = {\n id: X || st(),\n title: m,\n text: K,\n type: Q,\n state: x.IDLE,\n speed: r,\n length: i + 2 * r,\n data: U\n };\n i >= 0 && (h.value = new it(() => y(p), p.length, p));\n const Z = t.reverse ? !w.value : w.value;\n let v = -1;\n const tt = f.value.some((L) => L.title === e.title && L.text === e.text);\n (!d || !tt) && (Z ? (s.value.push(p), n(\"start\", p), f.value.length > t.max && (v = 0)) : (s.value.unshift(p), n(\"start\", p), f.value.length > t.max && (v = f.value.length - 1)), v !== -1 && y(f.value[v]));\n }, _ = (e) => {\n W(e);\n }, F = (e) => [\"vue-notification-template\", t.classes, e.type || \"\"], P = (e) => u.value ? void 0 : {\n transition: `all ${e.speed}ms`\n }, y = (e) => {\n clearTimeout(e.timer), e.state = x.DESTROYED, I(), n(\"destroy\", e);\n }, W = (e) => {\n const i = s.value.find((r) => r.id === e);\n i && y(i);\n }, q = () => {\n f.value.forEach(y);\n }, O = (e, i) => {\n var d;\n const r = (d = t.animation) == null ? void 0 : d[e];\n return typeof r == \"function\" ? r(i) : r;\n }, z = (e, i) => {\n if (!u.value)\n return;\n const r = O(\"enter\", e);\n c(e, r, {\n duration: t.speed,\n complete: i\n });\n }, J = (e, i) => {\n if (!u.value)\n return;\n const r = O(\"leave\", e);\n c(e, r, {\n duration: t.speed,\n complete: i\n });\n };\n function I() {\n s.value = s.value.filter((e) => e.state !== x.DESTROYED);\n }\n return et(() => {\n T.on(\"add\", G), T.on(\"close\", _);\n }), () => {\n let e;\n return l(\"div\", {\n class: \"vue-notification-group\",\n style: A.value\n }, [l(j.value, {\n name: t.animationName,\n onEnter: z,\n onLeave: J,\n onAfterLeave: I\n }, dt(e = f.value.map((i) => l(\"div\", {\n key: i.id,\n class: \"vue-notification-wrapper\",\n style: P(i),\n \"data-id\": i.id,\n onMouseenter: V,\n onMouseleave: Y\n }, [o.body ? o.body({\n item: i,\n class: [t.classes, i.type].join(\"\"),\n close: () => y(i)\n }) : l(\"div\", {\n class: F(i),\n onClick: () => B(i)\n }, [t.dangerouslySetInnerHtml ? l(C, null, [i.title ? l(\"div\", {\n class: \"notification-title\",\n innerHTML: i.title\n }, null) : null, l(\"div\", {\n class: \"notification-content\",\n innerHTML: i.text\n }, null)]) : l(C, null, [i.title ? l(\"div\", {\n class: \"notification-title\"\n }, [i.title]) : null, l(\"div\", {\n class: \"notification-content\"\n }, [i.text])])])]))) ? e : {\n default: () => [e]\n })]);\n };\n }\n}), S = (t) => {\n typeof t == \"string\" && (t = { title: \"\", text: t }), typeof t == \"object\" && T.emit(\"add\", t);\n};\nS.close = (t) => {\n T.emit(\"close\", t);\n};\nconst vt = () => ({ notify: S }), yt = \"Notifications\";\nfunction mt(t, n = {}) {\n Object.entries(n).forEach((a) => R.set(...a));\n const o = n.name || \"notify\";\n t.config.globalProperties[\"$\" + o] = S, t.component(n.componentName || yt, pt);\n}\nconst xt = {\n install: mt\n};\nexport {\n pt as Notifications,\n xt as default,\n S as notify,\n vt as useNotification\n};\n","import type { Locale, Path } from 'vue-i18n'\nimport { createI18n } from 'vue-i18n'\nimport type en from '@/locales/en'\n\nexport type MessageSchema = typeof en\n\nconst REQUIRED_LOCALES = ['en', 'sk']\n\nexport const i18n = createI18n<[MessageSchema]>({\n globalInjection: false,\n legacy: false,\n locale: REQUIRED_LOCALES[0],\n fallbackLocale: false,\n missing: (locale: Locale, key: Path) => {\n if (REQUIRED_LOCALES.includes(locale)) {\n console.warn(`Missing ${locale} translation: ${key}`)\n }\n },\n})\n","export const isAnzuFatalError = (error: any): error is AnzuFatalError => {\n return error instanceof AnzuFatalError\n}\n\nexport class AnzuFatalError extends Error {\n constructor(cause?: Error, message = '') {\n super(message)\n this.name = 'AnzuFatalError'\n this.cause = cause\n this.message = message\n }\n}\n","export const HTTP_STATUS_OK = 200\nexport const HTTP_STATUS_CREATED = 201\nexport const HTTP_STATUS_NO_CONTENT = 204\nexport const HTTP_STATUS_BAD_REQUEST = 400\nexport const HTTP_STATUS_UNAUTHORIZED = 401\nexport const HTTP_STATUS_FORBIDDEN = 403\nexport const HTTP_STATUS_UNPROCESSABLE_ENTITY = 422\n\nexport const HTTP_STATUS_VALID_ALL = [HTTP_STATUS_OK, HTTP_STATUS_CREATED, HTTP_STATUS_NO_CONTENT]\n","import axios from 'axios'\nimport { HTTP_STATUS_FORBIDDEN } from '@/composables/statusCodes'\n\nexport const axiosErrorResponseIsForbidden = (error: Error) => {\n return axios.isAxiosError(error) && error.response?.status === HTTP_STATUS_FORBIDDEN\n}\n\nexport const isAnzuApiForbiddenError = (error: any): error is AnzuApiForbiddenError => {\n return error instanceof AnzuApiForbiddenError\n}\n\nexport class AnzuApiForbiddenError extends Error {\n constructor(cause?: Error, message = '') {\n super(message)\n this.name = 'AnzuApiForbiddenError'\n this.cause = cause\n this.message = message\n }\n}\n","import axios, { type AxiosError } from 'axios'\nimport { HTTP_STATUS_UNPROCESSABLE_ENTITY } from '@/composables/statusCodes'\n\ninterface ValidationResponseDataFields {\n [key: string]: string[]\n}\n\nexport interface AnzuApiValidationResponseData {\n contextId: string\n error: string\n fields: ValidationResponseDataFields\n}\n\nexport interface ValidationError {\n field: string\n errors: string[]\n}\n\nconst ERROR_VALIDATION = 'validation_failed'\n\nexport const axiosErrorResponseHasValidationData = (error: Error) => {\n return (\n axios.isAxiosError(error) &&\n error.response?.status === HTTP_STATUS_UNPROCESSABLE_ENTITY &&\n error.response.data?.error === ERROR_VALIDATION &&\n error.response.data?.fields\n )\n}\n\nexport const isAnzuApiValidationError = (error: any): error is AnzuApiValidationError => {\n return error instanceof AnzuApiValidationError\n}\n\nfunction resolveResponseData(axiosError: AxiosError, system: string, entity: string) {\n const data = axiosError.response?.data as AnzuApiValidationResponseData\n const items = [] as ValidationError[]\n for (const [key, values] of Object.entries(data.fields)) {\n items.push({\n field: system + '.' + entity + '.model.' + key,\n errors: values,\n })\n }\n return items\n}\n\nexport class AnzuApiValidationError extends Error {\n fields: ValidationError[]\n\n constructor(axiosError: AxiosError, system: string, entity: string, cause?: Error, message = '') {\n super(message)\n this.name = 'AnzuApiValidationError'\n this.cause = cause\n this.message = message\n this.fields = resolveResponseData(axiosError, system, entity)\n }\n}\n","export const isAnzuApiResponseCodeError = (error: any): error is AnzuApiResponseCodeError => {\n return error instanceof AnzuApiResponseCodeError\n}\n\nexport class AnzuApiResponseCodeError extends Error {\n code: number\n\n constructor(code: number, cause?: Error, message?: string) {\n super(message)\n this.name = 'AnzuApiResponseCodeError'\n this.cause = cause\n this.code = code\n }\n}\n","import axios, { type AxiosError } from 'axios'\nimport { HTTP_STATUS_UNPROCESSABLE_ENTITY } from '@/composables/statusCodes'\n\ninterface ForbiddenOperationResponseData {\n contextId: string\n error: string\n detail: string\n}\n\nconst ERROR_FORBIDDEN_OPERATION = 'forbidden_operation_error'\n\nexport const axiosErrorResponseHasForbiddenOperationData = (error: Error) => {\n return (\n axios.isAxiosError(error) &&\n error.response?.status === HTTP_STATUS_UNPROCESSABLE_ENTITY &&\n error.response.data?.error === ERROR_FORBIDDEN_OPERATION &&\n error.response.data?.detail\n )\n}\n\nexport const isAnzuApiForbiddenOperationError = (error: any): error is AnzuApiForbiddenOperationError => {\n return error instanceof AnzuApiForbiddenOperationError\n}\n\nfunction resolveResponseData(axiosError: AxiosError) {\n const data = axiosError.response?.data as ForbiddenOperationResponseData\n return data.detail\n}\n\nexport class AnzuApiForbiddenOperationError extends Error {\n detail: string\n\n constructor(axiosError: AxiosError, cause?: Error, message = '') {\n super(message)\n this.name = 'AnzuApiForbiddenOperationError'\n this.cause = cause\n this.message = message\n this.detail = resolveResponseData(axiosError)\n }\n}\n","import { notify } from '@kyvg/vue3-notification'\nimport { i18n } from '@/plugins/i18n'\nimport { isAnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { isAnzuApiForbiddenError } from '@/model/error/AnzuApiForbiddenError'\nimport { isAnzuApiValidationError, type ValidationError } from '@/model/error/AnzuApiValidationError'\nimport { isAnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { isAnzuApiForbiddenOperationError } from '@/model/error/AnzuApiForbiddenOperationError'\n\nconst DEFAULT_DURATION_SECONDS = 3\n\nexport const NEW_LINE_MARK = '\\n'\n\nexport type RecordWasType = 'created' | 'deleted' | 'updated' | 'published' | 'unpublished' | 'enabled' | 'disabled'\n\nexport function useAlerts() {\n const showSuccess = (message: string, duration = DEFAULT_DURATION_SECONDS) => {\n notify({\n group: 'alerts',\n text: message,\n duration: duration * 1000,\n type: 'success',\n })\n }\n\n const showSuccessT = (translation: string, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n showSuccess(t(translation), duration)\n }\n\n const showError = (message: string, duration = DEFAULT_DURATION_SECONDS) => {\n notify({\n group: 'alerts',\n text: message,\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showErrorT = (translation: string, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n showError(t(translation), duration)\n }\n\n const showInfo = (message: string, duration = DEFAULT_DURATION_SECONDS) => {\n notify({\n group: 'alerts',\n text: message,\n duration: duration * 1000,\n type: 'info',\n })\n }\n\n const showInfoT = (translation: string, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n showInfo(t(translation), duration)\n }\n\n const showWarning = (message: string, duration = DEFAULT_DURATION_SECONDS) => {\n notify({\n group: 'alerts',\n text: message,\n duration: duration * 1000,\n type: 'warning',\n })\n }\n\n const showWarningT = (translation: string, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n showWarning(t(translation), duration)\n }\n\n const showValidationError = (duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n notify({\n group: 'alerts',\n text: t('common.alert.fixValidationErrors'),\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showRecordWas = (variant: RecordWasType, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n notify({\n group: 'alerts',\n text: t('common.alert.recordWas.' + variant),\n duration: duration * 1000,\n type: 'success',\n })\n }\n\n const showApiValidationError = (errors: ValidationError[], duration = -1, fieldIsTranslated = false) => {\n const { t, te } = i18n.global\n const texts = [t('common.alert.fixApiValidationErrors')]\n\n for (let i = 0; i < errors.length; i++) {\n let fieldText = ''\n if (fieldIsTranslated) {\n fieldText += errors[i].field\n } else if (te(errors[i].field)) {\n fieldText += t(errors[i].field)\n }\n const errorsTexts = new Set<string>()\n for (let j = 0; j < errors[i].errors.length; j++) {\n if (te('error.apiValidation.' + errors[i].errors[j])) {\n errorsTexts.add(t('error.apiValidation.' + errors[i].errors[j]))\n continue\n }\n errorsTexts.add(t('error.apiValidation.noTranslation'))\n }\n if (fieldText.length > 0) {\n texts.push(fieldText + ': ' + Array.from(errorsTexts).join(', '))\n }\n }\n notify({\n group: 'alerts',\n text: texts.join(NEW_LINE_MARK),\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showApiForbiddenOperationError = (detail: string, duration = -1) => {\n const { t, te } = i18n.global\n let text = t('error.apiForbiddenOperation.noTranslation')\n if (te('error.apiForbiddenOperation.' + detail)) {\n text = t('error.apiForbiddenOperation.' + detail)\n }\n notify({\n group: 'alerts',\n text: text,\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showUnknownError = (duration = -1) => {\n const { t } = i18n.global\n notify({\n group: 'alerts',\n text: t('common.alert.unknownError'),\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showForbiddenError = (duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n notify({\n group: 'alerts',\n text: t('common.alert.forbiddenError'),\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showErrorsDefault = (error: any) => {\n if (isAnzuApiForbiddenError(error)) {\n showForbiddenError()\n return true\n }\n if (isAnzuApiValidationError(error)) {\n showApiValidationError(error.fields)\n return true\n }\n if (isAnzuApiForbiddenOperationError(error)) {\n showApiForbiddenOperationError(error.detail)\n return true\n }\n if (isAnzuFatalError(error)) {\n showUnknownError()\n return true\n }\n if (isAnzuApiResponseCodeError(error)) {\n showUnknownError()\n return true\n }\n return false\n }\n\n return {\n showSuccess,\n showSuccessT,\n showError,\n showErrorT,\n showInfo,\n showInfoT,\n showWarning,\n showWarningT,\n showValidationError,\n showRecordWas,\n showApiValidationError,\n showApiForbiddenOperationError,\n showUnknownError,\n showForbiddenError,\n showErrorsDefault,\n }\n}\n","<script lang=\"ts\" setup>\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { ref } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean\n buttonClass?: string\n maxWidth?: number | undefined\n dataCy?: string\n v?: any\n callCreate: () => Promise<any>\n disableRedirect?: boolean\n redirectRouteName?: string | undefined\n redirectParamName?: string\n }>(),\n {\n buttonClass: '',\n maxWidth: undefined,\n dataCy: 'button-create',\n v: undefined,\n disableRedirect: false,\n redirectRouteName: undefined,\n redirectParamName: 'id',\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n (e: 'onConfirm'): void\n (e: 'onOpen'): void\n (e: 'onClose'): void\n (e: 'onError', data: any): void\n (e: 'onSuccess', data: any): void\n}>()\n\nconst { t } = useI18n()\n\nconst buttonLoading = ref(false)\n\nconst onOpen = () => {\n emit('update:modelValue', true)\n emit('onOpen')\n}\n\nconst onClose = () => {\n emit('update:modelValue', false)\n emit('onClose')\n}\n\nconst router = useRouter()\nconst { showValidationError, showRecordWas, showErrorsDefault } = useAlerts()\n\nconst onConfirm = async () => {\n emit('onConfirm')\n try {\n buttonLoading.value = true\n props.v?.$touch()\n if (!isUndefined(props.v) && props.v.$invalid) {\n showValidationError()\n buttonLoading.value = false\n return\n }\n const res = await props.callCreate()\n emit('onSuccess', res)\n showRecordWas('created')\n onClose()\n if (!isUndefined(res.id) && !props.disableRedirect && props.redirectRouteName) {\n router.push({\n name: props.redirectRouteName,\n params: { [props.redirectParamName]: res[props.redirectParamName] },\n })\n }\n } catch (error) {\n showErrorsDefault(error)\n emit('onError', error)\n } finally {\n buttonLoading.value = false\n }\n}\n</script>\n\n<template>\n <ABtnPrimary\n :class=\"buttonClass\"\n rounded=\"pill\"\n :data-cy=\"dataCy\"\n @click.stop=\"onOpen\"\n >\n <slot name=\"button-title\">\n {{ t('common.button.create') }}\n </slot>\n <VDialog\n :model-value=\"modelValue\"\n :max-width=\"maxWidth\"\n persistent\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <VCard\n v-if=\"modelValue\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @on-cancel=\"onClose\">\n <slot name=\"title\">\n {{ t('common.button.create') }}\n </slot>\n </ADialogToolbar>\n <VCardText>\n <slot name=\"content\" />\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onClose\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n :loading=\"buttonLoading\"\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.create') }}\n </slot>\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </ABtnPrimary>\n</template>\n","<script lang=\"ts\" setup>\nimport { onMounted, ref } from 'vue'\nimport { useFetch } from '@vueuse/core'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n configUrl?: string | undefined | null\n }>(),\n {\n configUrl: null,\n }\n)\n\nconst { t } = useI18n()\n\ninterface AdminConfigItem {\n id: string\n title: string\n url: string\n icon: string\n}\n\nconst config = ref<AdminConfigItem[]>([])\n\nonMounted(async () => {\n if (props.configUrl && props.configUrl.length > 0) {\n try {\n const { data } = await useFetch<AdminConfigItem[]>(props.configUrl).get().json()\n config.value = data.value\n } catch (e) {\n //\n }\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"config.length > 0\"\n variant=\"text\"\n size=\"small\"\n icon\n >\n <VIcon icon=\"mdi-dots-grid\" />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.system.adminSwitcher.button') }}\n </VTooltip>\n <VMenu activator=\"parent\">\n <VCard>\n <div class=\"a-admin-switcher__content\">\n <a\n v-for=\"item in config\"\n :key=\"item.id\"\n :href=\"item.url\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n class=\"a-admin-switcher__item\"\n >\n <img\n :src=\"item.icon\"\n :alt=\"item.title\"\n >\n <span class=\"a-admin-switcher__item-title\">{{ item.title }}</span>\n </a>\n </div>\n </VCard>\n </VMenu>\n </VBtn>\n</template>\n\n<style lang=\"scss\">\n.a-admin-switcher {\n &__content {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n grid-template-rows: auto;\n padding: 6px;\n }\n\n &__item {\n display: flex;\n width: 96px;\n height: 96px;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n text-decoration: none;\n color: rgba(var(--v-theme-on-surface), var(--v-hover-opacity));\n\n &:hover {\n background-color: rgba(var(--v-theme-on-surface), 10%);\n border-radius: 8px;\n }\n\n &-title {\n display: flex;\n font-weight: normal;\n font-size: 14px;\n line-height: 14px;\n color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity));\n padding: 8px 0;\n }\n\n img {\n display: block;\n width: auto;\n height: 50px;\n }\n }\n}\n</style>\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","import type { OpUnitType, QUnitType } from 'dayjs'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { stringToInt } from '@/utils/string'\nimport type { DatetimeUTC, DatetimeUTCNullable } from '@/types/common'\n\ndayjs.extend(utc)\n\nconst SUFFIX = '.000000Z'\nconst FORMAT = 'YYYY-MM-DDTHH:mm:ss'\n\nexport const DATETIME_MIN = '1970-01-01T00:00:00.000000Z'\nexport const DATETIME_MAX = '2100-01-01T00:00:00.000000Z'\n\nexport const dateNow = (): Date => {\n return dayjs().utc().toDate()\n}\n\nexport const dateTimeToDate = (isoDate: DatetimeUTC | DatetimeUTCNullable | string): Date => {\n return dayjs(isoDate).toDate()\n}\nexport const timestampCurrent = (): number => {\n return stringToInt(dayjs().utc().unix())\n}\n\nexport const dateTimeNow = (ignoreFractionalSeconds = true, ignoreSeconds = false): string => {\n if (ignoreFractionalSeconds && !ignoreSeconds) return dayjs().utc().format('YYYY-MM-DDTHH:mm:ss') + SUFFIX\n if (ignoreFractionalSeconds && ignoreSeconds) return dayjs().utc().format('YYYY-MM-DDTHH:mm:00') + SUFFIX\n if (!ignoreFractionalSeconds && ignoreSeconds) return dayjs().utc().format('YYYY-MM-DDTHH:mm:00.SSSSSS') + 'Z'\n return dayjs().utc().format('YYYY-MM-DDTHH:mm:ss.SSSSSS') + 'Z'\n}\n\nexport const dateTimeStartOfDay = (days = 0) => {\n if (days === 0) {\n return dayjs().startOf('day').utc().format(FORMAT) + SUFFIX\n }\n return dayjs().add(days, 'days').startOf('day').utc().format(FORMAT) + SUFFIX\n}\n\nexport const dateTimeEndOfDay = (days = 0) => {\n if (days === 0) {\n return dayjs().endOf('day').utc().format(FORMAT) + SUFFIX\n }\n return dayjs().add(days, 'days').endOf('day').utc().format(FORMAT) + SUFFIX\n}\n\nexport const dateModifyMinutes = (minutes = 0, date: null | Date = null): Date => {\n if (date === null) date = new Date()\n if (minutes === 0) return date\n if (minutes > 0) return dayjs(date).add(minutes, 'minutes').toDate()\n if (minutes < 0) return dayjs(date).subtract(Math.abs(minutes), 'minutes').toDate()\n return date\n}\n\nexport const dateToUtc = (date: dayjs.ConfigType) => {\n return dayjs(date).utc().format('YYYY-MM-DDTHH:mm:ss') + SUFFIX\n}\n\nexport const yearNow = () => {\n return dayjs().utc().format('YYYY')\n}\n\nexport const dateTimePretty = (\n isoDate: DatetimeUTC | DatetimeUTCNullable | string | null,\n edgeDateValue = ''\n): string => {\n if (isoDate === DATETIME_MAX || isoDate === DATETIME_MIN || isoDate === '' || isNull(isoDate) || isUndefined(isoDate))\n return edgeDateValue\n return dayjs(isoDate).format('DD.MM.YYYY HH:mm')\n}\n\nexport const dateTimeFriendly = (isoDate: DatetimeUTC | DatetimeUTCNullable | string | null, edgeDateValue = '') => {\n if (\n isoDate === DATETIME_MAX ||\n isoDate === DATETIME_MIN ||\n isoDate === '' ||\n isNull(isoDate) ||\n isUndefined(isoDate)\n ) {\n return edgeDateValue\n }\n let displayYear = true\n let displayDayMonth = true\n const date = dayjs(isoDate)\n const now = dayjs()\n if (now.format('YYYY') === date.format('YYYY')) {\n displayYear = false\n }\n if (now.format('YYYY-MM-DD') === date.format('YYYY-MM-DD')) {\n displayDayMonth = false\n }\n if (!displayYear && !displayDayMonth) return dayjs(date).format('H:mm')\n if (!displayYear) return dayjs(date).format('D.M. H:mm')\n return dayjs(date).format('D.M.YYYY H:mm')\n}\n\nexport const datePretty = (isoDate: DatetimeUTC | DatetimeUTCNullable | string | null, edgeDateValue = ''): string => {\n if (isoDate === DATETIME_MAX || isoDate === DATETIME_MIN || isoDate === '' || isNull(isoDate) || isUndefined(isoDate))\n return edgeDateValue\n return dayjs(isoDate).format('DD.MM.YYYY')\n}\n\nexport const timePretty = (isoDate: DatetimeUTC | DatetimeUTCNullable | string | null, edgeDateValue = ''): string => {\n if (isoDate === DATETIME_MAX || isoDate === DATETIME_MIN || isoDate === '' || isNull(isoDate) || isUndefined(isoDate))\n return edgeDateValue\n return dayjs(isoDate).format('HH:mm')\n}\n\nexport const dateDiff = (date1: Date, date2: Date, unit: QUnitType | OpUnitType = 'ms') => {\n const date1dayjs = dayjs(date1)\n const date2dayjs = dayjs(date2)\n return date1dayjs.diff(date2dayjs, unit)\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\nimport { dateTimePretty } from '@/utils/datetime'\nimport ARow from '@/components/ARow.vue'\n\nconst props = withDefaults(\n defineProps<{\n data: AnzuUserAndTimeTrackingAware | any\n hideCreatedAt?: boolean\n hideModifiedAt?: boolean\n }>(),\n {\n hideCreatedAt: false,\n hideModifiedAt: false,\n }\n)\n\nconst createdAt = computed(() => {\n return dateTimePretty(props.data.createdAt)\n})\nconst modifiedAt = computed(() => {\n return dateTimePretty(props.data.modifiedAt)\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ARow :title=\"t('common.model.tracking.created')\">\n <div class=\"d-flex align-center\">\n <div\n v-if=\"!hideCreatedAt\"\n class=\"mr-2\"\n >\n {{ createdAt }}\n </div>\n </div>\n </ARow>\n <ARow :title=\"t('common.model.tracking.modified')\">\n <div class=\"d-flex align-center\">\n <div\n v-if=\"!hideModifiedAt\"\n class=\"mr-2\"\n >\n {{ modifiedAt }}\n </div>\n </div>\n </ARow>\n</template>\n","import { cloneDeep, isArray, isUndefined } from '@/utils/common'\nimport type { Filter, FilterBag, FilterVariant } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\n\nexport interface MakeFilterOptions<T = any> {\n name: string\n variant: FilterVariant\n titleT?: string\n default: T | null\n field: string\n multiple: boolean\n mandatory: boolean\n exclude: boolean\n}\n\nexport function makeFilterHelper<T = any>(system?: string, subject?: string) {\n return (options: Partial<MakeFilterOptions<T>> = {}): Filter<T> => {\n const variant = isUndefined(options.variant) ? 'eq' : options.variant\n\n let defaultValue = isUndefined(options.default) ? null : options.default\n if (isUndefined(options.default) && variant === 'in') {\n defaultValue = [] as any\n }\n let titleT = options.titleT\n if (isUndefined(titleT) && system && subject && options.name) {\n titleT = system + '.' + subject + '.filter.' + options.name\n }\n\n return {\n variant,\n titleT,\n default: defaultValue,\n field: isUndefined(options.field) ? '' : options.field,\n multiple: isArray(defaultValue),\n mandatory: isUndefined(options.mandatory) ? false : options.mandatory,\n exclude: isUndefined(options.exclude) ? false : options.exclude,\n model: cloneDeep(defaultValue),\n error: '',\n }\n }\n}\n\nexport function useFilterHelpers() {\n const clearOne = (filter: Filter) => {\n filter.model = filter.default\n filter.error = ''\n }\n\n const clearAll = (filterBag: FilterBag) => {\n for (const filterName in filterBag) {\n clearOne(filterBag[filterName])\n }\n }\n\n const clearAllErrors = (filterBag: FilterBag) => {\n for (const filterName in filterBag) {\n filterBag[filterName].error = ''\n }\n }\n\n const resetFilter = (filterBag: FilterBag, pagination: Pagination, callback?: any) => {\n clearAll(filterBag)\n pagination.page = 1\n if (callback) callback()\n }\n\n const submitFilter = (filterBag: FilterBag, pagination: Pagination, callback: () => any) => {\n clearAllErrors(filterBag)\n pagination.page = 1\n callback()\n }\n\n return {\n clearAllErrors,\n clearAll,\n clearOne,\n resetFilter,\n submitFilter,\n }\n}\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n placeholder?: string | undefined\n dataCy?: string\n }>(),\n {\n placeholder: undefined,\n dataCy: 'filter-string',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: Filter): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n },\n})\n\nconst { clearOne } = useFilterHelpers()\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (props.modelValue.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (props.modelValue.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (props.modelValue.variant === 'contains' || props.modelValue.variant === 'search')\n return t('common.model.filterPlaceholder.contains')\n return ''\n})\n</script>\n\n<template>\n <VTextField\n v-model=\"value\"\n :label=\"label\"\n :placeholder=\"placeholderComputed\"\n :clearable=\"!modelValue.mandatory\"\n :data-cy=\"dataCy\"\n @click:clear.stop=\"clearOne(modelValue)\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport type { Ref } from 'vue'\nimport { computed, ref, toRefs, watch } from 'vue'\nimport { isDocId, isEmpty, isInt, isString, isUndefined } from '@/utils/common'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n filterId?: Filter | undefined\n filterDocId?: Filter | undefined\n filterText?: Filter | undefined\n filterUrl?: Filter | undefined\n filterOverrides?: Filter[] | undefined\n placeholder?: string | undefined\n dataCy?: string\n }>(),\n {\n filterId: undefined,\n filterDocId: undefined,\n filterText: undefined,\n filterUrl: undefined,\n filterOverrides: undefined,\n placeholder: undefined,\n dataCy: 'filter-mixed',\n }\n)\nconst model = ref('')\nconst { filterId, filterText, filterDocId, filterUrl, filterOverrides } = toRefs(props)\nconst { t } = useI18n()\n\nconst filterActive = (filter: Ref<Filter | undefined> | undefined): filter is Ref<Filter> => {\n return !isUndefined(filter) && !isUndefined(filter.value)\n}\nconst { clearOne } = useFilterHelpers()\nconst clearIfActive = (filter: Ref<Filter | undefined> | undefined) => {\n if (filterActive(filter)) {\n clearOne(filter.value)\n }\n}\nconst clearAllActiveExcept = (exceptFilter: Ref<Filter | undefined> | undefined = undefined) => {\n if (exceptFilter?.value?.titleT !== filterId?.value?.titleT) {\n clearIfActive(filterId)\n }\n if (exceptFilter?.value?.titleT !== filterDocId?.value?.titleT) {\n clearIfActive(filterDocId)\n }\n if (exceptFilter?.value?.titleT !== filterText?.value?.titleT) {\n clearIfActive(filterText)\n }\n if (exceptFilter?.value?.titleT !== filterUrl?.value?.titleT) {\n clearIfActive(filterUrl)\n }\n if (!isUndefined(filterOverrides)) {\n filterOverrides.value?.forEach((filter: any) => {\n if (exceptFilter?.value?.titleT !== filter.titleT) {\n clearOne(filter)\n }\n })\n }\n}\nconst overrideFilter: Ref<Filter | undefined> = ref(undefined)\nwatch(overrideFilter, () => {\n if (filterActive(overrideFilter)) {\n overrideFilter.value.model = model.value\n currentFilter.value = overrideFilter.value\n clearAllActiveExcept(overrideFilter)\n return\n }\n setFilters(model.value)\n})\nconst currentFilter: Ref<Filter | undefined> = ref(undefined)\nwatch(model, (newModel: string) => {\n setFilters(newModel)\n})\nconst setFilters = (newModel: string) => {\n if (filterActive(overrideFilter)) {\n overrideFilter.value.model = newModel\n return\n }\n const filter = autodetectFilter(newModel)\n if (!isUndefined(filter)) {\n filter.model = newModel\n }\n currentFilter.value = filter\n clearAllActiveExcept(currentFilter)\n}\nconst autodetectFilter = (newModel: string): Filter | undefined => {\n if (isInt(newModel)) {\n if (filterActive(filterId)) {\n return filterId.value\n }\n }\n if (isDocId(newModel)) {\n if (filterActive(filterDocId)) {\n return filterDocId.value\n }\n }\n if (isString(newModel) && newModel.length > 0) {\n if (filterActive(filterUrl) && newModel.startsWith('http')) {\n return filterUrl.value\n }\n if (filterActive(filterText)) {\n return filterText.value\n }\n }\n return undefined\n}\n\nconst label = computed(() => {\n if (filterActive(overrideFilter)) {\n return t(overrideFilter.value.titleT ?? '')\n }\n if (filterActive(currentFilter)) {\n return t(currentFilter.value.titleT ?? '')\n }\n const filterLabels = []\n if (filterActive(filterId)) {\n filterLabels.push(t(filterId.value.titleT ?? ''))\n }\n if (filterActive(filterDocId)) {\n filterLabels.push(t(filterDocId.value.titleT ?? ''))\n }\n if (filterActive(filterUrl)) {\n filterLabels.push(t(filterUrl.value.titleT ?? ''))\n }\n if (filterActive(filterText)) {\n filterLabels.push(t(filterText.value.titleT ?? ''))\n }\n return filterLabels.join('/')\n})\n\nconst currentFilterModel = computed(() => {\n return currentFilter.value?.model\n})\nwatch(currentFilterModel, (newModel) => {\n if (!isEmpty(model.value) && isEmpty(newModel)) {\n model.value = ''\n }\n})\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (currentFilter.value?.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (currentFilter.value?.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (currentFilter.value?.variant === 'contains' || currentFilter.value?.variant === 'search')\n return t('common.model.filterPlaceholder.contains')\n return ''\n})\n</script>\n\n<template>\n <VTextField\n v-model=\"model\"\n :label=\"label\"\n :data-cy=\"dataCy\"\n :placeholder=\"placeholderComputed\"\n >\n <template\n v-if=\"filterOverrides\"\n #append-inner\n >\n <VBtnToggle\n v-model=\"overrideFilter\"\n divided\n class=\"override-toggle\"\n >\n <VBtn\n v-for=\"(override, index) in filterOverrides\"\n :key=\"index\"\n size=\"small\"\n :value=\"override\"\n >\n {{ t(override.titleT ?? '') }}\n </VBtn>\n </VBtnToggle>\n </template>\n </VTextField>\n</template>\n\n<style lang=\"scss\" scoped>\n.override-toggle {\n height: 80%;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { stringToInt } from '@/utils/string'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCy?: string\n }>(),\n {\n dataCy: 'filter-string',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: Filter): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: stringToInt(newValue + '') } })\n },\n})\n\nconst { clearOne } = useFilterHelpers()\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n</script>\n\n<template>\n <VTextField\n v-model=\"value\"\n :label=\"label\"\n :clearable=\"!modelValue.mandatory\"\n :data-cy=\"dataCy\"\n @click:clear.stop=\"clearOne(modelValue)\"\n />\n</template>\n","export const eventClickBlur = (event?: Event): void => {\n if (event?.currentTarget instanceof HTMLElement) {\n event.currentTarget.blur()\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n tooltipT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n tooltipT: 'common.button.advancedFilters',\n buttonClass: 'mt-1',\n dataCy: 'filter-advanced',\n }\n)\nconst emit = defineEmits<{\n (e: 'advancedFilter'): void\n}>()\n\nconst active = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n active.value = !active.value\n emit('advancedFilter')\n}\n\nconst icon = computed(() => {\n return active.value ? 'mdi-chevron-double-up' : 'mdi-chevron-double-down'\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"onClick\"\n >\n <VIcon :icon=\"icon\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(tooltipT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { eventClickBlur } from '@/utils/event'\n\nwithDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n touched?: boolean\n }>(),\n {\n buttonT: 'common.button.submitFilter',\n buttonClass: '',\n dataCy: 'filter-submit',\n touched: true,\n }\n)\nconst emit = defineEmits<{\n (e: 'submit'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('submit')\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n color=\"primary\"\n type=\"submit\"\n :variant=\"touched ? 'flat' : 'text'\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n tooltipT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n tooltipT: 'common.button.resetFilter',\n buttonClass: 'ml-2',\n dataCy: 'filter-reset',\n }\n)\nconst emit = defineEmits<{\n (e: 'reset'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('reset')\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n class=\"px-2\"\n :data-cy=\"dataCy\"\n color=\"light\"\n min-width=\"36px\"\n variant=\"flat\"\n @click.stop=\"onClick\"\n >\n <VIcon\n color=\"grey darken-1\"\n icon=\"mdi-filter-remove-outline\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(tooltipT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport AFilterAdvancedButton from '@/components/buttons/filter/AFilterAdvancedButton.vue'\nimport AFilterSubmitButton from '@/components/buttons/filter/AFilterSubmitButton.vue'\nimport AFilterResetButton from '@/components/buttons/filter/AFilterResetButton.vue'\n\nwithDefaults(\n defineProps<{\n enableAdvanced?: boolean\n enableTop?: boolean\n hideButtons?: boolean\n touched?: boolean\n }>(),\n {\n enableAdvanced: false,\n enableTop: false,\n hideButtons: false,\n touched: true,\n }\n)\nconst emit = defineEmits<{\n (e: 'resetFilter'): void\n}>()\n\nconst resetFilter = () => {\n emit('resetFilter')\n}\n\nconst advancedFilter = ref(false)\n\nconst toggleAdvancedFilter = () => {\n advancedFilter.value = !advancedFilter.value\n}\n</script>\n\n<template>\n <VRow\n v-if=\"enableTop\"\n dense\n >\n <VCol class=\"\">\n <slot name=\"top\" />\n </VCol>\n </VRow>\n <VRow dense>\n <VCol\n v-if=\"enableAdvanced\"\n class=\"v-col-filters--show-hide\"\n cols=\"auto\"\n >\n <AFilterAdvancedButton\n :button-active=\"advancedFilter\"\n @advanced-filter=\"toggleAdvancedFilter\"\n />\n </VCol>\n <VCol class=\"\">\n <slot name=\"default\" />\n <VExpandTransition v-if=\"enableAdvanced\">\n <div v-show=\"advancedFilter\">\n <slot name=\"advanced\" />\n </div>\n </VExpandTransition>\n </VCol>\n <VCol\n v-if=\"!hideButtons\"\n class=\"v-col-filters--buttons text-right\"\n cols=\"auto\"\n >\n <slot name=\"buttons\">\n <AFilterSubmitButton :touched=\"touched\" />\n <AFilterResetButton @reset=\"resetFilter\" />\n </slot>\n </VCol>\n </VRow>\n</template>\n","import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { useI18n } from 'vue-i18n'\n\nexport enum Grant {\n Deny = 0,\n AllowOwner = 1,\n Allow = 2,\n Default = Deny,\n}\n\nexport function useGrant() {\n const { t } = useI18n()\n\n const grantOptions = ref<ValueObjectOption<Grant>[]>([\n {\n value: Grant.Deny,\n title: t('common.permission.grant.deny'),\n color: 'error',\n },\n {\n value: Grant.AllowOwner,\n title: t('common.permission.grant.allowOwner'),\n color: 'warning',\n },\n {\n value: Grant.Allow,\n title: t('common.permission.grant.allow'),\n color: 'success',\n },\n ])\n\n const getGrantOption = (value: Grant): ValueObjectOption<Grant> => {\n return grantOptions.value.find((item) => item.value === value) as ValueObjectOption<Grant>\n }\n\n return {\n grantOptions,\n getGrantOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { Grant, useGrant } from '@/model/valueObject/Grant'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n availableGrants: Grant[]\n selectedGrant: Grant | undefined\n}>()\nconst emit = defineEmits<{\n (e: 'change', data?: Grant): void\n}>()\nconst selectedGrant = computed({\n get() {\n return props.selectedGrant\n },\n set(newGrant) {\n emit('change', newGrant)\n },\n})\nconst { getGrantOption } = useGrant()\n</script>\n\n<template>\n <VBtnToggle\n v-model=\"selectedGrant\"\n divided\n density=\"compact\"\n variant=\"outlined\"\n class=\"text-disabled\"\n >\n <VBtn\n v-for=\"availableGrant in availableGrants\"\n :key=\"availableGrant\"\n :value=\"availableGrant\"\n :color=\"getGrantOption(availableGrant)?.color\"\n >\n {{ getGrantOption(availableGrant)?.title }}\n </VBtn>\n </VBtnToggle>\n</template>\n","import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { useI18n } from 'vue-i18n'\n\nexport enum GrantOrigin {\n Role = 'role',\n Group = 'group',\n User = 'user',\n DefaultGrant = 'default',\n Default = DefaultGrant,\n}\n\nexport function useGrantOrigin() {\n const { t } = useI18n()\n\n const grantOriginOptions = ref<ValueObjectOption<GrantOrigin>[]>([\n {\n value: GrantOrigin.Role,\n title: t('common.permission.grantOrigin.role'),\n },\n {\n value: GrantOrigin.Group,\n title: t('common.permission.grantOrigin.group'),\n },\n {\n value: GrantOrigin.User,\n title: t('common.permission.grantOrigin.user'),\n },\n {\n value: GrantOrigin.DefaultGrant,\n title: t('common.permission.grantOrigin.defaultGrant'),\n },\n ])\n\n const getGrantOriginOption = (value: GrantOrigin): ValueObjectOption<GrantOrigin> => {\n return grantOriginOptions.value.find((item) => item.value === value) as ValueObjectOption<GrantOrigin>\n }\n\n return {\n grantOriginOptions,\n getGrantOriginOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { Grant, useGrant } from '@/model/valueObject/Grant'\nimport { GrantOrigin, useGrantOrigin } from '@/model/valueObject/GrantOrigin'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n grant: Grant\n grantOrigin: GrantOrigin\n}>()\n\nconst { getGrantOption } = useGrant()\nconst grantOption = computed(() => getGrantOption(props.grant))\n\nconst { getGrantOriginOption } = useGrantOrigin()\nconst grantOriginOption = computed(() => getGrantOriginOption(props.grantOrigin))\n</script>\n\n<template>\n <VChip\n v-if=\"grantOption\"\n :color=\"grantOption.color\"\n label\n size=\"small\"\n >\n {{ grantOption.title }}\n <span\n v-if=\"grantOrigin !== GrantOrigin.DefaultGrant\"\n class=\"ml-1\"\n >({{ grantOriginOption?.title }})</span>\n </VChip>\n</template>\n","import { isUndefined } from '@/utils/common'\n\nexport const objectDeepFreeze = <T>(obj: T) => {\n const propNames = Object.getOwnPropertyNames(obj)\n for (const name of propNames) {\n const value = (obj as any)[name]\n if (value && typeof value === 'object') {\n objectDeepFreeze(value)\n }\n }\n return Object.freeze(obj)\n}\n\nexport const objectGetValues = <T>(obj: { [key: string]: T }): T[] => {\n return Object.keys(obj).map((k) => obj[k])\n}\n\nexport const objectGetValueByPath = <R = any>(obj: any, path: string, splitChar = '.') => {\n const a = path.split(splitChar)\n let o = obj\n while (a.length) {\n const n = a.shift()\n if (isUndefined(n) || !(n in o)) return\n o = o[n]\n }\n return o as R\n}\n\nexport const objectSetValueByPath = (obj: any, path: string, value: any, splitChar = '.') => {\n const a = path.split(splitChar)\n let o = obj\n while (a.length - 1) {\n const n = a.shift()\n if (isUndefined(n)) return // todo check if correct if\n if (!(n in o)) o[n] = {}\n o = o[n]\n }\n o[a[0]] = value\n}\n\nexport function objectDeletePropertyByPath<T>(obj: T, path: string, splitChar = '.'): T {\n const pathParts = path.split(splitChar)\n const lastIndex = pathParts.length - 1\n\n function recurse(obj: any, index = 0) {\n const key = pathParts[index]\n\n if (index === lastIndex) {\n delete obj[key]\n return\n }\n\n recurse(obj[key], index + 1)\n }\n\n recurse(obj)\n return obj\n}\n\nexport type Immutable<T> = {\n readonly [K in keyof T]: Immutable<T[K]>\n}\n","import type { IntegerId } from '@/types/common'\nimport { isObject } from '@/utils/common'\n\nexport interface OwnerAware {\n owners: IntegerId[]\n}\n\nexport const isOwnerAware = (value: unknown): value is OwnerAware => {\n return isObject(value) && Object.hasOwn(value, 'owners')\n}\n","import type { IntegerIdNullable } from '@/types/common'\n\nexport interface CreatedByAware {\n createdBy: IntegerIdNullable\n}\n\nexport const isCreatedByAware = (value: object): value is CreatedByAware => {\n return Object.hasOwn(value, 'createdBy')\n}\n","import { isDefined, isUndefined } from '@/utils/common'\nimport { objectGetValueByPath } from '@/utils/object'\nimport { Grant } from '@/model/valueObject/Grant'\nimport { isOwnerAware } from '@/types/OwnerAware'\nimport { isCreatedByAware } from '@/types/CreatedByAware'\nimport { inject } from 'vue'\nimport type { CurrentUserType, CustomAclResolver } from '@/AnzuSystemsCommonAdmin'\nimport type { AclValue } from '@/types/Permission'\nimport { CurrentUserSymbol, CustomAclResolverSymbol } from '@/components/injectionKeys'\n\nexport const ROLE_SUPER_ADMIN = 'ROLE_ADMIN'\n\nexport type AclResolverConfig = {\n disableInject?: true | undefined\n currentUser?: CurrentUserType\n customAclProvider?: CustomAclResolver\n}\n\nexport function useAcl<T extends AclValue = AclValue>(options?: AclResolverConfig) {\n const shouldInject = isUndefined(options) || isUndefined(options.disableInject)\n const currentUser =\n options?.currentUser ??\n (shouldInject ? (inject(CurrentUserSymbol, undefined) as CurrentUserType | undefined) : undefined)\n const customAclProvider =\n options?.customAclProvider ??\n (shouldInject ? (inject(CustomAclResolverSymbol, undefined) as CustomAclResolver) : undefined)\n\n const can = (acl: T, subject?: object): boolean => {\n if (isUndefined(currentUser))\n throw new Error('Composable useAcl can be used as a global state without providing current user as a parameter.')\n if (isDefined(customAclProvider) && isDefined(customAclProvider.can)) return customAclProvider.can(acl, subject)\n if (isUndefined(currentUser.value) || currentUser.value.id === 0) return false\n if (currentUser.value.roles.includes(ROLE_SUPER_ADMIN)) return true\n const permission = objectGetValueByPath(currentUser.value, 'resolvedPermissions.' + acl)\n if (isUndefined(permission)) return false\n switch (permission) {\n case Grant.Allow:\n return true\n case Grant.Deny:\n return false\n case Grant.AllowOwner:\n if (isUndefined(subject))\n throw new Error(`Required subject for acl \"${acl}\" to determine an ability to access the resource.`)\n return canOwner(subject)\n default:\n return false\n }\n }\n\n function canOwner(subject: object) {\n if (isUndefined(currentUser))\n throw new Error('Composable useAcl can be used as a global state without providing current user as a parameter.')\n if (!isUndefined(customAclProvider) && !isUndefined(customAclProvider.canOwner))\n return customAclProvider.canOwner(subject)\n if (currentUser.value) {\n if (isOwnerAware(subject)) {\n return subject.owners.includes(currentUser.value.id)\n }\n if (isCreatedByAware(subject)) {\n return subject.createdBy === currentUser.value.id\n }\n }\n return false\n }\n\n const canForAll = (acls: T[], subject?: object): boolean => {\n if (acls.length === 0) {\n return true\n }\n return acls.every((acl) => {\n return can(acl, subject)\n })\n }\n\n const canForSome = (acls: T[], subject?: object): boolean => {\n if (acls.length === 0) {\n return true\n }\n return acls.some((acl) => {\n return can(acl, subject)\n })\n }\n\n return {\n can,\n canForAll,\n canForSome,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useAcl } from '@/composables/system/ability'\nimport { inject, ref, watch } from 'vue'\nimport type { CurrentUserType } from '@/AnzuSystemsCommonAdmin'\nimport type { AclValue } from '@/types/Permission'\nimport { CurrentUserSymbol } from '@/components/injectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n permission: AclValue\n subject?: object\n }>(),\n {\n subject: undefined,\n }\n)\n\nconst currentUser = inject(CurrentUserSymbol) as CurrentUserType\nconst { can } = useAcl()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst allowed = ref<boolean>(can(props.permission, props.subject))\n\nwatch(currentUser, () => {\n allowed.value = can(props.permission, props.subject)\n})\n</script>\n\n<template>\n <slot v-if=\"allowed\" />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { dateTimePretty } from '@/utils/datetime'\nimport type { DatetimeUTCNullable } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n dateTime: DatetimeUTCNullable\n edgeDateValue?: string\n }>(),\n {\n edgeDateValue: 'n/a',\n }\n)\n\nconst pretty = computed(() => {\n return dateTimePretty(props.dateTime, props.edgeDateValue)\n})\n</script>\n\n<template>\n {{ pretty }}\n</template>\n","export var HOOKS = [\n \"onChange\",\n \"onClose\",\n \"onDayCreate\",\n \"onDestroy\",\n \"onKeyDown\",\n \"onMonthChange\",\n \"onOpen\",\n \"onParseConfig\",\n \"onReady\",\n \"onValueUpdate\",\n \"onYearChange\",\n \"onPreCalendarPosition\",\n];\nexport var defaults = {\n _disable: [],\n allowInput: false,\n allowInvalidPreload: false,\n altFormat: \"F j, Y\",\n altInput: false,\n altInputClass: \"form-control input\",\n animate: typeof window === \"object\" &&\n window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n ariaDateFormat: \"F j, Y\",\n autoFillDefaultTime: true,\n clickOpens: true,\n closeOnSelect: true,\n conjunction: \", \",\n dateFormat: \"Y-m-d\",\n defaultHour: 12,\n defaultMinute: 0,\n defaultSeconds: 0,\n disable: [],\n disableMobile: false,\n enableSeconds: false,\n enableTime: false,\n errorHandler: function (err) {\n return typeof console !== \"undefined\" && console.warn(err);\n },\n getWeek: function (givenDate) {\n var date = new Date(givenDate.getTime());\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n var week1 = new Date(date.getFullYear(), 0, 4);\n return (1 +\n Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n 3 +\n ((week1.getDay() + 6) % 7)) /\n 7));\n },\n hourIncrement: 1,\n ignoredFocusElements: [],\n inline: false,\n locale: \"default\",\n minuteIncrement: 5,\n mode: \"single\",\n monthSelectorType: \"dropdown\",\n nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n noCalendar: false,\n now: new Date(),\n onChange: [],\n onClose: [],\n onDayCreate: [],\n onDestroy: [],\n onKeyDown: [],\n onMonthChange: [],\n onOpen: [],\n onParseConfig: [],\n onReady: [],\n onValueUpdate: [],\n onYearChange: [],\n onPreCalendarPosition: [],\n plugins: [],\n position: \"auto\",\n positionElement: undefined,\n prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n shorthandCurrentMonth: false,\n showMonths: 1,\n static: false,\n time_24hr: false,\n weekNumbers: false,\n wrap: false,\n};\n","export var english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n },\n daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: function (nth) {\n var s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n monthAriaLabel: \"Month\",\n hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false,\n};\nexport default english;\n","export var pad = function (number, length) {\n if (length === void 0) { length = 2; }\n return (\"000\" + number).slice(length * -1);\n};\nexport var int = function (bool) { return (bool === true ? 1 : 0); };\nexport function debounce(fn, wait) {\n var t;\n return function () {\n var _this = this;\n var args = arguments;\n clearTimeout(t);\n t = setTimeout(function () { return fn.apply(_this, args); }, wait);\n };\n}\nexport var arrayify = function (obj) {\n return obj instanceof Array ? obj : [obj];\n};\n","export function toggleClass(elem, className, bool) {\n if (bool === true)\n return elem.classList.add(className);\n elem.classList.remove(className);\n}\nexport function createElement(tag, className, content) {\n var e = window.document.createElement(tag);\n className = className || \"\";\n content = content || \"\";\n e.className = className;\n if (content !== undefined)\n e.textContent = content;\n return e;\n}\nexport function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n}\nexport function findParent(node, condition) {\n if (condition(node))\n return node;\n else if (node.parentNode)\n return findParent(node.parentNode, condition);\n return undefined;\n}\nexport function createNumberInput(inputClassName, opts) {\n var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n numInput.type = \"number\";\n }\n else {\n numInput.type = \"text\";\n numInput.pattern = \"\\\\d*\";\n }\n if (opts !== undefined)\n for (var key in opts)\n numInput.setAttribute(key, opts[key]);\n wrapper.appendChild(numInput);\n wrapper.appendChild(arrowUp);\n wrapper.appendChild(arrowDown);\n return wrapper;\n}\nexport function getEventTarget(event) {\n try {\n if (typeof event.composedPath === \"function\") {\n var path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n catch (error) {\n return event.target;\n }\n}\n","import { int, pad } from \"../utils\";\nvar doNothing = function () { return undefined; };\nexport var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\nexport var revFormat = {\n D: doNothing,\n F: function (dateObj, monthName, locale) {\n dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n },\n G: function (dateObj, hour) {\n dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n },\n H: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n J: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n K: function (dateObj, amPM, locale) {\n dateObj.setHours((dateObj.getHours() % 12) +\n 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n },\n M: function (dateObj, shortMonth, locale) {\n dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n },\n S: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n W: function (dateObj, weekNum, locale) {\n var weekNumber = parseInt(weekNum);\n var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n return date;\n },\n Y: function (dateObj, year) {\n dateObj.setFullYear(parseFloat(year));\n },\n Z: function (_, ISODate) { return new Date(ISODate); },\n d: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n h: function (dateObj, hour) {\n dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n },\n i: function (dateObj, minutes) {\n dateObj.setMinutes(parseFloat(minutes));\n },\n j: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n l: doNothing,\n m: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n n: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n s: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n u: function (_, unixMillSeconds) {\n return new Date(parseFloat(unixMillSeconds));\n },\n w: doNothing,\n y: function (dateObj, year) {\n dateObj.setFullYear(2000 + parseFloat(year));\n },\n};\nexport var tokenRegex = {\n D: \"\",\n F: \"\",\n G: \"(\\\\d\\\\d|\\\\d)\",\n H: \"(\\\\d\\\\d|\\\\d)\",\n J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n K: \"\",\n M: \"\",\n S: \"(\\\\d\\\\d|\\\\d)\",\n U: \"(.+)\",\n W: \"(\\\\d\\\\d|\\\\d)\",\n Y: \"(\\\\d{4})\",\n Z: \"(.+)\",\n d: \"(\\\\d\\\\d|\\\\d)\",\n h: \"(\\\\d\\\\d|\\\\d)\",\n i: \"(\\\\d\\\\d|\\\\d)\",\n j: \"(\\\\d\\\\d|\\\\d)\",\n l: \"\",\n m: \"(\\\\d\\\\d|\\\\d)\",\n n: \"(\\\\d\\\\d|\\\\d)\",\n s: \"(\\\\d\\\\d|\\\\d)\",\n u: \"(.+)\",\n w: \"(\\\\d\\\\d|\\\\d)\",\n y: \"(\\\\d{2})\",\n};\nexport var formats = {\n Z: function (date) { return date.toISOString(); },\n D: function (date, locale, options) {\n return locale.weekdays.shorthand[formats.w(date, locale, options)];\n },\n F: function (date, locale, options) {\n return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n },\n G: function (date, locale, options) {\n return pad(formats.h(date, locale, options));\n },\n H: function (date) { return pad(date.getHours()); },\n J: function (date, locale) {\n return locale.ordinal !== undefined\n ? date.getDate() + locale.ordinal(date.getDate())\n : date.getDate();\n },\n K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n M: function (date, locale) {\n return monthToStr(date.getMonth(), true, locale);\n },\n S: function (date) { return pad(date.getSeconds()); },\n U: function (date) { return date.getTime() / 1000; },\n W: function (date, _, options) {\n return options.getWeek(date);\n },\n Y: function (date) { return pad(date.getFullYear(), 4); },\n d: function (date) { return pad(date.getDate()); },\n h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n i: function (date) { return pad(date.getMinutes()); },\n j: function (date) { return date.getDate(); },\n l: function (date, locale) {\n return locale.weekdays.longhand[date.getDay()];\n },\n m: function (date) { return pad(date.getMonth() + 1); },\n n: function (date) { return date.getMonth() + 1; },\n s: function (date) { return date.getSeconds(); },\n u: function (date) { return date.getTime(); },\n w: function (date) { return date.getDay(); },\n y: function (date) { return String(date.getFullYear()).substring(2); },\n};\n","import { tokenRegex, revFormat, formats, } from \"./formatting\";\nimport { defaults } from \"../types/options\";\nimport { english } from \"../l10n/default\";\nexport var createDateFormatter = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;\n return function (dateObj, frmt, overrideLocale) {\n var locale = overrideLocale || l10n;\n if (config.formatDate !== undefined && !isMobile) {\n return config.formatDate(dateObj, frmt, locale);\n }\n return frmt\n .split(\"\")\n .map(function (c, i, arr) {\n return formats[c] && arr[i - 1] !== \"\\\\\"\n ? formats[c](dateObj, locale, config)\n : c !== \"\\\\\"\n ? c\n : \"\";\n })\n .join(\"\");\n };\n};\nexport var createDateParser = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n return function (date, givenFormat, timeless, customLocale) {\n if (date !== 0 && !date)\n return undefined;\n var locale = customLocale || l10n;\n var parsedDate;\n var dateOrig = date;\n if (date instanceof Date)\n parsedDate = new Date(date.getTime());\n else if (typeof date !== \"string\" &&\n date.toFixed !== undefined)\n parsedDate = new Date(date);\n else if (typeof date === \"string\") {\n var format = givenFormat || (config || defaults).dateFormat;\n var datestr = String(date).trim();\n if (datestr === \"today\") {\n parsedDate = new Date();\n timeless = true;\n }\n else if (config && config.parseDate) {\n parsedDate = config.parseDate(date, format);\n }\n else if (/Z$/.test(datestr) ||\n /GMT$/.test(datestr)) {\n parsedDate = new Date(date);\n }\n else {\n var matched = void 0, ops = [];\n for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n var token = format[i];\n var isBackSlash = token === \"\\\\\";\n var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n if (tokenRegex[token] && !escaped) {\n regexStr += tokenRegex[token];\n var match = new RegExp(regexStr).exec(date);\n if (match && (matched = true)) {\n ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n fn: revFormat[token],\n val: match[++matchIndex],\n });\n }\n }\n else if (!isBackSlash)\n regexStr += \".\";\n }\n parsedDate =\n !config || !config.noCalendar\n ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n : new Date(new Date().setHours(0, 0, 0, 0));\n ops.forEach(function (_a) {\n var fn = _a.fn, val = _a.val;\n return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n });\n parsedDate = matched ? parsedDate : undefined;\n }\n }\n if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n return undefined;\n }\n if (timeless === true)\n parsedDate.setHours(0, 0, 0, 0);\n return parsedDate;\n };\n};\nexport function compareDates(date1, date2, timeless) {\n if (timeless === void 0) { timeless = true; }\n if (timeless !== false) {\n return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n new Date(date2.getTime()).setHours(0, 0, 0, 0));\n }\n return date1.getTime() - date2.getTime();\n}\nexport function compareTimes(date1, date2) {\n return (3600 * (date1.getHours() - date2.getHours()) +\n 60 * (date1.getMinutes() - date2.getMinutes()) +\n date1.getSeconds() -\n date2.getSeconds());\n}\nexport var isBetween = function (ts, ts1, ts2) {\n return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n};\nexport var calculateSecondsSinceMidnight = function (hours, minutes, seconds) {\n return hours * 3600 + minutes * 60 + seconds;\n};\nexport var parseSeconds = function (secondsSinceMidnight) {\n var hours = Math.floor(secondsSinceMidnight / 3600), minutes = (secondsSinceMidnight - hours * 3600) / 60;\n return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60];\n};\nexport var duration = {\n DAY: 86400000,\n};\nexport function getDefaultHours(config) {\n var hours = config.defaultHour;\n var minutes = config.defaultMinute;\n var seconds = config.defaultSeconds;\n if (config.minDate !== undefined) {\n var minHour = config.minDate.getHours();\n var minMinutes = config.minDate.getMinutes();\n var minSeconds = config.minDate.getSeconds();\n if (hours < minHour) {\n hours = minHour;\n }\n if (hours === minHour && minutes < minMinutes) {\n minutes = minMinutes;\n }\n if (hours === minHour && minutes === minMinutes && seconds < minSeconds)\n seconds = config.minDate.getSeconds();\n }\n if (config.maxDate !== undefined) {\n var maxHr = config.maxDate.getHours();\n var maxMinutes = config.maxDate.getMinutes();\n hours = Math.min(hours, maxHr);\n if (hours === maxHr)\n minutes = Math.min(maxMinutes, minutes);\n if (hours === maxHr && minutes === maxMinutes)\n seconds = config.maxDate.getSeconds();\n }\n return { hours: hours, minutes: minutes, seconds: seconds };\n}\n","\"use strict\";\nif (typeof Object.assign !== \"function\") {\n Object.assign = function (target) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (!target) {\n throw TypeError(\"Cannot convert undefined or null to object\");\n }\n var _loop_1 = function (source) {\n if (source) {\n Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n }\n };\n for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n var source = args_1[_a];\n _loop_1(source);\n }\n return target;\n };\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { defaults as defaultOptions, HOOKS, } from \"./types/options\";\nimport English from \"./l10n/default\";\nimport { arrayify, debounce, int, pad } from \"./utils\";\nimport { clearNode, createElement, createNumberInput, findParent, toggleClass, getEventTarget, } from \"./utils/dom\";\nimport { compareDates, createDateParser, createDateFormatter, duration, isBetween, getDefaultHours, calculateSecondsSinceMidnight, parseSeconds, } from \"./utils/dates\";\nimport { tokenRegex, monthToStr } from \"./utils/formatting\";\nimport \"./utils/polyfills\";\nvar DEBOUNCED_CHANGE_MS = 300;\nfunction FlatpickrInstance(element, instanceConfig) {\n var self = {\n config: __assign(__assign({}, defaultOptions), flatpickr.defaultConfig),\n l10n: English,\n };\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n self._handlers = [];\n self.pluginElements = [];\n self.loadedPlugins = [];\n self._bind = bind;\n self._setHoursFromDate = setHoursFromDate;\n self._positionCalendar = positionCalendar;\n self.changeMonth = changeMonth;\n self.changeYear = changeYear;\n self.clear = clear;\n self.close = close;\n self.onMouseOver = onMouseOver;\n self._createElement = createElement;\n self.createDay = createDay;\n self.destroy = destroy;\n self.isEnabled = isEnabled;\n self.jumpToDate = jumpToDate;\n self.updateValue = updateValue;\n self.open = open;\n self.redraw = redraw;\n self.set = set;\n self.setDate = setDate;\n self.toggle = toggle;\n function setupHelperFunctions() {\n self.utils = {\n getDaysInMonth: function (month, yr) {\n if (month === void 0) { month = self.currentMonth; }\n if (yr === void 0) { yr = self.currentYear; }\n if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n return 29;\n return self.l10n.daysInMonth[month];\n },\n };\n }\n function init() {\n self.element = self.input = element;\n self.isOpen = false;\n parseConfig();\n setupLocale();\n setupInputs();\n setupDates();\n setupHelperFunctions();\n if (!self.isMobile)\n build();\n bindEvents();\n if (self.selectedDates.length || self.config.noCalendar) {\n if (self.config.enableTime) {\n setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n }\n updateValue(false);\n }\n setCalendarWidth();\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n if (!self.isMobile && isSafari) {\n positionCalendar();\n }\n triggerEvent(\"onReady\");\n }\n function getClosestActiveElement() {\n var _a;\n return (((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode())\n .activeElement || document.activeElement);\n }\n function bindToInstance(fn) {\n return fn.bind(self);\n }\n function setCalendarWidth() {\n var config = self.config;\n if (config.weekNumbers === false && config.showMonths === 1) {\n return;\n }\n else if (config.noCalendar !== true) {\n window.requestAnimationFrame(function () {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.style.visibility = \"hidden\";\n self.calendarContainer.style.display = \"block\";\n }\n if (self.daysContainer !== undefined) {\n var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n self.daysContainer.style.width = daysWidth + \"px\";\n self.calendarContainer.style.width =\n daysWidth +\n (self.weekWrapper !== undefined\n ? self.weekWrapper.offsetWidth\n : 0) +\n \"px\";\n self.calendarContainer.style.removeProperty(\"visibility\");\n self.calendarContainer.style.removeProperty(\"display\");\n }\n });\n }\n }\n function updateTime(e) {\n if (self.selectedDates.length === 0) {\n var defaultDate = self.config.minDate === undefined ||\n compareDates(new Date(), self.config.minDate) >= 0\n ? new Date()\n : new Date(self.config.minDate.getTime());\n var defaults = getDefaultHours(self.config);\n defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n self.selectedDates = [defaultDate];\n self.latestSelectedDateObj = defaultDate;\n }\n if (e !== undefined && e.type !== \"blur\") {\n timeWrapper(e);\n }\n var prevValue = self._input.value;\n setHoursFromInputs();\n updateValue();\n if (self._input.value !== prevValue) {\n self._debouncedChange();\n }\n }\n function ampm2military(hour, amPM) {\n return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n }\n function military2ampm(hour) {\n switch (hour % 24) {\n case 0:\n case 12:\n return 12;\n default:\n return hour % 12;\n }\n }\n function setHoursFromInputs() {\n if (self.hourElement === undefined || self.minuteElement === undefined)\n return;\n var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n ? (parseInt(self.secondElement.value, 10) || 0) % 60\n : 0;\n if (self.amPM !== undefined) {\n hours = ampm2military(hours, self.amPM.textContent);\n }\n var limitMinHours = self.config.minTime !== undefined ||\n (self.config.minDate &&\n self.minDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n 0);\n var limitMaxHours = self.config.maxTime !== undefined ||\n (self.config.maxDate &&\n self.maxDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n 0);\n if (self.config.maxTime !== undefined &&\n self.config.minTime !== undefined &&\n self.config.minTime > self.config.maxTime) {\n var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());\n var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());\n var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);\n if (currentTime > maxBound && currentTime < minBound) {\n var result = parseSeconds(minBound);\n hours = result[0];\n minutes = result[1];\n seconds = result[2];\n }\n }\n else {\n if (limitMaxHours) {\n var maxTime = self.config.maxTime !== undefined\n ? self.config.maxTime\n : self.config.maxDate;\n hours = Math.min(hours, maxTime.getHours());\n if (hours === maxTime.getHours())\n minutes = Math.min(minutes, maxTime.getMinutes());\n if (minutes === maxTime.getMinutes())\n seconds = Math.min(seconds, maxTime.getSeconds());\n }\n if (limitMinHours) {\n var minTime = self.config.minTime !== undefined\n ? self.config.minTime\n : self.config.minDate;\n hours = Math.max(hours, minTime.getHours());\n if (hours === minTime.getHours() && minutes < minTime.getMinutes())\n minutes = minTime.getMinutes();\n if (minutes === minTime.getMinutes())\n seconds = Math.max(seconds, minTime.getSeconds());\n }\n }\n setHours(hours, minutes, seconds);\n }\n function setHoursFromDate(dateObj) {\n var date = dateObj || self.latestSelectedDateObj;\n if (date && date instanceof Date) {\n setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n }\n }\n function setHours(hours, minutes, seconds) {\n if (self.latestSelectedDateObj !== undefined) {\n self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n }\n if (!self.hourElement || !self.minuteElement || self.isMobile)\n return;\n self.hourElement.value = pad(!self.config.time_24hr\n ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n : hours);\n self.minuteElement.value = pad(minutes);\n if (self.amPM !== undefined)\n self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n if (self.secondElement !== undefined)\n self.secondElement.value = pad(seconds);\n }\n function onYearInput(event) {\n var eventTarget = getEventTarget(event);\n var year = parseInt(eventTarget.value) + (event.delta || 0);\n if (year / 1000 > 1 ||\n (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n changeYear(year);\n }\n }\n function bind(element, event, handler, options) {\n if (event instanceof Array)\n return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n if (element instanceof Array)\n return element.forEach(function (el) { return bind(el, event, handler, options); });\n element.addEventListener(event, handler, options);\n self._handlers.push({\n remove: function () { return element.removeEventListener(event, handler, options); },\n });\n }\n function triggerChange() {\n triggerEvent(\"onChange\");\n }\n function bindEvents() {\n if (self.config.wrap) {\n [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n return bind(el, \"click\", self[evt]);\n });\n });\n }\n if (self.isMobile) {\n setupMobile();\n return;\n }\n var debouncedResize = debounce(onResize, 50);\n self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n bind(self.daysContainer, \"mouseover\", function (e) {\n if (self.config.mode === \"range\")\n onMouseOver(getEventTarget(e));\n });\n bind(self._input, \"keydown\", onKeyDown);\n if (self.calendarContainer !== undefined) {\n bind(self.calendarContainer, \"keydown\", onKeyDown);\n }\n if (!self.config.inline && !self.config.static)\n bind(window, \"resize\", debouncedResize);\n if (window.ontouchstart !== undefined)\n bind(window.document, \"touchstart\", documentClick);\n else\n bind(window.document, \"mousedown\", documentClick);\n bind(window.document, \"focus\", documentClick, { capture: true });\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n if (self.daysContainer !== undefined) {\n bind(self.monthNav, \"click\", onMonthNavClick);\n bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n bind(self.daysContainer, \"click\", selectDate);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined) {\n var selText = function (e) {\n return getEventTarget(e).select();\n };\n bind(self.timeContainer, [\"increment\"], updateTime);\n bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n bind(self.timeContainer, \"click\", timeIncrement);\n bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n if (self.secondElement !== undefined)\n bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n if (self.amPM !== undefined) {\n bind(self.amPM, \"click\", function (e) {\n updateTime(e);\n });\n }\n }\n if (self.config.allowInput) {\n bind(self._input, \"blur\", onBlur);\n }\n }\n function jumpToDate(jumpDate, triggerChange) {\n var jumpTo = jumpDate !== undefined\n ? self.parseDate(jumpDate)\n : self.latestSelectedDateObj ||\n (self.config.minDate && self.config.minDate > self.now\n ? self.config.minDate\n : self.config.maxDate && self.config.maxDate < self.now\n ? self.config.maxDate\n : self.now);\n var oldYear = self.currentYear;\n var oldMonth = self.currentMonth;\n try {\n if (jumpTo !== undefined) {\n self.currentYear = jumpTo.getFullYear();\n self.currentMonth = jumpTo.getMonth();\n }\n }\n catch (e) {\n e.message = \"Invalid date supplied: \" + jumpTo;\n self.config.errorHandler(e);\n }\n if (triggerChange && self.currentYear !== oldYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n if (triggerChange &&\n (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n triggerEvent(\"onMonthChange\");\n }\n self.redraw();\n }\n function timeIncrement(e) {\n var eventTarget = getEventTarget(e);\n if (~eventTarget.className.indexOf(\"arrow\"))\n incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n }\n function incrementNumInput(e, delta, inputElem) {\n var target = e && getEventTarget(e);\n var input = inputElem ||\n (target && target.parentNode && target.parentNode.firstChild);\n var event = createEvent(\"increment\");\n event.delta = delta;\n input && input.dispatchEvent(event);\n }\n function build() {\n var fragment = window.document.createDocumentFragment();\n self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n self.calendarContainer.tabIndex = -1;\n if (!self.config.noCalendar) {\n fragment.appendChild(buildMonthNav());\n self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n if (self.config.weekNumbers) {\n var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n self.innerContainer.appendChild(weekWrapper);\n self.weekNumbers = weekNumbers;\n self.weekWrapper = weekWrapper;\n }\n self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n self.rContainer.appendChild(buildWeekdays());\n if (!self.daysContainer) {\n self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n self.daysContainer.tabIndex = -1;\n }\n buildDays();\n self.rContainer.appendChild(self.daysContainer);\n self.innerContainer.appendChild(self.rContainer);\n fragment.appendChild(self.innerContainer);\n }\n if (self.config.enableTime) {\n fragment.appendChild(buildTime());\n }\n toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n self.calendarContainer.appendChild(fragment);\n var customAppend = self.config.appendTo !== undefined &&\n self.config.appendTo.nodeType !== undefined;\n if (self.config.inline || self.config.static) {\n self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n if (self.config.inline) {\n if (!customAppend && self.element.parentNode)\n self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n else if (self.config.appendTo !== undefined)\n self.config.appendTo.appendChild(self.calendarContainer);\n }\n if (self.config.static) {\n var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n if (self.element.parentNode)\n self.element.parentNode.insertBefore(wrapper, self.element);\n wrapper.appendChild(self.element);\n if (self.altInput)\n wrapper.appendChild(self.altInput);\n wrapper.appendChild(self.calendarContainer);\n }\n }\n if (!self.config.static && !self.config.inline)\n (self.config.appendTo !== undefined\n ? self.config.appendTo\n : window.document.body).appendChild(self.calendarContainer);\n }\n function createDay(className, date, _dayNumber, i) {\n var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", className, date.getDate().toString());\n dayElement.dateObj = date;\n dayElement.$i = i;\n dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n if (className.indexOf(\"hidden\") === -1 &&\n compareDates(date, self.now) === 0) {\n self.todayDateElem = dayElement;\n dayElement.classList.add(\"today\");\n dayElement.setAttribute(\"aria-current\", \"date\");\n }\n if (dateIsEnabled) {\n dayElement.tabIndex = -1;\n if (isDateSelected(date)) {\n dayElement.classList.add(\"selected\");\n self.selectedDateElem = dayElement;\n if (self.config.mode === \"range\") {\n toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n compareDates(date, self.selectedDates[0], true) === 0);\n toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n compareDates(date, self.selectedDates[1], true) === 0);\n if (className === \"nextMonthDay\")\n dayElement.classList.add(\"inRange\");\n }\n }\n }\n else {\n dayElement.classList.add(\"flatpickr-disabled\");\n }\n if (self.config.mode === \"range\") {\n if (isDateInRange(date) && !isDateSelected(date))\n dayElement.classList.add(\"inRange\");\n }\n if (self.weekNumbers &&\n self.config.showMonths === 1 &&\n className !== \"prevMonthDay\" &&\n i % 7 === 6) {\n self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n }\n triggerEvent(\"onDayCreate\", dayElement);\n return dayElement;\n }\n function focusOnDayElem(targetNode) {\n targetNode.focus();\n if (self.config.mode === \"range\")\n onMouseOver(targetNode);\n }\n function getFirstAvailableDay(delta) {\n var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n for (var m = startMonth; m != endMonth; m += delta) {\n var month = self.daysContainer.children[m];\n var startIndex = delta > 0 ? 0 : month.children.length - 1;\n var endIndex = delta > 0 ? month.children.length : -1;\n for (var i = startIndex; i != endIndex; i += delta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n return c;\n }\n }\n return undefined;\n }\n function getNextAvailableDay(current, delta) {\n var givenMonth = current.className.indexOf(\"Month\") === -1\n ? current.dateObj.getMonth()\n : self.currentMonth;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n var loopDelta = delta > 0 ? 1 : -1;\n for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n var month = self.daysContainer.children[m];\n var startIndex = givenMonth - self.currentMonth === m\n ? current.$i + delta\n : delta < 0\n ? month.children.length - 1\n : 0;\n var numMonthDays = month.children.length;\n for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 &&\n isEnabled(c.dateObj) &&\n Math.abs(current.$i - i) >= Math.abs(delta))\n return focusOnDayElem(c);\n }\n }\n self.changeMonth(loopDelta);\n focusOnDay(getFirstAvailableDay(loopDelta), 0);\n return undefined;\n }\n function focusOnDay(current, offset) {\n var activeElement = getClosestActiveElement();\n var dayFocused = isInView(activeElement || document.body);\n var startElem = current !== undefined\n ? current\n : dayFocused\n ? activeElement\n : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n ? self.selectedDateElem\n : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n ? self.todayDateElem\n : getFirstAvailableDay(offset > 0 ? 1 : -1);\n if (startElem === undefined) {\n self._input.focus();\n }\n else if (!dayFocused) {\n focusOnDayElem(startElem);\n }\n else {\n getNextAvailableDay(startElem, offset);\n }\n }\n function buildMonthDays(year, month) {\n var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day \" + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n }\n for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n }\n for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day \" + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n }\n var dayContainer = createElement(\"div\", \"dayContainer\");\n dayContainer.appendChild(days);\n return dayContainer;\n }\n function buildDays() {\n if (self.daysContainer === undefined) {\n return;\n }\n clearNode(self.daysContainer);\n if (self.weekNumbers)\n clearNode(self.weekNumbers);\n var frag = document.createDocumentFragment();\n for (var i = 0; i < self.config.showMonths; i++) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n }\n self.daysContainer.appendChild(frag);\n self.days = self.daysContainer.firstChild;\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n onMouseOver();\n }\n }\n function buildMonthSwitch() {\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType !== \"dropdown\")\n return;\n var shouldBuildMonth = function (month) {\n if (self.config.minDate !== undefined &&\n self.currentYear === self.config.minDate.getFullYear() &&\n month < self.config.minDate.getMonth()) {\n return false;\n }\n return !(self.config.maxDate !== undefined &&\n self.currentYear === self.config.maxDate.getFullYear() &&\n month > self.config.maxDate.getMonth());\n };\n self.monthsDropdownContainer.tabIndex = -1;\n self.monthsDropdownContainer.innerHTML = \"\";\n for (var i = 0; i < 12; i++) {\n if (!shouldBuildMonth(i))\n continue;\n var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n month.value = new Date(self.currentYear, i).getMonth().toString();\n month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n month.tabIndex = -1;\n if (self.currentMonth === i) {\n month.selected = true;\n }\n self.monthsDropdownContainer.appendChild(month);\n }\n }\n function buildMonth() {\n var container = createElement(\"div\", \"flatpickr-month\");\n var monthNavFragment = window.document.createDocumentFragment();\n var monthElement;\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n monthElement = createElement(\"span\", \"cur-month\");\n }\n else {\n self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n bind(self.monthsDropdownContainer, \"change\", function (e) {\n var target = getEventTarget(e);\n var selectedMonth = parseInt(target.value, 10);\n self.changeMonth(selectedMonth - self.currentMonth);\n triggerEvent(\"onMonthChange\");\n });\n buildMonthSwitch();\n monthElement = self.monthsDropdownContainer;\n }\n var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n if (self.config.minDate) {\n yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n }\n if (self.config.maxDate) {\n yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n yearElement.disabled =\n !!self.config.minDate &&\n self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n }\n var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n currentMonth.appendChild(monthElement);\n currentMonth.appendChild(yearInput);\n monthNavFragment.appendChild(currentMonth);\n container.appendChild(monthNavFragment);\n return {\n container: container,\n yearElement: yearElement,\n monthElement: monthElement,\n };\n }\n function buildMonths() {\n clearNode(self.monthNav);\n self.monthNav.appendChild(self.prevMonthNav);\n if (self.config.showMonths) {\n self.yearElements = [];\n self.monthElements = [];\n }\n for (var m = self.config.showMonths; m--;) {\n var month = buildMonth();\n self.yearElements.push(month.yearElement);\n self.monthElements.push(month.monthElement);\n self.monthNav.appendChild(month.container);\n }\n self.monthNav.appendChild(self.nextMonthNav);\n }\n function buildMonthNav() {\n self.monthNav = createElement(\"div\", \"flatpickr-months\");\n self.yearElements = [];\n self.monthElements = [];\n self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n self.prevMonthNav.innerHTML = self.config.prevArrow;\n self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n self.nextMonthNav.innerHTML = self.config.nextArrow;\n buildMonths();\n Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n get: function () { return self.__hidePrevMonthArrow; },\n set: function (bool) {\n if (self.__hidePrevMonthArrow !== bool) {\n toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n self.__hidePrevMonthArrow = bool;\n }\n },\n });\n Object.defineProperty(self, \"_hideNextMonthArrow\", {\n get: function () { return self.__hideNextMonthArrow; },\n set: function (bool) {\n if (self.__hideNextMonthArrow !== bool) {\n toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n self.__hideNextMonthArrow = bool;\n }\n },\n });\n self.currentYearElement = self.yearElements[0];\n updateNavigationCurrentMonth();\n return self.monthNav;\n }\n function buildTime() {\n self.calendarContainer.classList.add(\"hasTime\");\n if (self.config.noCalendar)\n self.calendarContainer.classList.add(\"noCalendar\");\n var defaults = getDefaultHours(self.config);\n self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n self.timeContainer.tabIndex = -1;\n var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n var hourInput = createNumberInput(\"flatpickr-hour\", {\n \"aria-label\": self.l10n.hourAriaLabel,\n });\n self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n var minuteInput = createNumberInput(\"flatpickr-minute\", {\n \"aria-label\": self.l10n.minuteAriaLabel,\n });\n self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n self.hourElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getHours()\n : self.config.time_24hr\n ? defaults.hours\n : military2ampm(defaults.hours));\n self.minuteElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getMinutes()\n : defaults.minutes);\n self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n self.hourElement.setAttribute(\"maxlength\", \"2\");\n self.minuteElement.setAttribute(\"min\", \"0\");\n self.minuteElement.setAttribute(\"max\", \"59\");\n self.minuteElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(hourInput);\n self.timeContainer.appendChild(separator);\n self.timeContainer.appendChild(minuteInput);\n if (self.config.time_24hr)\n self.timeContainer.classList.add(\"time24hr\");\n if (self.config.enableSeconds) {\n self.timeContainer.classList.add(\"hasSeconds\");\n var secondInput = createNumberInput(\"flatpickr-second\");\n self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n self.secondElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getSeconds()\n : defaults.seconds);\n self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n self.secondElement.setAttribute(\"min\", \"0\");\n self.secondElement.setAttribute(\"max\", \"59\");\n self.secondElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n self.timeContainer.appendChild(secondInput);\n }\n if (!self.config.time_24hr) {\n self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n ? self.hourElement.value\n : self.config.defaultHour) > 11)]);\n self.amPM.title = self.l10n.toggleTitle;\n self.amPM.tabIndex = -1;\n self.timeContainer.appendChild(self.amPM);\n }\n return self.timeContainer;\n }\n function buildWeekdays() {\n if (!self.weekdayContainer)\n self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n else\n clearNode(self.weekdayContainer);\n for (var i = self.config.showMonths; i--;) {\n var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n self.weekdayContainer.appendChild(container);\n }\n updateWeekdays();\n return self.weekdayContainer;\n }\n function updateWeekdays() {\n if (!self.weekdayContainer) {\n return;\n }\n var firstDayOfWeek = self.l10n.firstDayOfWeek;\n var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);\n if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));\n }\n for (var i = self.config.showMonths; i--;) {\n self.weekdayContainer.children[i].innerHTML = \"\\n <span class='flatpickr-weekday'>\\n \" + weekdays.join(\"</span><span class='flatpickr-weekday'>\") + \"\\n </span>\\n \";\n }\n }\n function buildWeeks() {\n self.calendarContainer.classList.add(\"hasWeeks\");\n var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n weekWrapper.appendChild(weekNumbers);\n return {\n weekWrapper: weekWrapper,\n weekNumbers: weekNumbers,\n };\n }\n function changeMonth(value, isOffset) {\n if (isOffset === void 0) { isOffset = true; }\n var delta = isOffset ? value : value - self.currentMonth;\n if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n (delta > 0 && self._hideNextMonthArrow === true))\n return;\n self.currentMonth += delta;\n if (self.currentMonth < 0 || self.currentMonth > 11) {\n self.currentYear += self.currentMonth > 11 ? 1 : -1;\n self.currentMonth = (self.currentMonth + 12) % 12;\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n buildDays();\n triggerEvent(\"onMonthChange\");\n updateNavigationCurrentMonth();\n }\n function clear(triggerChangeEvent, toInitial) {\n if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n if (toInitial === void 0) { toInitial = true; }\n self.input.value = \"\";\n if (self.altInput !== undefined)\n self.altInput.value = \"\";\n if (self.mobileInput !== undefined)\n self.mobileInput.value = \"\";\n self.selectedDates = [];\n self.latestSelectedDateObj = undefined;\n if (toInitial === true) {\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n }\n if (self.config.enableTime === true) {\n var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;\n setHours(hours, minutes, seconds);\n }\n self.redraw();\n if (triggerChangeEvent)\n triggerEvent(\"onChange\");\n }\n function close() {\n self.isOpen = false;\n if (!self.isMobile) {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.classList.remove(\"open\");\n }\n if (self._input !== undefined) {\n self._input.classList.remove(\"active\");\n }\n }\n triggerEvent(\"onClose\");\n }\n function destroy() {\n if (self.config !== undefined)\n triggerEvent(\"onDestroy\");\n for (var i = self._handlers.length; i--;) {\n self._handlers[i].remove();\n }\n self._handlers = [];\n if (self.mobileInput) {\n if (self.mobileInput.parentNode)\n self.mobileInput.parentNode.removeChild(self.mobileInput);\n self.mobileInput = undefined;\n }\n else if (self.calendarContainer && self.calendarContainer.parentNode) {\n if (self.config.static && self.calendarContainer.parentNode) {\n var wrapper = self.calendarContainer.parentNode;\n wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n if (wrapper.parentNode) {\n while (wrapper.firstChild)\n wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n }\n }\n else\n self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n }\n if (self.altInput) {\n self.input.type = \"text\";\n if (self.altInput.parentNode)\n self.altInput.parentNode.removeChild(self.altInput);\n delete self.altInput;\n }\n if (self.input) {\n self.input.type = self.input._type;\n self.input.classList.remove(\"flatpickr-input\");\n self.input.removeAttribute(\"readonly\");\n }\n [\n \"_showTimeInput\",\n \"latestSelectedDateObj\",\n \"_hideNextMonthArrow\",\n \"_hidePrevMonthArrow\",\n \"__hideNextMonthArrow\",\n \"__hidePrevMonthArrow\",\n \"isMobile\",\n \"isOpen\",\n \"selectedDateElem\",\n \"minDateHasTime\",\n \"maxDateHasTime\",\n \"days\",\n \"daysContainer\",\n \"_input\",\n \"_positionElement\",\n \"innerContainer\",\n \"rContainer\",\n \"monthNav\",\n \"todayDateElem\",\n \"calendarContainer\",\n \"weekdayContainer\",\n \"prevMonthNav\",\n \"nextMonthNav\",\n \"monthsDropdownContainer\",\n \"currentMonthElement\",\n \"currentYearElement\",\n \"navigationCurrentMonth\",\n \"selectedDateElem\",\n \"config\",\n ].forEach(function (k) {\n try {\n delete self[k];\n }\n catch (_) { }\n });\n }\n function isCalendarElem(elem) {\n return self.calendarContainer.contains(elem);\n }\n function documentClick(e) {\n if (self.isOpen && !self.config.inline) {\n var eventTarget_1 = getEventTarget(e);\n var isCalendarElement = isCalendarElem(eventTarget_1);\n var isInput = eventTarget_1 === self.input ||\n eventTarget_1 === self.altInput ||\n self.element.contains(eventTarget_1) ||\n (e.path &&\n e.path.indexOf &&\n (~e.path.indexOf(self.input) ||\n ~e.path.indexOf(self.altInput)));\n var lostFocus = !isInput &&\n !isCalendarElement &&\n !isCalendarElem(e.relatedTarget);\n var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n return elem.contains(eventTarget_1);\n });\n if (lostFocus && isIgnored) {\n if (self.config.allowInput) {\n self.setDate(self._input.value, false, self.config.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined &&\n self.input.value !== \"\" &&\n self.input.value !== undefined) {\n updateTime();\n }\n self.close();\n if (self.config &&\n self.config.mode === \"range\" &&\n self.selectedDates.length === 1)\n self.clear(false);\n }\n }\n }\n function changeYear(newYear) {\n if (!newYear ||\n (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n return;\n var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n self.currentYear = newYearNum || self.currentYear;\n if (self.config.maxDate &&\n self.currentYear === self.config.maxDate.getFullYear()) {\n self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n }\n else if (self.config.minDate &&\n self.currentYear === self.config.minDate.getFullYear()) {\n self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n }\n if (isNewYear) {\n self.redraw();\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n }\n function isEnabled(date, timeless) {\n var _a;\n if (timeless === void 0) { timeless = true; }\n var dateToCheck = self.parseDate(date, undefined, timeless);\n if ((self.config.minDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n (self.config.maxDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n return false;\n if (!self.config.enable && self.config.disable.length === 0)\n return true;\n if (dateToCheck === undefined)\n return false;\n var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n for (var i = 0, d = void 0; i < array.length; i++) {\n d = array[i];\n if (typeof d === \"function\" &&\n d(dateToCheck))\n return bool;\n else if (d instanceof Date &&\n dateToCheck !== undefined &&\n d.getTime() === dateToCheck.getTime())\n return bool;\n else if (typeof d === \"string\") {\n var parsed = self.parseDate(d, undefined, true);\n return parsed && parsed.getTime() === dateToCheck.getTime()\n ? bool\n : !bool;\n }\n else if (typeof d === \"object\" &&\n dateToCheck !== undefined &&\n d.from &&\n d.to &&\n dateToCheck.getTime() >= d.from.getTime() &&\n dateToCheck.getTime() <= d.to.getTime())\n return bool;\n }\n return !bool;\n }\n function isInView(elem) {\n if (self.daysContainer !== undefined)\n return (elem.className.indexOf(\"hidden\") === -1 &&\n elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n self.daysContainer.contains(elem));\n return false;\n }\n function onBlur(e) {\n var isInput = e.target === self._input;\n var valueChanged = self._input.value.trimEnd() !== getDateStr();\n if (isInput &&\n valueChanged &&\n !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n self.setDate(self._input.value, true, e.target === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n }\n function onKeyDown(e) {\n var eventTarget = getEventTarget(e);\n var isInput = self.config.wrap\n ? element.contains(eventTarget)\n : eventTarget === self._input;\n var allowInput = self.config.allowInput;\n var allowKeydown = self.isOpen && (!allowInput || !isInput);\n var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n if (e.keyCode === 13 && isInput) {\n if (allowInput) {\n self.setDate(self._input.value, true, eventTarget === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n self.close();\n return eventTarget.blur();\n }\n else {\n self.open();\n }\n }\n else if (isCalendarElem(eventTarget) ||\n allowKeydown ||\n allowInlineKeydown) {\n var isTimeObj = !!self.timeContainer &&\n self.timeContainer.contains(eventTarget);\n switch (e.keyCode) {\n case 13:\n if (isTimeObj) {\n e.preventDefault();\n updateTime();\n focusAndClose();\n }\n else\n selectDate(e);\n break;\n case 27:\n e.preventDefault();\n focusAndClose();\n break;\n case 8:\n case 46:\n if (isInput && !self.config.allowInput) {\n e.preventDefault();\n self.clear();\n }\n break;\n case 37:\n case 39:\n if (!isTimeObj && !isInput) {\n e.preventDefault();\n var activeElement = getClosestActiveElement();\n if (self.daysContainer !== undefined &&\n (allowInput === false ||\n (activeElement && isInView(activeElement)))) {\n var delta_1 = e.keyCode === 39 ? 1 : -1;\n if (!e.ctrlKey)\n focusOnDay(undefined, delta_1);\n else {\n e.stopPropagation();\n changeMonth(delta_1);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n }\n }\n else if (self.hourElement)\n self.hourElement.focus();\n break;\n case 38:\n case 40:\n e.preventDefault();\n var delta = e.keyCode === 40 ? 1 : -1;\n if ((self.daysContainer &&\n eventTarget.$i !== undefined) ||\n eventTarget === self.input ||\n eventTarget === self.altInput) {\n if (e.ctrlKey) {\n e.stopPropagation();\n changeYear(self.currentYear - delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n else if (!isTimeObj)\n focusOnDay(undefined, delta * 7);\n }\n else if (eventTarget === self.currentYearElement) {\n changeYear(self.currentYear - delta);\n }\n else if (self.config.enableTime) {\n if (!isTimeObj && self.hourElement)\n self.hourElement.focus();\n updateTime(e);\n self._debouncedChange();\n }\n break;\n case 9:\n if (isTimeObj) {\n var elems = [\n self.hourElement,\n self.minuteElement,\n self.secondElement,\n self.amPM,\n ]\n .concat(self.pluginElements)\n .filter(function (x) { return x; });\n var i = elems.indexOf(eventTarget);\n if (i !== -1) {\n var target = elems[i + (e.shiftKey ? -1 : 1)];\n e.preventDefault();\n (target || self._input).focus();\n }\n }\n else if (!self.config.noCalendar &&\n self.daysContainer &&\n self.daysContainer.contains(eventTarget) &&\n e.shiftKey) {\n e.preventDefault();\n self._input.focus();\n }\n break;\n default:\n break;\n }\n }\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n switch (e.key) {\n case self.l10n.amPM[0].charAt(0):\n case self.l10n.amPM[0].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[0];\n setHoursFromInputs();\n updateValue();\n break;\n case self.l10n.amPM[1].charAt(0):\n case self.l10n.amPM[1].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[1];\n setHoursFromInputs();\n updateValue();\n break;\n }\n }\n if (isInput || isCalendarElem(eventTarget)) {\n triggerEvent(\"onKeyDown\", e);\n }\n }\n function onMouseOver(elem, cellClass) {\n if (cellClass === void 0) { cellClass = \"flatpickr-day\"; }\n if (self.selectedDates.length !== 1 ||\n (elem &&\n (!elem.classList.contains(cellClass) ||\n elem.classList.contains(\"flatpickr-disabled\"))))\n return;\n var hoverDate = elem\n ? elem.dateObj.getTime()\n : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n var containsDisabled = false;\n var minRange = 0, maxRange = 0;\n for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n if (!isEnabled(new Date(t), true)) {\n containsDisabled =\n containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n if (t < initialDate && (!minRange || t > minRange))\n minRange = t;\n else if (t > initialDate && (!maxRange || t < maxRange))\n maxRange = t;\n }\n }\n var hoverableCells = Array.from(self.rContainer.querySelectorAll(\"*:nth-child(-n+\" + self.config.showMonths + \") > .\" + cellClass));\n hoverableCells.forEach(function (dayElem) {\n var date = dayElem.dateObj;\n var timestamp = date.getTime();\n var outOfRange = (minRange > 0 && timestamp < minRange) ||\n (maxRange > 0 && timestamp > maxRange);\n if (outOfRange) {\n dayElem.classList.add(\"notAllowed\");\n [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n return;\n }\n else if (containsDisabled && !outOfRange)\n return;\n [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n if (elem !== undefined) {\n elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n ? \"startRange\"\n : \"endRange\");\n if (initialDate < hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"startRange\");\n else if (initialDate > hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"endRange\");\n if (timestamp >= minRange &&\n (maxRange === 0 || timestamp <= maxRange) &&\n isBetween(timestamp, initialDate, hoverDate))\n dayElem.classList.add(\"inRange\");\n }\n });\n }\n function onResize() {\n if (self.isOpen && !self.config.static && !self.config.inline)\n positionCalendar();\n }\n function open(e, positionElement) {\n if (positionElement === void 0) { positionElement = self._positionElement; }\n if (self.isMobile === true) {\n if (e) {\n e.preventDefault();\n var eventTarget = getEventTarget(e);\n if (eventTarget) {\n eventTarget.blur();\n }\n }\n if (self.mobileInput !== undefined) {\n self.mobileInput.focus();\n self.mobileInput.click();\n }\n triggerEvent(\"onOpen\");\n return;\n }\n else if (self._input.disabled || self.config.inline) {\n return;\n }\n var wasOpen = self.isOpen;\n self.isOpen = true;\n if (!wasOpen) {\n self.calendarContainer.classList.add(\"open\");\n self._input.classList.add(\"active\");\n triggerEvent(\"onOpen\");\n positionCalendar(positionElement);\n }\n if (self.config.enableTime === true && self.config.noCalendar === true) {\n if (self.config.allowInput === false &&\n (e === undefined ||\n !self.timeContainer.contains(e.relatedTarget))) {\n setTimeout(function () { return self.hourElement.select(); }, 50);\n }\n }\n }\n function minMaxDateSetter(type) {\n return function (date) {\n var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n if (dateObj !== undefined) {\n self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n dateObj.getHours() > 0 ||\n dateObj.getMinutes() > 0 ||\n dateObj.getSeconds() > 0;\n }\n if (self.selectedDates) {\n self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n if (!self.selectedDates.length && type === \"min\")\n setHoursFromDate(dateObj);\n updateValue();\n }\n if (self.daysContainer) {\n redraw();\n if (dateObj !== undefined)\n self.currentYearElement[type] = dateObj.getFullYear().toString();\n else\n self.currentYearElement.removeAttribute(type);\n self.currentYearElement.disabled =\n !!inverseDateObj &&\n dateObj !== undefined &&\n inverseDateObj.getFullYear() === dateObj.getFullYear();\n }\n };\n }\n function parseConfig() {\n var boolOpts = [\n \"wrap\",\n \"weekNumbers\",\n \"allowInput\",\n \"allowInvalidPreload\",\n \"clickOpens\",\n \"time_24hr\",\n \"enableTime\",\n \"noCalendar\",\n \"altInput\",\n \"shorthandCurrentMonth\",\n \"inline\",\n \"static\",\n \"enableSeconds\",\n \"disableMobile\",\n ];\n var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n var formats = {};\n self.config.parseDate = userConfig.parseDate;\n self.config.formatDate = userConfig.formatDate;\n Object.defineProperty(self.config, \"enable\", {\n get: function () { return self.config._enable; },\n set: function (dates) {\n self.config._enable = parseDateRules(dates);\n },\n });\n Object.defineProperty(self.config, \"disable\", {\n get: function () { return self.config._disable; },\n set: function (dates) {\n self.config._disable = parseDateRules(dates);\n },\n });\n var timeMode = userConfig.mode === \"time\";\n if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaultOptions.dateFormat;\n formats.dateFormat =\n userConfig.noCalendar || timeMode\n ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n }\n if (userConfig.altInput &&\n (userConfig.enableTime || timeMode) &&\n !userConfig.altFormat) {\n var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaultOptions.altFormat;\n formats.altFormat =\n userConfig.noCalendar || timeMode\n ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n }\n Object.defineProperty(self.config, \"minDate\", {\n get: function () { return self.config._minDate; },\n set: minMaxDateSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxDate\", {\n get: function () { return self.config._maxDate; },\n set: minMaxDateSetter(\"max\"),\n });\n var minMaxTimeSetter = function (type) { return function (val) {\n self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n }; };\n Object.defineProperty(self.config, \"minTime\", {\n get: function () { return self.config._minTime; },\n set: minMaxTimeSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxTime\", {\n get: function () { return self.config._maxTime; },\n set: minMaxTimeSetter(\"max\"),\n });\n if (userConfig.mode === \"time\") {\n self.config.noCalendar = true;\n self.config.enableTime = true;\n }\n Object.assign(self.config, formats, userConfig);\n for (var i = 0; i < boolOpts.length; i++)\n self.config[boolOpts[i]] =\n self.config[boolOpts[i]] === true ||\n self.config[boolOpts[i]] === \"true\";\n HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n });\n self.isMobile =\n !self.config.disableMobile &&\n !self.config.inline &&\n self.config.mode === \"single\" &&\n !self.config.disable.length &&\n !self.config.enable &&\n !self.config.weekNumbers &&\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n for (var i = 0; i < self.config.plugins.length; i++) {\n var pluginConf = self.config.plugins[i](self) || {};\n for (var key in pluginConf) {\n if (HOOKS.indexOf(key) > -1) {\n self.config[key] = arrayify(pluginConf[key])\n .map(bindToInstance)\n .concat(self.config[key]);\n }\n else if (typeof userConfig[key] === \"undefined\")\n self.config[key] = pluginConf[key];\n }\n }\n if (!userConfig.altInputClass) {\n self.config.altInputClass =\n getInputElem().className + \" \" + self.config.altInputClass;\n }\n triggerEvent(\"onParseConfig\");\n }\n function getInputElem() {\n return self.config.wrap\n ? element.querySelector(\"[data-input]\")\n : element;\n }\n function setupLocale() {\n if (typeof self.config.locale !== \"object\" &&\n typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n ? self.config.locale\n : self.config.locale !== \"default\"\n ? flatpickr.l10ns[self.config.locale]\n : undefined));\n tokenRegex.D = \"(\" + self.l10n.weekdays.shorthand.join(\"|\") + \")\";\n tokenRegex.l = \"(\" + self.l10n.weekdays.longhand.join(\"|\") + \")\";\n tokenRegex.M = \"(\" + self.l10n.months.shorthand.join(\"|\") + \")\";\n tokenRegex.F = \"(\" + self.l10n.months.longhand.join(\"|\") + \")\";\n tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n if (userConfig.time_24hr === undefined &&\n flatpickr.defaultConfig.time_24hr === undefined) {\n self.config.time_24hr = self.l10n.time_24hr;\n }\n self.formatDate = createDateFormatter(self);\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n }\n function positionCalendar(customPositionElement) {\n if (typeof self.config.position === \"function\") {\n return void self.config.position(self, customPositionElement);\n }\n if (self.calendarContainer === undefined)\n return;\n triggerEvent(\"onPreCalendarPosition\");\n var positionElement = customPositionElement || self._positionElement;\n var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n (configPosVertical !== \"below\" &&\n distanceFromBottom < calendarHeight &&\n inputBounds.top > calendarHeight);\n var top = window.pageYOffset +\n inputBounds.top +\n (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n if (self.config.inline)\n return;\n var left = window.pageXOffset + inputBounds.left;\n var isCenter = false;\n var isRight = false;\n if (configPosHorizontal === \"center\") {\n left -= (calendarWidth - inputBounds.width) / 2;\n isCenter = true;\n }\n else if (configPosHorizontal === \"right\") {\n left -= calendarWidth - inputBounds.width;\n isRight = true;\n }\n toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n var right = window.document.body.offsetWidth -\n (window.pageXOffset + inputBounds.right);\n var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n if (self.config.static)\n return;\n self.calendarContainer.style.top = top + \"px\";\n if (!rightMost) {\n self.calendarContainer.style.left = left + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n else if (!centerMost) {\n self.calendarContainer.style.left = \"auto\";\n self.calendarContainer.style.right = right + \"px\";\n }\n else {\n var doc = getDocumentStyleSheet();\n if (doc === undefined)\n return;\n var bodyWidth = window.document.body.offsetWidth;\n var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n var centerBefore = \".flatpickr-calendar.centerMost:before\";\n var centerAfter = \".flatpickr-calendar.centerMost:after\";\n var centerIndex = doc.cssRules.length;\n var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n toggleClass(self.calendarContainer, \"rightMost\", false);\n toggleClass(self.calendarContainer, \"centerMost\", true);\n doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n self.calendarContainer.style.left = centerLeft + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n }\n function getDocumentStyleSheet() {\n var editableSheet = null;\n for (var i = 0; i < document.styleSheets.length; i++) {\n var sheet = document.styleSheets[i];\n if (!sheet.cssRules)\n continue;\n try {\n sheet.cssRules;\n }\n catch (err) {\n continue;\n }\n editableSheet = sheet;\n break;\n }\n return editableSheet != null ? editableSheet : createStyleSheet();\n }\n function createStyleSheet() {\n var style = document.createElement(\"style\");\n document.head.appendChild(style);\n return style.sheet;\n }\n function redraw() {\n if (self.config.noCalendar || self.isMobile)\n return;\n buildMonthSwitch();\n updateNavigationCurrentMonth();\n buildDays();\n }\n function focusAndClose() {\n self._input.focus();\n if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.msMaxTouchPoints !== undefined) {\n setTimeout(self.close, 0);\n }\n else {\n self.close();\n }\n }\n function selectDate(e) {\n e.preventDefault();\n e.stopPropagation();\n var isSelectable = function (day) {\n return day.classList &&\n day.classList.contains(\"flatpickr-day\") &&\n !day.classList.contains(\"flatpickr-disabled\") &&\n !day.classList.contains(\"notAllowed\");\n };\n var t = findParent(getEventTarget(e), isSelectable);\n if (t === undefined)\n return;\n var target = t;\n var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n selectedDate.getMonth() >\n self.currentMonth + self.config.showMonths - 1) &&\n self.config.mode !== \"range\";\n self.selectedDateElem = target;\n if (self.config.mode === \"single\")\n self.selectedDates = [selectedDate];\n else if (self.config.mode === \"multiple\") {\n var selectedIndex = isDateSelected(selectedDate);\n if (selectedIndex)\n self.selectedDates.splice(parseInt(selectedIndex), 1);\n else\n self.selectedDates.push(selectedDate);\n }\n else if (self.config.mode === \"range\") {\n if (self.selectedDates.length === 2) {\n self.clear(false, false);\n }\n self.latestSelectedDateObj = selectedDate;\n self.selectedDates.push(selectedDate);\n if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n setHoursFromInputs();\n if (shouldChangeMonth) {\n var isNewYear = self.currentYear !== selectedDate.getFullYear();\n self.currentYear = selectedDate.getFullYear();\n self.currentMonth = selectedDate.getMonth();\n if (isNewYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n triggerEvent(\"onMonthChange\");\n }\n updateNavigationCurrentMonth();\n buildDays();\n updateValue();\n if (!shouldChangeMonth &&\n self.config.mode !== \"range\" &&\n self.config.showMonths === 1)\n focusOnDayElem(target);\n else if (self.selectedDateElem !== undefined &&\n self.hourElement === undefined) {\n self.selectedDateElem && self.selectedDateElem.focus();\n }\n if (self.hourElement !== undefined)\n self.hourElement !== undefined && self.hourElement.focus();\n if (self.config.closeOnSelect) {\n var single = self.config.mode === \"single\" && !self.config.enableTime;\n var range = self.config.mode === \"range\" &&\n self.selectedDates.length === 2 &&\n !self.config.enableTime;\n if (single || range) {\n focusAndClose();\n }\n }\n triggerChange();\n }\n var CALLBACKS = {\n locale: [setupLocale, updateWeekdays],\n showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n minDate: [jumpToDate],\n maxDate: [jumpToDate],\n positionElement: [updatePositionElement],\n clickOpens: [\n function () {\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n else {\n self._input.removeEventListener(\"focus\", self.open);\n self._input.removeEventListener(\"click\", self.open);\n }\n },\n ],\n };\n function set(option, value) {\n if (option !== null && typeof option === \"object\") {\n Object.assign(self.config, option);\n for (var key in option) {\n if (CALLBACKS[key] !== undefined)\n CALLBACKS[key].forEach(function (x) { return x(); });\n }\n }\n else {\n self.config[option] = value;\n if (CALLBACKS[option] !== undefined)\n CALLBACKS[option].forEach(function (x) { return x(); });\n else if (HOOKS.indexOf(option) > -1)\n self.config[option] = arrayify(value);\n }\n self.redraw();\n updateValue(true);\n }\n function setSelectedDate(inputDate, format) {\n var dates = [];\n if (inputDate instanceof Array)\n dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n else if (inputDate instanceof Date || typeof inputDate === \"number\")\n dates = [self.parseDate(inputDate, format)];\n else if (typeof inputDate === \"string\") {\n switch (self.config.mode) {\n case \"single\":\n case \"time\":\n dates = [self.parseDate(inputDate, format)];\n break;\n case \"multiple\":\n dates = inputDate\n .split(self.config.conjunction)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n case \"range\":\n dates = inputDate\n .split(self.l10n.rangeSeparator)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n default:\n break;\n }\n }\n else\n self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n self.selectedDates = (self.config.allowInvalidPreload\n ? dates\n : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));\n if (self.config.mode === \"range\")\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n function setDate(date, triggerChange, format) {\n if (triggerChange === void 0) { triggerChange = false; }\n if (format === void 0) { format = self.config.dateFormat; }\n if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n return self.clear(triggerChange);\n setSelectedDate(date, format);\n self.latestSelectedDateObj =\n self.selectedDates[self.selectedDates.length - 1];\n self.redraw();\n jumpToDate(undefined, triggerChange);\n setHoursFromDate();\n if (self.selectedDates.length === 0) {\n self.clear(false);\n }\n updateValue(triggerChange);\n if (triggerChange)\n triggerEvent(\"onChange\");\n }\n function parseDateRules(arr) {\n return arr\n .slice()\n .map(function (rule) {\n if (typeof rule === \"string\" ||\n typeof rule === \"number\" ||\n rule instanceof Date) {\n return self.parseDate(rule, undefined, true);\n }\n else if (rule &&\n typeof rule === \"object\" &&\n rule.from &&\n rule.to)\n return {\n from: self.parseDate(rule.from, undefined),\n to: self.parseDate(rule.to, undefined),\n };\n return rule;\n })\n .filter(function (x) { return x; });\n }\n function setupDates() {\n self.selectedDates = [];\n self.now = self.parseDate(self.config.now) || new Date();\n var preloadedDate = self.config.defaultDate ||\n ((self.input.nodeName === \"INPUT\" ||\n self.input.nodeName === \"TEXTAREA\") &&\n self.input.placeholder &&\n self.input.value === self.input.placeholder\n ? null\n : self.input.value);\n if (preloadedDate)\n setSelectedDate(preloadedDate, self.config.dateFormat);\n self._initialDate =\n self.selectedDates.length > 0\n ? self.selectedDates[0]\n : self.config.minDate &&\n self.config.minDate.getTime() > self.now.getTime()\n ? self.config.minDate\n : self.config.maxDate &&\n self.config.maxDate.getTime() < self.now.getTime()\n ? self.config.maxDate\n : self.now;\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n if (self.selectedDates.length > 0)\n self.latestSelectedDateObj = self.selectedDates[0];\n if (self.config.minTime !== undefined)\n self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n if (self.config.maxTime !== undefined)\n self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n self.minDateHasTime =\n !!self.config.minDate &&\n (self.config.minDate.getHours() > 0 ||\n self.config.minDate.getMinutes() > 0 ||\n self.config.minDate.getSeconds() > 0);\n self.maxDateHasTime =\n !!self.config.maxDate &&\n (self.config.maxDate.getHours() > 0 ||\n self.config.maxDate.getMinutes() > 0 ||\n self.config.maxDate.getSeconds() > 0);\n }\n function setupInputs() {\n self.input = getInputElem();\n if (!self.input) {\n self.config.errorHandler(new Error(\"Invalid input element specified\"));\n return;\n }\n self.input._type = self.input.type;\n self.input.type = \"text\";\n self.input.classList.add(\"flatpickr-input\");\n self._input = self.input;\n if (self.config.altInput) {\n self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n self._input = self.altInput;\n self.altInput.placeholder = self.input.placeholder;\n self.altInput.disabled = self.input.disabled;\n self.altInput.required = self.input.required;\n self.altInput.tabIndex = self.input.tabIndex;\n self.altInput.type = \"text\";\n self.input.setAttribute(\"type\", \"hidden\");\n if (!self.config.static && self.input.parentNode)\n self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n }\n if (!self.config.allowInput)\n self._input.setAttribute(\"readonly\", \"readonly\");\n updatePositionElement();\n }\n function updatePositionElement() {\n self._positionElement = self.config.positionElement || self._input;\n }\n function setupMobile() {\n var inputType = self.config.enableTime\n ? self.config.noCalendar\n ? \"time\"\n : \"datetime-local\"\n : \"date\";\n self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n self.mobileInput.tabIndex = 1;\n self.mobileInput.type = inputType;\n self.mobileInput.disabled = self.input.disabled;\n self.mobileInput.required = self.input.required;\n self.mobileInput.placeholder = self.input.placeholder;\n self.mobileFormatStr =\n inputType === \"datetime-local\"\n ? \"Y-m-d\\\\TH:i:S\"\n : inputType === \"date\"\n ? \"Y-m-d\"\n : \"H:i:S\";\n if (self.selectedDates.length > 0) {\n self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n }\n if (self.config.minDate)\n self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n if (self.config.maxDate)\n self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n if (self.input.getAttribute(\"step\"))\n self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n self.input.type = \"hidden\";\n if (self.altInput !== undefined)\n self.altInput.type = \"hidden\";\n try {\n if (self.input.parentNode)\n self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n }\n catch (_a) { }\n bind(self.mobileInput, \"change\", function (e) {\n self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n triggerEvent(\"onChange\");\n triggerEvent(\"onClose\");\n });\n }\n function toggle(e) {\n if (self.isOpen === true)\n return self.close();\n self.open(e);\n }\n function triggerEvent(event, data) {\n if (self.config === undefined)\n return;\n var hooks = self.config[event];\n if (hooks !== undefined && hooks.length > 0) {\n for (var i = 0; hooks[i] && i < hooks.length; i++)\n hooks[i](self.selectedDates, self.input.value, self, data);\n }\n if (event === \"onChange\") {\n self.input.dispatchEvent(createEvent(\"change\"));\n self.input.dispatchEvent(createEvent(\"input\"));\n }\n }\n function createEvent(name) {\n var e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n return e;\n }\n function isDateSelected(date) {\n for (var i = 0; i < self.selectedDates.length; i++) {\n var selectedDate = self.selectedDates[i];\n if (selectedDate instanceof Date &&\n compareDates(selectedDate, date) === 0)\n return \"\" + i;\n }\n return false;\n }\n function isDateInRange(date) {\n if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n return false;\n return (compareDates(date, self.selectedDates[0]) >= 0 &&\n compareDates(date, self.selectedDates[1]) <= 0);\n }\n function updateNavigationCurrentMonth() {\n if (self.config.noCalendar || self.isMobile || !self.monthNav)\n return;\n self.yearElements.forEach(function (yearElement, i) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n self.monthElements[i].textContent =\n monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n }\n else {\n self.monthsDropdownContainer.value = d.getMonth().toString();\n }\n yearElement.value = d.getFullYear().toString();\n });\n self._hidePrevMonthArrow =\n self.config.minDate !== undefined &&\n (self.currentYear === self.config.minDate.getFullYear()\n ? self.currentMonth <= self.config.minDate.getMonth()\n : self.currentYear < self.config.minDate.getFullYear());\n self._hideNextMonthArrow =\n self.config.maxDate !== undefined &&\n (self.currentYear === self.config.maxDate.getFullYear()\n ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n : self.currentYear > self.config.maxDate.getFullYear());\n }\n function getDateStr(specificFormat) {\n var format = specificFormat ||\n (self.config.altInput ? self.config.altFormat : self.config.dateFormat);\n return self.selectedDates\n .map(function (dObj) { return self.formatDate(dObj, format); })\n .filter(function (d, i, arr) {\n return self.config.mode !== \"range\" ||\n self.config.enableTime ||\n arr.indexOf(d) === i;\n })\n .join(self.config.mode !== \"range\"\n ? self.config.conjunction\n : self.l10n.rangeSeparator);\n }\n function updateValue(triggerChange) {\n if (triggerChange === void 0) { triggerChange = true; }\n if (self.mobileInput !== undefined && self.mobileFormatStr) {\n self.mobileInput.value =\n self.latestSelectedDateObj !== undefined\n ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n : \"\";\n }\n self.input.value = getDateStr(self.config.dateFormat);\n if (self.altInput !== undefined) {\n self.altInput.value = getDateStr(self.config.altFormat);\n }\n if (triggerChange !== false)\n triggerEvent(\"onValueUpdate\");\n }\n function onMonthNavClick(e) {\n var eventTarget = getEventTarget(e);\n var isPrevMonth = self.prevMonthNav.contains(eventTarget);\n var isNextMonth = self.nextMonthNav.contains(eventTarget);\n if (isPrevMonth || isNextMonth) {\n changeMonth(isPrevMonth ? -1 : 1);\n }\n else if (self.yearElements.indexOf(eventTarget) >= 0) {\n eventTarget.select();\n }\n else if (eventTarget.classList.contains(\"arrowUp\")) {\n self.changeYear(self.currentYear + 1);\n }\n else if (eventTarget.classList.contains(\"arrowDown\")) {\n self.changeYear(self.currentYear - 1);\n }\n }\n function timeWrapper(e) {\n e.preventDefault();\n var isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n var newValue = curValue + step * delta;\n if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n if (newValue < min) {\n newValue =\n max +\n newValue +\n int(!isHourElem) +\n (int(isHourElem) && int(!self.amPM));\n if (isMinuteElem)\n incrementNumInput(undefined, -1, self.hourElement);\n }\n else if (newValue > max) {\n newValue =\n input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n if (isMinuteElem)\n incrementNumInput(undefined, 1, self.hourElement);\n }\n if (self.amPM &&\n isHourElem &&\n (step === 1\n ? newValue + curValue === 23\n : Math.abs(newValue - curValue) > step)) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n input.value = pad(newValue);\n }\n }\n init();\n return self;\n}\nfunction _flatpickr(nodeList, config) {\n var nodes = Array.prototype.slice\n .call(nodeList)\n .filter(function (x) { return x instanceof HTMLElement; });\n var instances = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n try {\n if (node.getAttribute(\"data-fp-omit\") !== null)\n continue;\n if (node._flatpickr !== undefined) {\n node._flatpickr.destroy();\n node._flatpickr = undefined;\n }\n node._flatpickr = FlatpickrInstance(node, config || {});\n instances.push(node._flatpickr);\n }\n catch (e) {\n console.error(e);\n }\n }\n return instances.length === 1 ? instances[0] : instances;\n}\nif (typeof HTMLElement !== \"undefined\" &&\n typeof HTMLCollection !== \"undefined\" &&\n typeof NodeList !== \"undefined\") {\n HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n HTMLElement.prototype.flatpickr = function (config) {\n return _flatpickr([this], config);\n };\n}\nvar flatpickr = function (selector, config) {\n if (typeof selector === \"string\") {\n return _flatpickr(window.document.querySelectorAll(selector), config);\n }\n else if (selector instanceof Node) {\n return _flatpickr([selector], config);\n }\n else {\n return _flatpickr(selector, config);\n }\n};\nflatpickr.defaultConfig = {};\nflatpickr.l10ns = {\n en: __assign({}, English),\n default: __assign({}, English),\n};\nflatpickr.localize = function (l10n) {\n flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);\n};\nflatpickr.setDefaults = function (config) {\n flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);\n};\nflatpickr.parseDate = createDateParser({});\nflatpickr.formatDate = createDateFormatter({});\nflatpickr.compareDates = compareDates;\nif (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n jQuery.fn.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n}\nDate.prototype.fp_incr = function (days) {\n return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n};\nif (typeof window !== \"undefined\") {\n window.flatpickr = flatpickr;\n}\nexport default flatpickr;\n","const includedEvents = [\n 'onChange',\n 'onClose',\n 'onDestroy',\n 'onMonthChange',\n 'onOpen',\n 'onYearChange',\n];\n// Let's not emit these events by default\nconst excludedEvents = [\n 'onValueUpdate',\n 'onDayCreate',\n 'onParseConfig',\n 'onReady',\n 'onPreCalendarPosition',\n 'onKeyDown',\n];\nexport { includedEvents, excludedEvents };\n","function camelToKebab(string) {\n return string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\nfunction arrayify(obj) {\n return obj instanceof Array\n ? obj\n : [obj];\n}\nfunction nullify(value) {\n return (value && value.length)\n ? value\n : null;\n}\nexport { camelToKebab, nullify, arrayify };\n","import flatpickr from 'flatpickr';\nimport { defineComponent, h, nextTick } from 'vue';\nimport { excludedEvents, includedEvents } from './events';\nimport { camelToKebab, nullify, arrayify } from './util';\n// Keep a copy of all events for later use\nconst allEvents = [...includedEvents, ...excludedEvents];\n// Passing these properties in `fp.set()` method will cause flatpickr to trigger some callbacks\nconst configCallbacks = ['locale', 'showMonths'];\nexport default defineComponent({\n name: 'FlatPickr',\n compatConfig: {\n MODE: 3,\n },\n render() {\n return h('input', {\n type: 'text',\n 'data-input': true,\n disabled: this.disabled,\n onInput: this.onInput,\n });\n },\n emits: [\n 'blur',\n 'update:modelValue',\n ...allEvents.map(camelToKebab)\n ],\n props: {\n modelValue: {\n type: [String, Number, Date, Array, null],\n required: true,\n },\n // https://flatpickr.js.org/options/\n config: {\n type: Object,\n default: () => ({\n defaultDate: null,\n wrap: false,\n })\n },\n events: {\n type: Array,\n default: () => includedEvents\n },\n disabled: {\n type: Boolean,\n default: false\n },\n },\n data() {\n return {\n fp: null, //todo make it non-reactive\n };\n },\n mounted() {\n // Return early if flatpickr is already loaded\n /* istanbul ignore if */\n if (this.fp)\n return;\n // Init flatpickr\n this.fp = flatpickr(this.getElem(), this.prepareConfig());\n // Attach blur event\n this.fpInput().addEventListener('blur', this.onBlur);\n // Immediate watch will fail before fp is set,\n // so we need to start watching after mount\n this.$watch('disabled', this.watchDisabled, {\n immediate: true\n });\n },\n methods: {\n prepareConfig() {\n // Don't mutate original object on parent component\n let safeConfig = Object.assign({}, this.config);\n this.events.forEach((hook) => {\n // Respect global callbacks registered via setDefault() method\n let globalCallbacks = flatpickr.defaultConfig[hook] || [];\n // Inject our own method along with user's callbacks\n let localCallback = (...args) => {\n this.$emit(camelToKebab(hook), ...args);\n };\n // Overwrite with merged array\n safeConfig[hook] = arrayify(safeConfig[hook] || []).concat(globalCallbacks, localCallback);\n });\n const onCloseCb = this.onClose.bind(this);\n safeConfig['onClose'] = arrayify(safeConfig['onClose'] || []).concat(onCloseCb);\n // Set initial date without emitting any event\n safeConfig.defaultDate = this.modelValue || safeConfig.defaultDate;\n return safeConfig;\n },\n /**\n * Get the HTML node where flatpickr to be attached\n * Bind on parent element if wrap is true\n */\n getElem() {\n return this.config.wrap ? this.$el.parentNode : this.$el;\n },\n /**\n * Watch for value changed by date-picker itself and notify parent component\n */\n onInput(event) {\n const input = event.target;\n // Let's wait for DOM to be updated\n nextTick().then(() => {\n this.$emit('update:modelValue', nullify(input.value));\n });\n },\n fpInput() {\n return this.fp.altInput || this.fp.input;\n },\n /**\n * Blur event is required by many validation libraries\n */\n onBlur(event) {\n this.$emit('blur', nullify(event.target.value));\n },\n /**\n * Flatpickr does not emit input event in some cases\n */\n onClose(selectedDates, dateStr) {\n this.$emit('update:modelValue', dateStr);\n },\n /**\n * Watch for the disabled property and sets the value to the real input.\n */\n watchDisabled(newState) {\n if (newState) {\n this.fpInput().setAttribute('disabled', '');\n }\n else {\n this.fpInput().removeAttribute('disabled');\n }\n }\n },\n watch: {\n /**\n * Watch for any config changes and redraw date-picker\n */\n config: {\n deep: true,\n handler(newConfig) {\n if (!this.fp)\n return;\n let safeConfig = Object.assign({}, newConfig);\n // Workaround: Don't pass hooks to configs again otherwise\n // previously registered hooks will stop working\n // Notice: we are looping through all events\n // This also means that new callbacks can not be passed once component has been initialized\n allEvents.forEach((hook) => {\n delete safeConfig[hook];\n });\n this.fp.set(safeConfig);\n // Workaround: Allow to change locale dynamically\n configCallbacks.forEach((name) => {\n if (typeof safeConfig[name] !== 'undefined') {\n this.fp.set(name, safeConfig[name]);\n }\n });\n }\n },\n /**\n * Watch for changes from parent component and update DOM\n */\n modelValue(newValue) {\n var _a;\n // Prevent updates if v-model value is same as input's current value\n if (!this.$el || newValue === nullify(this.$el.value))\n return;\n // Notify flatpickr instance that there is a change in value\n (_a = this.fp) === null || _a === void 0 ? void 0 : _a.setDate(newValue, true);\n }\n },\n beforeUnmount() {\n /* istanbul ignore else */\n if (!this.fp)\n return;\n this.fpInput().removeEventListener('blur', this.onBlur);\n this.fp.destroy();\n this.fp = null;\n }\n});\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.sk = {}));\n}(this, (function (exports) { 'use strict';\n\n var fp = typeof window !== \"undefined\" && window.flatpickr !== undefined\n ? window.flatpickr\n : {\n l10ns: {},\n };\n var Slovak = {\n weekdays: {\n shorthand: [\"Ned\", \"Pon\", \"Ut\", \"Str\", \"Štv\", \"Pia\", \"Sob\"],\n longhand: [\n \"Nedeľa\",\n \"Pondelok\",\n \"Utorok\",\n \"Streda\",\n \"Štvrtok\",\n \"Piatok\",\n \"Sobota\",\n ],\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"Máj\",\n \"Jún\",\n \"Júl\",\n \"Aug\",\n \"Sep\",\n \"Okt\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"Január\",\n \"Február\",\n \"Marec\",\n \"Apríl\",\n \"Máj\",\n \"Jún\",\n \"Júl\",\n \"August\",\n \"September\",\n \"Október\",\n \"November\",\n \"December\",\n ],\n },\n firstDayOfWeek: 1,\n rangeSeparator: \" do \",\n time_24hr: true,\n ordinal: function () {\n return \".\";\n },\n };\n fp.l10ns.sk = Slovak;\n var sk = fp.l10ns;\n\n exports.Slovak = Slovak;\n exports.default = sk;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.cs = {}));\n}(this, (function (exports) { 'use strict';\n\n var fp = typeof window !== \"undefined\" && window.flatpickr !== undefined\n ? window.flatpickr\n : {\n l10ns: {},\n };\n var Czech = {\n weekdays: {\n shorthand: [\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"],\n longhand: [\n \"Neděle\",\n \"Pondělí\",\n \"Úterý\",\n \"Středa\",\n \"Čtvrtek\",\n \"Pátek\",\n \"Sobota\",\n ],\n },\n months: {\n shorthand: [\n \"Led\",\n \"Ún\",\n \"Bře\",\n \"Dub\",\n \"Kvě\",\n \"Čer\",\n \"Čvc\",\n \"Srp\",\n \"Zář\",\n \"Říj\",\n \"Lis\",\n \"Pro\",\n ],\n longhand: [\n \"Leden\",\n \"Únor\",\n \"Březen\",\n \"Duben\",\n \"Květen\",\n \"Červen\",\n \"Červenec\",\n \"Srpen\",\n \"Září\",\n \"Říjen\",\n \"Listopad\",\n \"Prosinec\",\n ],\n },\n firstDayOfWeek: 1,\n ordinal: function () {\n return \".\";\n },\n rangeSeparator: \" do \",\n weekAbbreviation: \"Týd.\",\n scrollTitle: \"Rolujte pro změnu\",\n toggleTitle: \"Přepnout dopoledne/odpoledne\",\n amPM: [\"dop.\", \"odp.\"],\n yearAriaLabel: \"Rok\",\n time_24hr: true,\n };\n fp.l10ns.cs = Czech;\n var cs = fp.l10ns;\n\n exports.Czech = Czech;\n exports.default = cs;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.default = {}));\n}(this, (function (exports) { 'use strict';\n\n var english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n },\n daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: function (nth) {\n var s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n monthAriaLabel: \"Month\",\n hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false,\n };\n\n exports.default = english;\n exports.english = english;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","import { createI18nMessage, requiredIf } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateRequiredIf() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(requiredIf, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.required',\n })\n}\n","import { useStorage } from '@vueuse/core'\nimport { readonly } from 'vue'\n// import { useLocale } from 'vuetify'\nimport { i18n } from '@/plugins/i18n'\n\n// use ISO 639-1 codes\nexport type LanguageCode = 'en' | 'sk' | 'cs' | 'xx'\n\nexport interface Language {\n code: LanguageCode\n title: string\n adminOnly?: boolean\n}\n\nexport const ALL_LANGUAGES = [\n {\n code: 'en',\n title: 'English',\n },\n {\n code: 'sk',\n title: 'Slovensky',\n },\n {\n code: 'cs',\n title: 'Česky',\n },\n {\n code: 'xx',\n title: 'Translation ID',\n adminOnly: true,\n },\n] as Language[]\n\nconst storedSettings = useStorage<LanguageCode | 'default'>('language', 'default')\n\nexport function modifyLanguageSettings(configAvailableLanguages: LanguageCode[], configDefaultLanguage: LanguageCode) {\n if (storedSettings.value === 'default') storedSettings.value = configDefaultLanguage\n // const { current } = useLocale()\n\n function addMessages(language: LanguageCode, messages: any) {\n if (!i18n || !i18n.global) return\n // @ts-ignore\n i18n.global.setLocaleMessage(language, messages)\n }\n\n const setLanguage = (code: LanguageCode) => {\n if (!i18n || !i18n.global) return false\n if (configAvailableLanguages.includes(code) || code === 'xx') {\n // current.value = code\n storedSettings.value = code\n // @ts-ignore\n i18n.global.locale.value = code\n\n return code\n }\n return false\n }\n\n const initializeLanguage = () => {\n if (!i18n || !i18n.global || storedSettings.value === 'default') return\n if (configAvailableLanguages.includes(storedSettings.value) || storedSettings.value === 'xx') {\n // current.value = storedSettings.value\n // @ts-ignore\n i18n.global.locale.value = storedSettings.value\n return\n }\n storedSettings.value = configDefaultLanguage\n // current.value = configDefaultLanguage\n // @ts-ignore\n i18n.global.locale.value = configDefaultLanguage\n }\n\n return {\n addMessages,\n initializeLanguage,\n currentLanguageCode: readonly(storedSettings),\n setLanguage,\n allLanguages: ALL_LANGUAGES,\n }\n}\n\nexport function useLanguageSettings() {\n return {\n currentLanguageCode: readonly(storedSettings),\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, unref, watch } from 'vue'\nimport FlatPickr from 'vue-flatpickr-component'\nimport { Slovak } from 'flatpickr/dist/l10n/sk'\nimport { Czech } from 'flatpickr/dist/l10n/cs'\nimport { english as English } from 'flatpickr/dist/l10n/default'\nimport 'flatpickr/dist/flatpickr.css'\nimport { dateNow, dateToUtc } from '@/utils/datetime'\nimport type flatpickr from 'flatpickr'\nimport { isNull, isUndefined } from '@/utils/common'\nimport type { ErrorObject } from '@vuelidate/core'\nimport useVuelidate from '@vuelidate/core'\nimport type { DatetimeUTCNullable } from '@/types/common'\nimport { useValidateRequiredIf } from '@/validators/vuelidate/common/useValidateRequiredIf'\nimport { useI18n } from 'vue-i18n'\nimport type { DateLimit, DateOption } from 'flatpickr/dist/types/options'\nimport { useLanguageSettings } from '@/composables/languageSettings'\n\ntype FlatpickrRef = null | { fp: undefined | flatpickr.Instance }\ntype TextFieldRef = null | { $el: HTMLElement }\n\n// todo fix types\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DatetimeUTCNullable | undefined\n type?: 'datetime' | 'date'\n label?: string\n hideLabel?: boolean\n clearable?: boolean\n disabled?: boolean\n hideDetails?: boolean\n minNow?: boolean\n required?: boolean\n hideSetToNow?: boolean\n placeholder?: string\n enable?: DateLimit<DateOption>[]\n weekNumbers?: false\n dataCy?: string\n defaultValue?: null | DatetimeUTCNullable\n errorMessages?: string[]\n }>(),\n {\n type: 'datetime',\n label: '',\n hideLabel: false,\n clearable: false,\n disabled: false,\n hideDetails: false,\n minNow: false,\n required: false,\n hideSetToNow: false,\n placeholder: '',\n enable: undefined,\n weekNumbers: false,\n dataCy: '',\n defaultValue: null,\n errorMessages: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n (e: 'blur'): void\n (e: 'update:modelValue', data: string | null): void\n (e: 'onOpen'): void\n (e: 'onClose'): void\n}>()\n\nconst shortcutButtonsPlugin = ref<any>(undefined)\nconst pluginsImported = ref(false)\n\nconst flatickrRefIsInitialized = (\n ref: FlatpickrRef\n): ref is { fp: flatpickr.Instance; fpInput: () => { value: string; focus: () => void } } => {\n return ref !== null && typeof ref.fp !== 'undefined'\n}\n\nconst flatickrRef = ref<FlatpickrRef>(null)\nconst textFieldRef = ref<TextFieldRef>(null)\nconst isOpened = ref(false)\nconst textFieldValue = ref('')\nconst flatpickrValue = ref<string | null>(null)\nconst initialized = ref(false)\n\nconst { t } = useI18n()\n\nconst fixFormat = (value: string) => {\n return value.replace('Z', '000Z')\n}\n\nconst checkIfReallyEmitChange = (value: any) => {\n if (value === props.modelValue) return\n emit('update:modelValue', value)\n emit('change')\n}\n\nconst onFlatpickrUpdate = (value: any) => {\n if (value === null || isUndefined(value)) {\n checkIfReallyEmitChange(null)\n return\n }\n if (value && value.date) {\n checkIfReallyEmitChange(fixFormat(value.date + ''))\n return\n }\n checkIfReallyEmitChange(fixFormat(value + ''))\n}\n\nconst onFlatpickrOpen = () => {\n onTextFieldBlur()\n isOpened.value = true\n emit('onOpen')\n}\n\nconst onFlatpickrClose = () => {\n isOpened.value = false\n emit('onClose')\n}\n\nconst onFlatpickrChange = () => {\n if (!flatickrRefIsInitialized(flatickrRef.value)) return\n textFieldValue.value = flatickrRef.value.fpInput().value\n}\n\nconst onTextFieldBlur = () => {\n if (!flatickrRefIsInitialized(flatickrRef.value)) return\n const filtered = textFieldValue.value.replace(/[^\\s\\d.:]/g, '')\n const date = flatickrRef.value.fp.parseDate(filtered, altFormat.value)\n if (isUndefined(date)) {\n if (isNull(props.defaultValue)) {\n flatickrRef.value?.fp.clear(true)\n } else {\n flatickrRef.value?.fp.setDate(props.defaultValue, true)\n }\n v$.value.textFieldValue.$touch()\n emit('blur')\n return\n }\n flatickrRef.value?.fp.setDate(date, true)\n v$.value.textFieldValue.$touch()\n emit('blur')\n}\n\nconst onClear = () => {\n flatpickrValue.value = props.defaultValue\n emit('update:modelValue', unref(props.defaultValue))\n}\n\nconst altFormat = computed(() => {\n return props.type === 'datetime' ? 'd.m.Y H:i' : 'd.m.Y'\n})\n\nconst placeholderComputed = computed(() => {\n return props.type === 'datetime' ? 'dd.mm.yyyy hh:mm' : 'dd.mm.yyyy'\n})\n\nconst enableComputed = computed(() => {\n if (props.enable && props.enable.length > 0) {\n return props.enable\n }\n return [\n {\n from: new Date(1901, 1),\n to: new Date(2099, 12),\n },\n ]\n})\n\nconst defaultValueComputed = computed(() => {\n return isNull(props.defaultValue) ? undefined : props.defaultValue\n})\n\nconst pluginsComputed = computed(() => {\n if (props.hideSetToNow || isUndefined(shortcutButtonsPlugin.value)) {\n return []\n }\n return [\n shortcutButtonsPlugin.value({\n button: [\n {\n label: t('common.button.now'),\n },\n ],\n onClick: (index: number, fp: flatpickr.Instance) => {\n const now = dateNow()\n fp.setDate(now, true)\n onFlatpickrUpdate(dateToUtc(now))\n },\n }),\n ]\n})\n\n// todo check for lazy solution\nconst languages = {\n sk: Slovak,\n en: English,\n cs: Czech,\n}\n\nconst { currentLanguageCode } = useLanguageSettings()\n\nconst flatpickrConfig = computed(() => {\n const positionElement = textFieldRef.value?.$el.querySelector('.v-input__control')\n return {\n enableTime: props.type !== 'date',\n wrap: true,\n time_24hr: true,\n altFormat: altFormat.value,\n defaultDate: defaultValueComputed.value,\n allowInput: true,\n altInput: true,\n altInputClass: 'd-sr-only',\n positionElement: positionElement ?? undefined,\n // dateFormat: 'Y-m-dTH:i:S.000000\\\\Z', problem with timezone\n dateFormat: 'Z',\n disableMobile: true,\n clickOpens: false,\n position: 'auto' as const,\n // @ts-ignore\n locale: { ...languages[currentLanguageCode.value] },\n enable: enableComputed.value,\n weekNumbers: props.weekNumbers,\n // @ts-ignore\n minDate: props.minNow ? new Date().fp_incr(-1) : false,\n plugins: pluginsComputed.value,\n }\n})\n\nconst onCalendarClick = () => {\n setTimeout(() => {\n if (!flatickrRefIsInitialized(flatickrRef.value)) return\n if (isOpened.value) {\n flatickrRef.value.fp.close()\n return\n }\n onTextFieldBlur()\n flatickrRef.value.fp.open()\n flatickrRef.value.fpInput().focus()\n }, 0)\n}\n\nconst requiredIf = useValidateRequiredIf()\n\nconst rules = computed(() => {\n return {\n textFieldValue: {\n required: requiredIf(props.required),\n },\n }\n})\n\nconst v$ = useVuelidate(rules, { textFieldValue })\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessages)) return props.errorMessages\n if (v$.value.textFieldValue.$errors.length)\n return [v$.value.textFieldValue.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nwatch(\n () => props.modelValue,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n if ((isNull(newValue) || isUndefined(newValue)) && !isNull(props.defaultValue)) {\n flatpickrValue.value = props.defaultValue\n return\n }\n flatpickrValue.value = isUndefined(newValue) ? null : newValue\n },\n { immediate: true }\n)\n\nwatch(\n flatickrRef,\n (newValue, oldValue) => {\n if (initialized.value === true) return\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue)) return\n onFlatpickrChange()\n initialized.value = true\n },\n { immediate: true }\n)\n\nonMounted(() => {\n // @ts-ignore\n import('shortcut-buttons-flatpickr').then((module) => {\n shortcutButtonsPlugin.value = module.default\n pluginsImported.value = true\n })\n})\n</script>\n\n<template>\n <VTextField\n ref=\"textFieldRef\"\n v-model=\"textFieldValue\"\n :error-messages=\"errorMessageComputed\"\n :persistent-placeholder=\"true\"\n :placeholder=\"placeholderComputed\"\n class=\"a-datetime-picker\"\n @blur=\"onTextFieldBlur\"\n @keyup.enter=\"onTextFieldBlur\"\n >\n <template #append-inner>\n <VIcon\n v-if=\"clearable && defaultValue !== modelValue\"\n class=\"a-datetime-picker__clearable\"\n icon=\"mdi-close-circle\"\n @click.stop=\"onClear\"\n />\n <div>\n <FlatPickr\n v-if=\"pluginsImported\"\n ref=\"flatickrRef\"\n :config=\"flatpickrConfig\"\n :disabled=\"disabled\"\n :model-value=\"flatpickrValue\"\n @update:model-value=\"onFlatpickrUpdate\"\n @on-close=\"onFlatpickrClose\"\n @on-open=\"onFlatpickrOpen\"\n @on-change=\"onFlatpickrChange\"\n />\n <VIcon\n class=\"a-datetime-picker__calendar\"\n icon=\"mdi-calendar\"\n @click.stop=\"onCalendarClick\"\n />\n </div>\n </template>\n <template\n v-if=\"!hideLabel\"\n #label\n >\n {{ label\n }}<span\n v-if=\"required\"\n class=\"required\"\n />\n </template>\n </VTextField>\n</template>\n\n<style lang=\"scss\" scoped>\n.a-datetime-picker {\n :deep(.v-field__append-inner .v-icon) {\n cursor: pointer;\n }\n\n &__calendar {\n opacity: 0.6 !important;\n }\n\n &__clearable {\n opacity: 0 !important;\n }\n\n &:hover {\n .a-datetime-picker__clearable {\n opacity: 0.6 !important;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADatetimePicker from '@/components/ADatetimePicker.vue'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { DatetimeUTCNullable } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DatetimeUTCNullable | undefined\n label?: string\n errorMessage?: string\n required?: boolean\n v?: any\n dataCy?: string\n clearable?: boolean\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n dataCy: undefined,\n clearable: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DatetimeUTCNullable | undefined): void\n (e: 'click:append', data: string | number | null): void\n (e: 'blur', data: string | number | null): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DatetimeUTCNullable | undefined) {\n emit('update:modelValue', newValue)\n },\n})\n\nconst onBlur = () => {\n emit('blur', isUndefined(props.modelValue) ? null : props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return [props.v.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n</script>\n\n<template>\n <ADatetimePicker\n v-model=\"modelValueComputed\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :required=\"requiredComputed\"\n :label=\"labelComputed\"\n :clearable=\"clearable\"\n @blur=\"onBlur\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADatetimePicker from '@/components/ADatetimePicker.vue'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isFunction, isNull, isUndefined } from '@/utils/common'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { DatetimeUTCNullable } from '@/types/common'\nimport { dateTimeNow } from '@/utils/datetime'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DatetimeUTCNullable | undefined\n label?: string\n errorMessage?: string\n v?: any\n dataCy?: string\n clearable?: boolean\n defaultActivationValue?: DatetimeUTCNullable | 'now' | (() => DatetimeUTCNullable)\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n v: null,\n dataCy: undefined,\n clearable: false,\n defaultActivationValue: 'now',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DatetimeUTCNullable | undefined): void\n (e: 'click:append', data: string | number | null): void\n (e: 'blur', data: string | number | null): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst checkboxModel = ref(false)\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DatetimeUTCNullable | undefined) {\n emit('update:modelValue', newValue)\n },\n})\n\nconst onBlur = () => {\n emit('blur', isUndefined(props.modelValue) ? null : props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return [props.v.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nwatch(\n modelValueComputed,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue)) {\n checkboxModel.value = false\n return\n }\n checkboxModel.value = true\n },\n { immediate: true }\n)\n\nconst onCheckboxClick = (value: boolean) => {\n if (value) {\n modelValueComputed.value = null\n return\n }\n if (props.defaultActivationValue === 'now') {\n modelValueComputed.value = dateTimeNow()\n return\n }\n if (isFunction(props.defaultActivationValue)) {\n modelValueComputed.value = props.defaultActivationValue()\n return\n }\n modelValueComputed.value = props.defaultActivationValue\n}\n</script>\n\n<template>\n <VCheckboxBtn\n v-model=\"checkboxModel\"\n :label=\"labelComputed\"\n @click.stop=\"onCheckboxClick(checkboxModel)\"\n />\n <VExpandTransition>\n <div v-show=\"checkboxModel\">\n <ADatetimePicker\n v-model=\"modelValueComputed\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :clearable=\"clearable\"\n @blur=\"onBlur\"\n />\n </div>\n </VExpandTransition>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADatetimePicker from '@/components/ADatetimePicker.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCy?: string\n }>(),\n {\n dataCy: 'filter-datepicker',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n</script>\n\n<template>\n <ADatetimePicker\n v-model=\"value\"\n :data-cy=\"dataCy\"\n :clearable=\"!modelValue.mandatory\"\n :default-value=\"modelValue.default\"\n :label=\"label\"\n />\n</template>\n","import { computed, reactive } from 'vue'\nimport type { Pagination } from '@/types/Pagination'\n\nexport function usePagination(sortBy: string | null = 'id') {\n return reactive<Pagination>({\n sortBy: sortBy,\n descending: true,\n page: 1,\n rowsPerPage: 25,\n rowsNumber: 0,\n hasNextPage: null,\n currentViewCount: 0,\n totalCount: 0,\n })\n}\n\nexport function usePaginationAutoHide(pagination: Pagination) {\n const showPagination = computed(() => {\n if (pagination.page === 1 && pagination.currentViewCount < pagination.rowsPerPage) return false\n return true\n })\n\n return {\n showPagination,\n }\n}\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, inject, ref, toRefs, watch } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { usePagination } from '@/composables/system/pagination'\nimport { cloneDeep, isArray, isNull, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { Ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId, IntegerId } from '@/types/common'\n\ntype fetchItemsByIdsType =\n | ((ids: IntegerId[]) => Promise<ValueObjectOption<IntegerId>[]>)\n | ((ids: DocId[]) => Promise<ValueObjectOption<DocId>[]>)\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n label?: string | undefined\n required?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n v?: any\n errorMessage?: string\n hideDetails?: boolean\n hideLabel?: boolean\n fetchItems: (pagination: Pagination, filterBag: FilterBag) => Promise<ValueObjectOption<string | number>[]>\n fetchItemsByIds: fetchItemsByIdsType\n innerFilter: FilterBag\n filterByField?: string\n filterSortBy?: string | null\n disableInitFetch?: boolean | undefined\n loading?: boolean\n }>(),\n {\n label: undefined,\n required: undefined,\n multiple: false,\n clearable: false,\n v: null,\n errorMessage: undefined,\n hideDetails: false,\n hideLabel: false,\n filterByField: 'name',\n filterSortBy: 'createdAt',\n disableInitFetch: false,\n loading: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | IntegerId | DocId[] | IntegerId[] | null): void\n (e: 'searchChange', data: string): void\n (e: 'searchChangeDebounced', data: string): void\n (e: 'blur', data: DocId | IntegerId | DocId[] | IntegerId[] | null): void\n}>()\n\nconst modelValue = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DocId | IntegerId | DocId[] | IntegerId[] | null) {\n emit('update:modelValue', cloneDeep<DocId | IntegerId | DocId[] | IntegerId[] | null>(newValue))\n },\n})\n\nconst search = ref('')\nconst isFocused = ref(false)\nconst autoFetchTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nconst { t } = useI18n()\n\nconst { innerFilter } = toRefs(props)\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst onBlur = () => {\n isFocused.value = true\n emit('blur', props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return props.v.$errors.map((item: ErrorObject) => item.$message)\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n return props.v?.required && props.v?.required.$params.type === 'required'\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.multiple === false) return false\n return true as unknown as undefined\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst pagination = usePagination(props.filterSortBy)\nconst fetchedItems = ref<ValueObjectOption<string | number>[]>([])\nconst selectedItemsCache = ref<ValueObjectOption<string | number>[]>([])\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final = new Map()\n selectedItemsCache.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title })\n })\n fetchedItems.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title })\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value.title }\n })\n})\n\nconst loadingLocal = ref(false)\nconst loadingComputed = computed(() => {\n if (loadingLocal.value) return true\n return props.loading\n})\n\nconst apiSearch = async (query: string) => {\n loadingLocal.value = true\n const filterField = innerFilter.value[props.filterByField]\n filterField.model = query\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n loadingLocal.value = false\n}\n\nconst findLocalDataByValues = (values: Array<DocId | IntegerId>) => {\n const found = allItems.value.filter((item: ValueObjectOption<string | number>) => values.includes(item.value))\n return ([] as ValueObjectOption<string | number>[]).concat(found)\n}\n\nconst tryToLoadFromLocalData = async (value: string | number | string[] | number[]) => {\n let count = 1\n let foundItems = []\n if (isArray(value)) {\n count = value.length\n foundItems = findLocalDataByValues(value)\n } else {\n foundItems = findLocalDataByValues([value])\n }\n selectedItemsCache.value = foundItems\n return foundItems.length === count\n}\n\nconst autoFetched = ref(false)\nconst clearAutoFetchTimer = () => {\n clearTimeout(autoFetchTimer.value)\n autoFetchTimer.value = undefined\n}\nconst autoFetch = async () => {\n clearAutoFetchTimer()\n if (autoFetched.value === true) return\n autoFetched.value = true\n // if (\n // isNull(modelValue.value) ||\n // isUndefined(modelValue.value) ||\n // (isArray(modelValue.value) && modelValue.value.length === 0)\n // ) {\n loadingLocal.value = true\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n loadingLocal.value = false\n // }\n}\nconst onFocus = () => {\n isFocused.value = true\n clearAutoFetchTimer()\n autoFetch()\n}\n\nconst singleItemSelectedTitle = computed(() => {\n if (!props.multiple && selectedItemsCache.value[0]) {\n return selectedItemsCache.value[0].title\n }\n return undefined\n})\n\nconst onSearchUpdate = (query: string) => {\n if (!props.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n if (singleItemSelectedTitle.value === query) return\n search.value = query\n}\n\nconst onClickClear = async () => {\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n if (props.multiple) {\n modelValue.value = []\n return\n }\n modelValue.value = null\n}\n\nwatch(\n modelValue,\n async (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n selectedItemsCache.value = []\n if (props.disableInitFetch || autoFetched.value === true) return\n autoFetchTimer.value = setTimeout(() => {\n autoFetch()\n }, 3000)\n return\n }\n const found = await tryToLoadFromLocalData(newValue)\n if (found) return\n if (isArray<IntegerId | DocId>(newValue)) {\n loadingLocal.value = true\n selectedItemsCache.value = await props.fetchItemsByIds(newValue as Array<IntegerId & DocId>)\n loadingLocal.value = false\n return\n }\n loadingLocal.value = true\n selectedItemsCache.value = await props.fetchItemsByIds([newValue as DocId & IntegerId])\n loadingLocal.value = false\n },\n { immediate: true }\n)\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n apiSearch(newValue)\n emit('searchChangeDebounced', newValue)\n }\n },\n { debounce: 300, maxWait: 1000 }\n)\n\nwatch(search, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n emit('searchChange', newValue)\n }\n})\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :items=\"allItems\"\n no-filter\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :chips=\"multiple\"\n :hide-details=\"hideDetails\"\n :loading=\"loadingComputed\"\n @update:search=\"onSearchUpdate\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @click:clear=\"onClickClear\"\n >\n <template #label>\n <span\n v-if=\"!hideLabel\"\n :key=\"requiredComputed + ''\"\n >\n {{ labelComputed }}\n <span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </span>\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, onMounted, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean\n callbackToTrue: () => Promise<boolean> // return true if successfully changed, otherwise return false\n callbackToFalse: () => Promise<boolean> // return true if successfully changed, otherwise return false\n label?: string | undefined\n hideDetails?: boolean | undefined\n hideLabel?: boolean | undefined\n v?: any\n }>(),\n {\n label: undefined,\n hideDetails: undefined,\n hideLabel: undefined,\n v: null,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst loading = ref(false)\nconst hasError = ref(false)\nconst uniqueId = ref('')\n\nconst modelValueComputed = computed(() => {\n return props.modelValue\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst internalModelValue = ref(props.modelValue)\n\nconst onClick = async () => {\n if (loading.value) return\n loading.value = true\n hasError.value = false\n if (internalModelValue.value === true) {\n const success = await props.callbackToFalse()\n emit('update:modelValue', !success)\n internalModelValue.value = !success\n if (!success) hasError.value = true\n loading.value = false\n return\n }\n const success = await props.callbackToTrue()\n emit('update:modelValue', success)\n internalModelValue.value = success\n if (!success) hasError.value = true\n loading.value = false\n}\n\nwatch(modelValueComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n internalModelValue.value = newValue\n hasError.value = false\n }\n})\n\nonMounted(() => {\n uniqueId.value = 'remote-switch-' + Date.now()\n})\n</script>\n\n<template>\n <div class=\"d-flex\">\n <VCheckboxBtn\n :id=\"uniqueId\"\n v-model=\"internalModelValue\"\n :disabled=\"loading\"\n @click.stop=\"onClick\"\n />\n <label\n v-if=\"!hideLabel\"\n :for=\"uniqueId\"\n class=\"v-label v-label--clickable\"\n >\n {{ labelComputed }}\n </label>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, onMounted, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean\n callbackToTrue: () => Promise<boolean> // return true if successfully changed, otherwise return false\n callbackToFalse: () => Promise<boolean> // return true if successfully changed, otherwise return false\n label?: string | undefined\n hideDetails?: boolean | undefined\n hideLabel?: boolean | undefined\n v?: any\n }>(),\n {\n label: undefined,\n hideDetails: undefined,\n hideLabel: undefined,\n v: null,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst loading = ref(false)\nconst hasError = ref(false)\nconst uniqueId = ref('')\n\nconst modelValueComputed = computed(() => {\n return props.modelValue\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst internalModelValue = ref(props.modelValue)\n\nconst onClick = async () => {\n if (loading.value) return\n loading.value = true\n hasError.value = false\n if (internalModelValue.value === true) {\n const success = await props.callbackToFalse()\n emit('update:modelValue', !success)\n internalModelValue.value = !success\n if (!success) hasError.value = true\n loading.value = false\n return\n }\n const success = await props.callbackToTrue()\n emit('update:modelValue', success)\n internalModelValue.value = success\n if (!success) hasError.value = true\n loading.value = false\n}\n\nwatch(modelValueComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n internalModelValue.value = newValue\n hasError.value = false\n }\n})\n\nonMounted(() => {\n uniqueId.value = 'a-remote-switch-' + Date.now()\n})\n</script>\n\n<template>\n <div class=\"d-flex\">\n <VBtn\n :id=\"uniqueId\"\n icon\n class=\"a-switch-fix-click\"\n color=\"transparent\"\n :ripple=\"false\"\n :width=\"hideLabel ? 36 : undefined\"\n :height=\"36\"\n @click.stop=\"onClick\"\n >\n <VSwitch\n v-model=\"internalModelValue\"\n :loading=\"loading\"\n :disabled=\"loading\"\n :hide-details=\"hideDetails\"\n density=\"compact\"\n @click.stop=\"onClick\"\n >\n <template\n v-if=\"hasError\"\n #append\n >\n <VIcon\n icon=\"mdi-alert\"\n class=\"ml-5 mt-1\"\n size=\"x-small\"\n color=\"error\"\n />\n </template>\n </VSwitch>\n </VBtn>\n <label\n v-if=\"!hideLabel\"\n :for=\"uniqueId\"\n class=\"v-label v-label--clickable\"\n >\n {{ labelComputed }}\n </label>\n </div>\n</template>\n\n<style lang=\"scss\">\n.v-btn.a-switch-fix-click:hover > .v-btn__overlay {\n opacity: 0;\n max-height: 36px;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { cloneDeep, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n items: any[]\n label?: string\n errorMessage?: string\n required?: boolean\n v?: any\n hideLabel?: boolean\n multiple?: boolean\n hideDetails?: boolean\n clearable?: boolean\n dataCy?: string\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n hideLabel: false,\n multiple: false,\n hideDetails: false,\n clearable: false,\n dataCy: '',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'blur', data: any): void\n}>()\n\nconst modelValue = computed({\n get() {\n return props.modelValue\n },\n set(newValue) {\n emit('update:modelValue', cloneDeep<any>(newValue))\n },\n})\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst { t } = useI18n()\n\nconst onBlur = () => {\n emit('blur', props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return props.v.$errors.map((item: ErrorObject) => item.$message)\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.multiple === false) return false\n return true as unknown as undefined\n})\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :items=\"items\"\n item-title=\"title\"\n item-value=\"value\"\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :data-cy=\"dataCy\"\n @blur=\"onBlur\"\n >\n <template #label>\n <span v-if=\"!hideLabel\">{{ labelComputed\n }}<span\n v-if=\"requiredComputed\"\n class=\"required\"\n /></span>\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Filter } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n items: ValueObjectOption<string | number>[]\n }>(),\n {}\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'change'): void\n}>()\nconst { clearOne } = useFilterHelpers()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n emit('change')\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.modelValue.multiple === false) return false\n return true as unknown as undefined\n})\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"value\"\n :items=\"items\"\n :chips=\"modelValue.multiple\"\n :label=\"label\"\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"!modelValue.mandatory\"\n data-cy=\"filter-value\"\n @clear=\"clearOne(modelValue)\"\n @change=\"emit('change')\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, type Ref, ref, toRefs, watch } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/types/Pagination'\nimport type { Filter, FilterBag } from '@/types/Filter'\nimport { usePagination } from '@/composables/system/pagination'\nimport { cloneDeep, isArray, isNull, isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId, IntegerId } from '@/types/common'\n\ntype fetchItemsByIdsType =\n | ((ids: IntegerId[]) => Promise<ValueObjectOption<IntegerId>[]>)\n | ((ids: DocId[]) => Promise<ValueObjectOption<DocId>[]>)\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n fetchItems: (pagination: Pagination, filterBag: FilterBag) => Promise<ValueObjectOption<string | number>[]>\n fetchItemsByIds: fetchItemsByIdsType\n innerFilter: FilterBag\n filterByField?: string\n filterSortBy?: string | null\n disableInitFetch?: boolean | undefined\n placeholder?: string | undefined\n }>(),\n {\n filterByField: 'name',\n filterSortBy: 'createdAt',\n disableInitFetch: false,\n placeholder: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: Filter): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue: DocId | IntegerId | DocId[] | IntegerId[] | null) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: cloneDeep(newValue) } })\n },\n})\n\nconst search = ref('')\nconst isFocused = ref(false)\nconst autoFetchTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nconst { t } = useI18n()\n\nconst { innerFilter } = toRefs(props)\n\nconst onBlur = () => {\n isFocused.value = true\n}\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.modelValue.multiple === false) return false\n return true as unknown as undefined\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst pagination = usePagination(props.filterSortBy)\nconst fetchedItems = ref<ValueObjectOption<string | number>[]>([])\nconst selectedItemsCache = ref<ValueObjectOption<string | number>[]>([])\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final = new Map()\n selectedItemsCache.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title })\n })\n fetchedItems.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title })\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value.title }\n })\n})\n\nconst loading = ref(false)\n\nconst apiSearch = async (query: string) => {\n loading.value = true\n const filterField = innerFilter.value[props.filterByField]\n filterField.model = query\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n loading.value = false\n}\n\nconst findLocalDataByValues = (values: Array<DocId | IntegerId>) => {\n const found = allItems.value.filter((item: ValueObjectOption<string | number>) => values.includes(item.value))\n return ([] as ValueObjectOption<string | number>[]).concat(found)\n}\n\nconst tryToLoadFromLocalData = async (value: string | number | string[] | number[]) => {\n let count = 1\n let foundItems = []\n if (isArray(value)) {\n count = value.length\n foundItems = findLocalDataByValues(value)\n } else {\n foundItems = findLocalDataByValues([value])\n }\n selectedItemsCache.value = foundItems\n return foundItems.length === count\n}\n\nconst autoFetched = ref(false)\nconst clearAutoFetchTimer = () => {\n clearTimeout(autoFetchTimer.value)\n autoFetchTimer.value = undefined\n}\nconst autoFetch = async () => {\n clearAutoFetchTimer()\n if (autoFetched.value === true) return\n autoFetched.value = true\n // if (\n // isNull(modelValueComputed.value) ||\n // isUndefined(modelValueComputed.value) ||\n // (isArray(modelValueComputed.value) && modelValueComputed.value.length === 0)\n // ) {\n loading.value = true\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n loading.value = false\n // }\n}\nconst onFocus = () => {\n isFocused.value = true\n clearAutoFetchTimer()\n autoFetch()\n}\n\nconst singleItemSelectedTitle = computed(() => {\n if (!props.modelValue.multiple && selectedItemsCache.value[0]) {\n return selectedItemsCache.value[0].title\n }\n return undefined\n})\n\nconst onSearchUpdate = (query: string) => {\n if (!props.modelValue.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n if (singleItemSelectedTitle.value === query) return\n search.value = query\n}\n\nconst onClickClear = async () => {\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n if (props.modelValue.multiple) {\n modelValueComputed.value = []\n return\n }\n modelValueComputed.value = null\n}\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (props.modelValue.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (props.modelValue.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (props.modelValue.variant === 'contains' || props.modelValue.variant === 'search')\n return t('common.model.filterPlaceholder.contains')\n return ''\n})\n\nwatch(\n modelValueComputed,\n async (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n selectedItemsCache.value = []\n if (props.disableInitFetch || autoFetched.value === true) return\n autoFetchTimer.value = setTimeout(() => {\n autoFetch()\n }, 3000)\n return\n }\n const found = await tryToLoadFromLocalData(newValue)\n if (found) return\n if (isArray<IntegerId | DocId>(newValue)) {\n loading.value = true\n selectedItemsCache.value = await props.fetchItemsByIds(newValue as Array<IntegerId & DocId>)\n loading.value = false\n return\n }\n loading.value = true\n selectedItemsCache.value = await props.fetchItemsByIds([newValue as DocId & IntegerId])\n loading.value = false\n },\n { immediate: true }\n)\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n apiSearch(newValue)\n }\n },\n { debounce: 300, maxWait: 1000 }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValueComputed\"\n :items=\"allItems\"\n no-filter\n :placeholder=\"placeholderComputed\"\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"!modelValue.mandatory\"\n :label=\"label\"\n :chips=\"modelValue.multiple\"\n :loading=\"loading\"\n @update:search=\"onSearchUpdate\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @click:clear=\"onClickClear\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\n\nimport type { Filter } from '@/types/Filter'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCyTrue?: string\n dataCyFalse?: string\n }>(),\n {\n dataCyTrue: 'filter-true',\n dataCyFalse: 'filter-false',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n</script>\n\n<template>\n <div class=\"a-filter-boolean-group d-flex flex-column align-left justify-center mb-2\">\n <VLabel class=\"pr-1\">\n <span>{{ label }}</span>\n </VLabel>\n <VBtnToggle v-model=\"value\">\n <VBtn\n size=\"small\"\n :value=\"true\"\n :data-cy=\"dataCyTrue\"\n :color=\"value === true ? 'secondary' : ''\"\n >\n {{ t('common.model.boolean.true') }}\n </VBtn>\n <VBtn\n size=\"small\"\n :value=\"false\"\n :data-cy=\"dataCyFalse\"\n :color=\"value === false ? 'secondary' : ''\"\n >\n {{ t('common.model.boolean.false') }}\n </VBtn>\n </VBtnToggle>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.a-filter-boolean-group {\n position: relative;\n\n .v-label {\n position: absolute;\n top: -4px;\n left: 0;\n z-index: 2;\n }\n\n .v-btn-group {\n position: relative;\n margin-top: 20px;\n\n .v-btn {\n height: 33px !important;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport type { Filter } from '@/types/Filter'\nimport { isNull, isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCy?: string\n }>(),\n {\n dataCy: 'filter-boolean',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n}>()\n\nconst value = computed({\n get() {\n if (isUndefined(props.modelValue.model) || isNull(props.modelValue.model)) return -1\n return props.modelValue.model ? 1 : 0\n },\n set(newValue) {\n let returnValue: null | boolean = null\n if (newValue === 1) returnValue = true\n if (newValue === 0) returnValue = false\n emit('update:modelValue', { ...props.modelValue, ...{ model: returnValue } })\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst items = computed(() => {\n return [\n { value: -1, title: t('common.model.notSelected') },\n { value: 1, title: t('common.model.boolean.true') },\n { value: 0, title: t('common.model.boolean.false') },\n ]\n})\n</script>\n\n<template>\n <VSelect\n v-model=\"value\"\n :data-cy=\"dataCy\"\n :label=\"label\"\n :items=\"items\"\n />\n</template>\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport enum JobStatus {\n Waiting = 'waiting',\n Processing = 'processing',\n AwaitingBatchProcess = 'awaiting_batch_process',\n Done = 'done',\n Error = 'error',\n Default = Waiting,\n}\n\nexport function useJobStatus() {\n const { t } = useI18n()\n\n const jobStatusOptions = ref<ValueObjectOption<JobStatus>[]>([\n {\n value: JobStatus.Waiting,\n title: t('common.job.status.waiting'),\n color: 'warning',\n },\n {\n value: JobStatus.Processing,\n title: t('common.job.status.processing'),\n color: 'primary',\n },\n {\n value: JobStatus.AwaitingBatchProcess,\n title: t('common.job.status.awaitingBatchProcess'),\n color: 'primary',\n },\n {\n value: JobStatus.Done,\n title: t('common.job.status.done'),\n color: 'success',\n },\n {\n value: JobStatus.Error,\n title: t('common.job.status.error'),\n color: 'error',\n },\n ])\n\n const getJobStatusOption = (value: JobStatus): ValueObjectOption<JobStatus> => {\n return jobStatusOptions.value.find((item) => item.value === value) as ValueObjectOption<JobStatus>\n }\n\n return {\n jobStatusOptions,\n getJobStatusOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { JobStatus, useJobStatus } from '@/model/valueObject/JobStatus'\n\nconst props = defineProps<{\n value: JobStatus\n}>()\n\nconst { getJobStatusOption } = useJobStatus()\nconst option = computed(() => getJobStatusOption(props.value))\n</script>\n\n<template>\n <VChip\n :color=\"option?.color\"\n label\n size=\"small\"\n >\n {{ option?.title }}\n </VChip>\n</template>\n","import type { Immutable } from '@/utils/object'\nimport { objectDeepFreeze } from '@/utils/object'\n\nconst commonConfig = {\n CHIP: {\n CLASS: {\n NO_LINK: 'v-chip-custom-no-link',\n },\n ICON: {\n LINK: 'mdi-arrow-top-right',\n LINK_EXTERNAL: 'mdi-open-in-new',\n },\n },\n}\n\nexport const COMMON_CONFIG: Immutable<typeof commonConfig> = objectDeepFreeze(commonConfig)\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport { useRouter } from 'vue-router'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { objectGetValueByPath } from '@/utils/object'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { COMMON_CONFIG } from '@/model/commonConfig'\n\nconst props = withDefaults(\n defineProps<{\n id?: null | undefined | IntegerId | DocId\n title?: string\n containerClass?: undefined | string\n getCachedFn: (id: any) => any\n displayTextPath: string\n route: string\n disableClick?: boolean\n openInNew?: boolean\n size?: string\n forceRounded?: boolean\n textOnly?: boolean\n fallbackIdText?: boolean\n wrapText?: boolean\n }>(),\n {\n id: null,\n title: '',\n containerClass: 'd-inline-flex',\n disableClick: false,\n openInNew: false,\n size: 'small',\n forceRounded: false,\n textOnly: false,\n fallbackIdText: false,\n wrapText: false,\n }\n)\n\nconst router = useRouter()\nconst cached = shallowRef<undefined | any>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return props.getCachedFn(props.id as any)\n})\n\nconst containerClassComputed = computed(() => {\n return props.wrapText ? props.containerClass + ' a-chip--wrap' : props.containerClass\n})\n\nconst displayTitle = computed(() => {\n if (props.title.length > 0) return props.title\n if (cached.value) {\n return objectGetValueByPath(cached.value, props.displayTextPath)\n }\n return props.fallbackIdText ? props.id : ''\n})\n\nconst onClick = () => {\n router.push({ name: props.route, params: { id: props.id } })\n}\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div :class=\"containerClassComputed\">\n <template v-if=\"isNull(id) || isUndefined(id)\">\n <slot name=\"empty\">\n -\n </slot>\n </template>\n <div v-else-if=\"textOnly\">\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </div>\n <VChip\n v-else-if=\"disableClick\"\n :size=\"size\"\n :label=\"forceRounded ? undefined : true\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n <VChip\n v-else\n :size=\"size\"\n :append-icon=\"openInNew ? COMMON_CONFIG.CHIP.ICON.LINK_EXTERNAL : COMMON_CONFIG.CHIP.ICON.LINK\"\n :label=\"forceRounded ? undefined : true\"\n @click.stop=\"onClick\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-chip--wrap {\n .v-chip {\n height: auto !important;\n }\n\n .v-chip .v-chip__content {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n white-space: pre-wrap;\n }\n}\n</style>\n","import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport enum LogLevel {\n Debug = 'DEBUG',\n Info = 'INFO',\n Notice = 'NOTICE',\n Warning = 'WARNING',\n Error = 'ERROR',\n Critical = 'CRITICAL',\n Alert = 'ALERT',\n Emergency = 'EMERGENCY',\n Default = Info,\n}\n\nexport function useLogLevel() {\n const logLevelOptions = ref<ValueObjectOption<LogLevel>[]>([\n {\n value: LogLevel.Debug,\n title: LogLevel.Debug,\n color: 'blue-grey lighten-5',\n },\n {\n value: LogLevel.Info,\n title: LogLevel.Info,\n color: 'blue-grey lighten-3',\n },\n {\n value: LogLevel.Notice,\n title: LogLevel.Notice,\n color: 'amber lighten-4',\n },\n {\n value: LogLevel.Warning,\n title: LogLevel.Warning,\n color: 'amber',\n },\n {\n value: LogLevel.Error,\n title: LogLevel.Error,\n color: 'red',\n },\n {\n value: LogLevel.Critical,\n title: LogLevel.Critical,\n color: 'red accent-4',\n },\n {\n value: LogLevel.Alert,\n title: LogLevel.Alert,\n color: 'pink',\n },\n {\n value: LogLevel.Emergency,\n title: LogLevel.Emergency,\n color: 'ping darken-4',\n },\n ])\n\n const getLogLevelOption = (value: LogLevel) => {\n return logLevelOptions.value.find((item) => item.value === value)\n }\n\n return {\n logLevelOptions,\n getLogLevelOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { type LogLevel, useLogLevel } from '@/model/valueObject/LogLevel'\n\nconst props = withDefaults(\n defineProps<{\n level: LogLevel\n }>(),\n {}\n)\n\nconst { getLogLevelOption } = useLogLevel()\nconst levelOption = computed(() => {\n return getLogLevelOption(props.level)\n})\n</script>\n\n<template>\n <VChip\n v-if=\"levelOption\"\n :color=\"levelOption.color\"\n label\n size=\"small\"\n >\n {{ levelOption.title }}\n </VChip>\n</template>\n","export const numberToString = (value: number): string => {\n return '' + value\n}\n","<script lang=\"ts\" setup>\nimport { useClipboard } from '@vueuse/core'\nimport { eventClickBlur } from '@/utils/event'\nimport { isNumber, isString } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { numberToString } from '@/utils/number'\n\nconst props = withDefaults(\n defineProps<{\n value: number | string\n notifyT?: string\n dataCy?: string\n }>(),\n {\n notifyT: 'common.alert.textWasCopied',\n dataCy: 'copy-text',\n }\n)\n\nconst { copy, isSupported } = useClipboard()\nconst { showSuccess } = useAlerts()\nconst { t } = useI18n()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n if (!isSupported) return\n if (isNumber(props.value)) {\n copy(numberToString(props.value)).then(() => {\n showSuccess(t(props.notifyT))\n })\n } else if (isString(props.value) && props.value.length) {\n copy(props.value).then(() => {\n showSuccess(t(props.notifyT))\n })\n }\n}\n</script>\n\n<template>\n <div\n :class=\"{ 'cursor-pointer': isSupported }\"\n :data-cy=\"dataCy\"\n class=\"d-inline-flex align-center anzu-copy-text\"\n @click.stop=\"onClick\"\n >\n <span>{{ value }}</span>\n <VIcon\n v-if=\"isSupported\"\n class=\"ml-1\"\n size=\"x-small\"\n icon=\"mdi-content-copy\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n Copy\n </VTooltip>\n </div>\n</template>\n\n<style lang=\"scss\">\n.anzu-copy-text {\n .v-icon {\n opacity: 0;\n }\n\n &:hover {\n .v-icon {\n opacity: 1;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n color?: string | undefined\n size?: string\n dataCy?: string | undefined\n }>(),\n {\n color: undefined,\n size: 'small',\n dataCy: undefined,\n }\n)\n\nconst customColorClass = computed(() => {\n return isUndefined(props.color) ? 'a-chip-no-link--custom-color' : ''\n})\n</script>\n\n<template>\n <VChip\n :color=\"color as string\"\n :data-cy=\"dataCy\"\n class=\"a-chip-no-link\"\n :class=\"customColorClass\"\n label\n :size=\"size as string\"\n >\n <slot />\n </VChip>\n</template>\n","<script lang=\"ts\" setup>\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\nimport { useI18n } from 'vue-i18n'\nimport ARow from '@/components/ARow.vue'\nimport ADatetime from '@/components/ADatetime.vue'\n\n// todo add user details, find generic way for all systems\n\nwithDefaults(\n defineProps<{\n data: AnzuUserAndTimeTrackingAware | any\n hideCreatedAt?: boolean\n hideModifiedAt?: boolean\n hideCreatedBy?: boolean\n hideModifiedBy?: boolean\n }>(),\n {\n hideCreatedAt: false,\n hideModifiedAt: false,\n hideCreatedBy: false,\n hideModifiedBy: false,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ARow\n v-if=\"!hideCreatedAt\"\n :title=\"t('common.model.tracking.created')\"\n >\n <ADatetime :date-time=\"data.createdAt\" />\n </ARow>\n <ARow\n v-if=\"!hideModifiedAt\"\n :title=\"t('common.model.tracking.modified')\"\n >\n <ADatetime :date-time=\"data.modifiedAt\" />\n </ARow>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName?: string\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n size?: number\n }>(),\n {\n routeName: undefined,\n routeParams: undefined,\n buttonT: 'common.button.close',\n buttonClass: 'ml-2',\n dataCy: 'button-close',\n size: 36,\n }\n)\n\nconst { t } = useI18n()\n\nconst routerToComputed = computed(() => {\n if (isUndefined(props.routeName)) {\n return undefined\n }\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName }\n})\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :to=\"routerToComputed\"\n icon\n size=\"small\"\n variant=\"text\"\n :width=\"size\"\n :height=\"size\"\n :active=\"false\"\n >\n <VIcon icon=\"mdi-close\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.close') }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport type { ButtonVariant } from '@/types/commonAdmin'\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n size?: number\n variant?: ButtonVariant\n }>(),\n {\n buttonT: 'common.button.create',\n buttonClass: 'ml-2',\n dataCy: 'button-create',\n size: 36,\n variant: 'primary',\n }\n)\n\nconst { t } = useI18n()\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :to=\"{ name: routeName }\"\n :width=\"size\"\n :height=\"size\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :variant=\"variantComputed\"\n :to=\"{ name: routeName }\"\n color=\"primary\"\n rounded=\"pill\"\n :height=\"size\"\n >\n {{ t(buttonT) }}\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport type { ButtonVariant } from '@/types/commonAdmin'\n\nconst props = withDefaults(\n defineProps<{\n variant?: ButtonVariant\n buttonT?: string\n buttonClass?: string\n dialogMessageT?: string\n dialogConfirmButtonT?: string\n dialogCancelButtonT?: string\n dialogConfirmColor?: string\n dialogZIndex?: number\n dialogMaxWidth?: number\n dataCy?: string\n disabled?: boolean\n disableCloseAfterConfirm?: boolean\n loading?: boolean\n color?: string | undefined\n size?: number\n }>(),\n {\n variant: 'icon',\n buttonT: 'common.button.delete',\n buttonClass: 'ml-2',\n dialogMessageT: 'common.system.modal.confirmDelete',\n dialogConfirmButtonT: 'common.button.delete',\n dialogCancelButtonT: 'common.button.cancel',\n dialogConfirmColor: 'primary',\n dialogZIndex: 200,\n dialogMaxWidth: 300,\n dataCy: 'button-delete',\n disabled: false,\n disableCloseAfterConfirm: false,\n color: undefined,\n size: 36,\n }\n)\nconst emit = defineEmits<{\n (e: 'deleteRecord'): void\n}>()\n\nconst dialog = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n dialog.value = true\n}\nconst onConfirm = () => {\n emit('deleteRecord')\n if (!props.disableCloseAfterConfirm) closeDialog()\n}\n\nconst closeDialog = () => {\n dialog.value = false\n}\n\nconst onCancel = () => {\n closeDialog()\n}\n\nconst { t } = useI18n()\n\ndefineExpose({\n closeDialog,\n})\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :disabled=\"disabled\"\n :color=\"color\"\n :loading=\"loading\"\n :width=\"size\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-trash-can-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :variant=\"variantComputed\"\n :color=\"color\"\n rounded=\"pill\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n persistent\n :width=\"500\"\n no-click-animation\n >\n <VCard\n v-if=\"dialog\"\n data-cy=\"delete-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t(dialogMessageT) }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n :disabled=\"loading\"\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t(dialogCancelButtonT) }}\n </ABtnTertiary>\n <ABtnPrimary\n :color=\"dialogConfirmColor\"\n :loading=\"loading\"\n data-cy=\"button-confirm-delete\"\n @click.stop=\"onConfirm\"\n >\n {{ t(dialogConfirmButtonT) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport { useRouter } from 'vue-router'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport type { ButtonVariant } from '@/types/commonAdmin'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n recordId?: number | string | undefined\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n size?: number\n variant?: ButtonVariant\n }>(),\n {\n recordId: undefined,\n routeParams: undefined,\n buttonT: 'common.button.edit',\n buttonClass: 'ml-2',\n dataCy: 'button-edit',\n loading: false,\n size: 36,\n variant: 'primary',\n }\n)\nconst emit = defineEmits<{\n (e: 'editRecord'): void\n}>()\n\nconst { t } = useI18n()\n\nconst router = useRouter()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('editRecord')\n router.push(routerToComputed.value)\n}\n\nconst routerToComputed = computed(() => {\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName, params: { id: props.recordId } }\n})\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :loading=\"loading\"\n :width=\"size\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :variant=\"variantComputed\"\n :data-cy=\"dataCy\"\n :loading=\"loading\"\n color=\"primary\"\n rounded=\"pill\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <span>{{ t(buttonT) }}</span>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport AIconGroup from '@/components/AIconGroup.vue'\n\nwithDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n disabled?: boolean\n }>(),\n {\n buttonT: 'common.button.saveAndClose',\n buttonClass: 'ml-2',\n dataCy: 'button-save-close',\n loading: undefined,\n disabled: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'saveRecordAndClose'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('saveRecordAndClose')\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n color=\"primary\"\n icon=\"\"\n variant=\"outlined\"\n :width=\"36\"\n :height=\"35\"\n @click.stop=\"onClick\"\n >\n <AIconGroup\n main-icon=\"mdi-content-save\"\n secondary-icon=\"mdi-close\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport type { ButtonVariant } from '@/types/commonAdmin'\n\nconst props = withDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n disabled?: boolean\n size?: number\n variant?: ButtonVariant\n }>(),\n {\n buttonT: 'common.button.save',\n buttonClass: 'ml-2',\n dataCy: 'button-save',\n loading: undefined,\n disabled: undefined,\n size: 36,\n variant: 'primary',\n }\n)\nconst emit = defineEmits<{\n (e: 'saveRecord'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('saveRecord')\n}\n\nconst { t } = useI18n()\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n :width=\"size\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :variant=\"variantComputed\"\n color=\"primary\"\n rounded=\"pill\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useClipboard } from '@vueuse/core'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport { isNumber, isString } from '@/utils/common'\nimport { numberToString } from '@/utils/number'\nimport { useAlerts } from '@/composables/system/alerts'\nimport AIconGroup from '@/components/AIconGroup.vue'\n\nconst props = withDefaults(\n defineProps<{\n id: number | string\n buttonT?: string\n buttonClass?: string\n iconT?: string\n notifyT?: string\n dataCy?: string\n size?: 'small' | 'x-small'\n }>(),\n {\n buttonT: 'common.button.copyId',\n buttonClass: 'ml-1',\n iconT: 'common.button.id',\n notifyT: 'common.alert.idWasCopied',\n dataCy: 'table-copy',\n size: 'x-small',\n }\n)\n\nconst { t } = useI18n()\nconst { copy, isSupported } = useClipboard()\nconst { showSuccess } = useAlerts()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n if (isNumber(props.id) && props.id > 0) {\n copy(numberToString(props.id)).then(() => {\n showSuccess(t(props.notifyT))\n })\n } else if (isString(props.id) && props.id.length) {\n copy(props.id).then(() => {\n showSuccess(t(props.notifyT))\n })\n }\n}\n</script>\n\n<template>\n <VBtn\n v-if=\"isSupported\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n :size=\"size\"\n variant=\"text\"\n @click.stop=\"onClick\"\n >\n <AIconGroup\n :secondary-text=\"t(iconT)\"\n main-icon=\"mdi-content-copy\"\n size=\"small\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n recordId?: number | string | undefined\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n recordId: undefined,\n routeParams: undefined,\n buttonT: 'common.button.detail',\n buttonClass: 'ml-1',\n dataCy: 'table-detail',\n }\n)\n\nconst { t } = useI18n()\n\nconst routerToComputed = computed(() => {\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName, params: { id: props.recordId } }\n})\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :to=\"routerToComputed\"\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"() => {}\"\n >\n <VIcon icon=\"mdi-information-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n recordId?: number | string | undefined\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n recordId: undefined,\n routeParams: undefined,\n buttonT: 'common.button.edit',\n buttonClass: 'ml-1',\n dataCy: 'table-edit',\n }\n)\n\nconst { t } = useI18n()\n\nconst routerToComputed = computed(() => {\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName, params: { id: props.recordId } }\n})\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :to=\"routerToComputed\"\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"() => {}\"\n >\n <VIcon icon=\"mdi-pencil\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { eventClickBlur } from '@/utils/event'\nimport type { ButtonVariantText } from '@/types/commonAdmin'\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n disabled?: boolean\n disableMore?: boolean\n size?: undefined | 'small' | 'x-small'\n variant?: ButtonVariantText\n rounded?: 'pill' | undefined\n color?: string\n }>(),\n {\n buttonT: '',\n buttonClass: 'ml-2',\n dataCy: 'button-save',\n loading: undefined,\n disabled: undefined,\n disableMore: false,\n size: undefined,\n variant: 'primary',\n rounded: undefined,\n color: 'primary',\n }\n)\nconst emit = defineEmits<{\n (e: 'onClick'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('onClick')\n}\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n return 'text'\n default:\n return 'flat'\n }\n})\n\nconst loadingComputed = computed(() => {\n if (!props.loading) return false\n switch (variantComputed.value) {\n case 'flat':\n return 'white'\n default:\n return 'primary'\n }\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n v-if=\"disableMore\"\n :variant=\"variantComputed\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :color=\"color\"\n :rounded=\"rounded\"\n :size=\"size\"\n :loading=\"loadingComputed\"\n :disabled=\"disabled\"\n @click.stop=\"onClick\"\n >\n <slot name=\"button-content\">\n {{ t(buttonT) }}\n </slot>\n </VBtn>\n <div\n v-else\n class=\"a-button-split d-inline-flex\"\n :class=\"buttonClass + ' a-button-split--' + variant\"\n >\n <VBtn\n class=\"a-button-split__main\"\n :variant=\"variantComputed\"\n :data-cy=\"dataCy\"\n :loading=\"loadingComputed\"\n :disabled=\"disabled\"\n :size=\"size\"\n :rounded=\"rounded\"\n :color=\"color\"\n @click.stop=\"onClick\"\n >\n <slot name=\"button-content\">\n {{ t(buttonT) }}\n </slot>\n </VBtn>\n <div class=\"a-button-split__divider d-inline-flex\" />\n <VDivider\n v-if=\"variant === 'tertiary'\"\n vertical\n class=\"my-2 border-opacity-50\"\n :color=\"color\"\n />\n <VBtn\n :variant=\"variantComputed\"\n :disabled=\"disabled || loading\"\n :data-cy=\"dataCy\"\n :color=\"color\"\n :rounded=\"rounded\"\n :size=\"size\"\n class=\"a-button-split__more\"\n >\n <VIcon icon=\"mdi-chevron-down\" />\n <VMenu\n activator=\"parent\"\n location=\"bottom right\"\n >\n <VList\n density=\"compact\"\n class=\"pa-0\"\n >\n <slot name=\"default\" />\n </VList>\n </VMenu>\n </VBtn>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-button-split {\n .a-button-split__main {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n padding-right: 10px !important;\n }\n\n .a-button-split__more {\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n padding: 0 4px 0 0 !important;\n min-width: 32px !important;\n }\n\n .a-button-split__divider {\n display: inline-block;\n width: 1px;\n }\n\n &--secondary {\n .a-button-split__more {\n left: -2px;\n }\n }\n}\n</style>\n","import { computed, readonly, ref } from 'vue'\nimport { useStorage } from '@vueuse/core'\n\nexport enum ThemeSettings {\n Light = 'light',\n Dark = 'dark',\n Auto = 'auto',\n}\n\nexport enum Theme {\n Light = 'light',\n Dark = 'dark',\n}\n\nconst storedSettings = useStorage('theme', ThemeSettings.Light)\n\nconst QUERY = '(prefers-color-scheme: dark)'\n\nconst settings = ref<ThemeSettings>(\n Object.values(ThemeSettings).some((val) => val === storedSettings.value)\n ? <ThemeSettings>storedSettings.value\n : ThemeSettings.Light\n)\nconst theme = ref<Theme>(Theme.Light)\nconst systemHasDarkPreference = ref(window.matchMedia && window.matchMedia(QUERY).matches)\n\nconst setTheme = () => {\n switch (settings.value) {\n case ThemeSettings.Auto:\n theme.value = systemHasDarkPreference.value ? Theme.Dark : Theme.Light\n break\n case ThemeSettings.Light:\n theme.value = Theme.Light\n break\n case ThemeSettings.Dark:\n theme.value = Theme.Dark\n break\n }\n}\nsetTheme()\n\nconst setThemeSettings = (value: ThemeSettings) => {\n settings.value = value\n storedSettings.value = value\n}\n\nwindow.matchMedia(QUERY).addEventListener('change', (event) => {\n systemHasDarkPreference.value = event.matches\n setTheme()\n})\n\nconst toolbarColor = computed(() => {\n return theme.value === Theme.Light ? 'white' : '#1A1A1A'\n})\n\nexport function useTheme() {\n const setThemeAuto = () => {\n setThemeSettings(ThemeSettings.Auto)\n setTheme()\n }\n\n const setThemeDark = () => {\n setThemeSettings(ThemeSettings.Dark)\n setTheme()\n }\n\n const setThemeLight = () => {\n setThemeSettings(ThemeSettings.Light)\n setTheme()\n }\n\n const toggleTheme = () => {\n switch (settings.value) {\n case ThemeSettings.Light:\n setThemeDark()\n break\n case ThemeSettings.Dark:\n setThemeAuto()\n break\n default:\n setThemeLight()\n break\n }\n }\n\n return {\n settings: readonly(settings),\n theme: readonly(theme),\n toolbarColor: readonly(toolbarColor),\n toggleTheme,\n setThemeAuto,\n setThemeDark,\n setThemeLight,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport { ThemeSettings, useTheme } from '@/composables/themeSettings'\n\nconst { setThemeDark, setThemeAuto, setThemeLight, settings } = useTheme()\n\nconst { t } = useI18n()\n\nconst isOpen = ref(false)\n</script>\n\n<template>\n <VMenu\n v-model=\"isOpen\"\n close-on-content-click\n >\n <template #activator=\"{ props }\">\n <VBtn\n class=\"pl-1\"\n rounded=\"pill\"\n v-bind=\"props\"\n variant=\"text\"\n data-cy=\"settings-theme\"\n >\n <div v-if=\"settings === ThemeSettings.Auto\">\n <VIcon\n class=\"mr-1\"\n icon=\"mdi-brightness-auto\"\n :size=\"32\"\n />{{ t('common.system.theme.auto') }}\n </div>\n <div v-else-if=\"settings === ThemeSettings.Light\">\n <VIcon\n class=\"mr-1\"\n icon=\"mdi-brightness-7\"\n :size=\"32\"\n />{{ t('common.system.theme.light') }}\n </div>\n <div v-else-if=\"settings === ThemeSettings.Dark\">\n <VIcon\n class=\"mr-1\"\n icon=\"mdi-brightness-4\"\n :size=\"32\"\n />{{ t('common.system.theme.dark') }}\n </div>\n </VBtn>\n </template>\n <VCard>\n <VList density=\"compact\">\n <VListItem\n :title=\"t('common.system.theme.auto')\"\n @click.stop=\"setThemeAuto\"\n >\n <template #prepend>\n <VIcon\n class=\"mr-2\"\n icon=\"mdi-brightness-auto\"\n />\n </template>\n </VListItem>\n <VListItem\n :title=\"t('common.system.theme.light')\"\n @click.stop=\"setThemeLight\"\n >\n <template #prepend>\n <VIcon\n class=\"mr-2\"\n icon=\"mdi-brightness-7\"\n />\n </template>\n </VListItem>\n <VListItem\n :title=\"t('common.system.theme.dark')\"\n @click.stop=\"setThemeDark\"\n >\n <template #prepend>\n <VIcon\n class=\"mr-2\"\n icon=\"mdi-brightness-4\"\n />\n </template>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n</template>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 7410 3900\"\n >\n <path\n fill=\"#b22234\"\n d=\"M0 0h7410v3900H0z\"\n />\n <path\n d=\"M0 450h7410m0 600H0m0 600h7410m0 600H0m0 600h7410m0 600H0\"\n stroke=\"#fff\"\n stroke-width=\"300\"\n />\n <path\n fill=\"#3c3b6e\"\n d=\"M0 0h2964v2100H0z\"\n />\n <g fill=\"#fff\">\n <g id=\"d\">\n <g id=\"c\">\n <g id=\"e\">\n <g id=\"b\">\n <path\n id=\"a\"\n d=\"M247 90l70.534 217.082-184.66-134.164h228.253L176.466 307.082z\"\n />\n <use\n xlink:href=\"#a\"\n y=\"420\"\n />\n <use\n xlink:href=\"#a\"\n y=\"840\"\n />\n <use\n xlink:href=\"#a\"\n y=\"1260\"\n />\n </g>\n <use\n xlink:href=\"#a\"\n y=\"1680\"\n />\n </g>\n <use\n xlink:href=\"#b\"\n x=\"247\"\n y=\"210\"\n />\n </g>\n <use\n xlink:href=\"#c\"\n x=\"494\"\n />\n </g>\n <use\n xlink:href=\"#d\"\n x=\"988\"\n />\n <use\n xlink:href=\"#c\"\n x=\"1976\"\n />\n <use\n xlink:href=\"#e\"\n x=\"2470\"\n />\n </g>\n </svg>\n</template>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 900 600\"\n >\n <rect\n width=\"900\"\n height=\"600\"\n fill=\"#cccccc\"\n />\n </svg>\n</template>\n","<script setup lang=\"ts\">\nimport type { LanguageCode } from '@/composables/languageSettings'\nimport { computed } from 'vue'\nimport FlagSk from '@/components/flags/FlagSk.vue'\nimport FlagEn from '@/components/flags/FlagEn.vue'\nimport FlagEmpty from '@/components/flags/FlagEmpty.vue'\n\n// flag source: https://github.com/hampusborgos/country-flags\n\nconst props = withDefaults(\n defineProps<{\n code?: LanguageCode | undefined\n dataCy?: string\n }>(),\n {\n code: 'xx',\n dataCy: 'flag-country',\n }\n)\n\nconst currentFlagComponent = computed(() => {\n switch (props.code) {\n case 'sk':\n return FlagSk\n case 'en':\n return FlagEn\n default:\n return FlagEmpty\n }\n})\n</script>\n\n<template>\n <div class=\"flag\">\n <component\n :is=\"currentFlagComponent\"\n :data-cy=\"dataCy\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Language, LanguageCode } from '@/composables/languageSettings'\nimport { ALL_LANGUAGES, modifyLanguageSettings, useLanguageSettings } from '@/composables/languageSettings'\nimport { computed, inject } from 'vue'\nimport { isUndefined } from '@/utils/common'\nimport FlagCountry from '@/components/flags/FlagCountry.vue'\nimport type { CurrentUserType } from '@/AnzuSystemsCommonAdmin'\nimport { ROLE_SUPER_ADMIN } from '@/composables/system/ability'\nimport { AvailableLanguagesSymbol, CurrentUserSymbol, DefaultLanguageSymbol } from '@/components/injectionKeys'\n\nconst emit = defineEmits<{\n (e: 'afterChange', code: LanguageCode): void\n}>()\n\nconst currentUser = inject(CurrentUserSymbol) as CurrentUserType\nconst configAvailableLanguages = inject(AvailableLanguagesSymbol) as LanguageCode[]\nconst configDefaultLanguage = inject(DefaultLanguageSymbol) as LanguageCode\n// @ts-ignore\nconst { setLanguage } = modifyLanguageSettings(configAvailableLanguages, configDefaultLanguage)\nconst { currentLanguageCode } = useLanguageSettings()\n\nconst onLanguageChange = (code: LanguageCode) => {\n const result = setLanguage(code)\n if (result) emit('afterChange', code)\n}\n\nconst currentLocale = computed(() => {\n const found = ALL_LANGUAGES.find((item) => item.code === currentLanguageCode.value)\n if (isUndefined(found)) {\n return ALL_LANGUAGES[0]\n }\n return found as Language\n})\n\nconst availableLocales = computed(() => {\n return ALL_LANGUAGES.filter(\n (item) =>\n (configAvailableLanguages.includes(item.code) || item.code === 'xx') &&\n (!item.adminOnly || currentUser.value?.roles.includes(ROLE_SUPER_ADMIN))\n )\n})\n</script>\n\n<template>\n <VMenu>\n <template #activator=\"{ props }\">\n <VBtn\n class=\"pl-1\"\n rounded=\"pill\"\n v-bind=\"props\"\n variant=\"text\"\n data-cy=\"settings-language\"\n >\n <VAvatar\n class=\"mr-1\"\n size=\"30\"\n >\n <FlagCountry :code=\"currentLocale?.code\" />\n </VAvatar>\n {{ currentLocale.title }}\n </VBtn>\n </template>\n <VCard>\n <VList density=\"compact\">\n <VListItem\n v-for=\"locale in availableLocales\"\n :key=\"locale.code\"\n @click.stop=\"onLanguageChange(locale.code)\"\n >\n <VListItemTitle>\n <VAvatar\n class=\"mr-1\"\n size=\"30\"\n >\n <FlagCountry :code=\"locale.code\" />\n </VAvatar>\n {{ locale.title }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n</template>\n\n<style lang=\"scss\" scoped>\n.flag {\n position: relative;\n width: 30px;\n height: 30px;\n\n :deep(svg) {\n width: 90px;\n height: 60px;\n position: absolute;\n top: -15px;\n left: -27px;\n transform: scale(0.7);\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nconst { t } = useI18n()\n\nconst reloadAdmin = () => {\n window.location.reload()\n}\n</script>\n\n<template>\n <span\n v-once\n class=\"system-bar-new-version\"\n >\n {{ t('common.system.newVersionText') }}\n <span\n class=\"text-decoration-underline cursor-pointer\"\n @click.stop=\"reloadAdmin\"\n >\n {{ t('common.system.newVersionReload') }}\n </span>\n </span>\n</template>\n","export const isAnzuApiForbiddenError = (error: unknown): error is AnzuNewVersionFetchError => {\n return error instanceof AnzuNewVersionFetchError\n}\n\nexport class AnzuNewVersionFetchError extends Error {\n constructor(message = '') {\n super(message)\n this.name = 'AnzuNewVersionFetchError'\n this.message = message\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref } from 'vue'\nimport { useIntervalFn } from '@vueuse/core'\nimport ASystemBarNewVersion from '@/components/systemBar/ASystemBarNewVersion.vue'\nimport { isUndefined } from '@/utils/common'\nimport { AnzuNewVersionFetchError } from '@/model/error/AnzuNewVersionFetchError'\n\nconst props = withDefaults(\n defineProps<{\n currentVersion: string\n checkInterval?: number\n jsonRelativePath?: string\n }>(),\n {\n checkInterval: 60000,\n jsonRelativePath: 'config.json',\n }\n)\n\nconst showSystemBar = ref(false)\n\nconst checkNewVersion = async () => {\n try {\n const res = await fetch(`/${props.jsonRelativePath}?random=${Date.now()}`)\n if (res.ok) {\n const contentType = res.headers.get('content-type')\n if (!contentType || !contentType.includes('application/json')) {\n throw new AnzuNewVersionFetchError('Unable to load env config. Incorrect content type.')\n }\n const json = await res.json()\n if (Object.keys(json).length < 1) {\n throw new AnzuNewVersionFetchError('Unable to load env config. Incorrect response body.')\n }\n showSystemBar.value = !isUndefined(json.appVersion) && json.appVersion !== props.currentVersion\n\n return\n }\n throw new AnzuNewVersionFetchError('Unable to load env config. Incorrect response code.')\n } catch (error) {\n if (error instanceof AnzuNewVersionFetchError) {\n console.log(error.message)\n return\n }\n if (error instanceof SyntaxError) {\n console.log('There was a SyntaxError', error)\n return\n }\n console.log('There was an error in new version fetch', error)\n }\n}\n\nconst systemBarComponent = computed(() => {\n return ASystemBarNewVersion\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { pause } = useIntervalFn(() => {\n checkNewVersion()\n}, props.checkInterval)\n\nonBeforeUnmount(() => {\n pause()\n})\n</script>\n\n<template>\n <VAppBar\n v-if=\"showSystemBar\"\n height=\"24\"\n color=\"orange accent-3\"\n elevation=\"0\"\n :order=\"-1\"\n >\n <div class=\"text-center w-100 text-caption pb-1\">\n <component :is=\"systemBarComponent\" />\n </div>\n </VAppBar>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport type { AnzuUserMinimal } from '@/types/AnzuUser'\n\nconst props = withDefaults(\n defineProps<{\n user?: AnzuUserMinimal | undefined | null\n size?: number\n containerClass?: string\n }>(),\n {\n user: undefined,\n size: 36,\n containerClass: '',\n }\n)\n\nconst color = computed(() => {\n if (props.user?.avatar.color && props.user.avatar.color.length === 7) {\n return props.user.avatar.color\n }\n return '#3f6ad8'\n})\n\nconst fontSize = computed(() => {\n return props.size * 0.5 + 'px'\n})\n\nconst text = computed(() => {\n if (!props.user) return ''\n if (props.user.avatar.text.length > 0) return props.user.avatar.text\n const firstNameLastName = props.user.person.firstName.charAt(0) + props.user.person.lastName.charAt(0)\n if (firstNameLastName.length > 0) return firstNameLastName\n return props.user.email.slice(0, 2)\n})\n</script>\n\n<template>\n <VAvatar\n :color=\"color\"\n class=\"text-uppercase\"\n :class=\"containerClass\"\n :size=\"size\"\n >\n <div\n class=\"d-inline-flex text-white font-weight-light\"\n :style=\"{ fontSize: fontSize }\"\n >\n {{ text }}\n </div>\n </VAvatar>\n <div />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string\n label?: string\n loading?: boolean\n readonly?: boolean\n required?: boolean\n randomColor?: boolean\n hideLabel?: boolean\n }>(),\n {\n label: '',\n loading: false,\n readonly: false,\n required: false,\n randomColor: false,\n hideLabel: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: string): void\n}>()\n\nconst swatches = [\n ['#F44336', '#E91E63', '#9C27B0', '#673AB7'],\n ['#2196F3', '#03A9F4', '#00BCD4', '#009688'],\n ['#4CAF50', '#8BC34A', '#CDDC39', '#F9A825'],\n ['#FF6F00', '#FF5722', '#795548', '#607D8B'],\n ['#757575', '#000000', '#3F51B5'],\n]\nconst generatedColor = ref('')\n\nconst generateRandomColor = () => {\n const randomRow = Math.floor(Math.random() * swatches.length)\n generatedColor.value = swatches[randomRow][Math.floor(Math.random() * swatches[randomRow].length)]\n return generatedColor.value\n}\n\nconst variantComputed = computed(() => {\n return props.modelValue.length > 0 ? 'flat' : 'tonal'\n})\n\nconst buttonColorComputed = computed(() => {\n return props.modelValue.length > 0 ? props.modelValue : undefined\n})\n\nconst onColorPickerChange = (newColor: string) => {\n emit('update:modelValue', newColor)\n}\n\nwatch(\n () => props.modelValue,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (newValue.length === 7) return\n if (newValue.length !== 7 && props.randomColor) {\n if (generatedColor.value === '') {\n emit('update:modelValue', generateRandomColor())\n return\n }\n emit('update:modelValue', generatedColor.value)\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div>\n <label\n v-if=\"!hideLabel\"\n class=\"v-label mr-2\"\n >\n {{ label }}\n <span\n v-if=\"required\"\n class=\"required\"\n />\n </label>\n <VBtn\n :variant=\"variantComputed\"\n icon\n :color=\"buttonColorComputed\"\n >\n <VMenu\n v-if=\"!readonly\"\n activator=\"parent\"\n >\n <VCard>\n <VColorPicker\n :model-value=\"buttonColorComputed\"\n :swatches=\"swatches\"\n class=\"a-color-picker--hide-controls\"\n elevation=\"0\"\n hide-canvas\n hide-inputs\n show-swatches\n @update:model-value=\"onColorPickerChange\"\n />\n </VCard>\n </VMenu>\n </VBtn>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-color-picker--hide-controls .v-color-picker__controls {\n display: none;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport type { AnzuUserMinimal } from '@/types/AnzuUser'\nimport AAnzuUserAvatar from '@/components/AAnzuUserAvatar.vue'\n\nwithDefaults(\n defineProps<{\n currentUser: AnzuUserMinimal | undefined | null\n settingsRouteName: string\n logoutRouteName: string\n dataCy?: string\n }>(),\n {\n dataCy: 'navbar-user',\n }\n)\n\nconst { t } = useI18n()\n\nconst logoutDialog = ref(false)\n</script>\n\n<template>\n <VBtn\n variant=\"text\"\n icon\n size=\"small\"\n :data-cy=\"dataCy\"\n >\n <AAnzuUserAvatar\n :size=\"32\"\n :user=\"currentUser\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.system.currentUser.button') }}\n </VTooltip>\n <VMenu\n v-if=\"currentUser\"\n activator=\"parent\"\n >\n <VCard>\n <VList class=\"pb-0\">\n <VListItem\n class=\"pb-6\"\n lines=\"two\"\n >\n <template #prepend>\n <AAnzuUserAvatar\n :user=\"currentUser\"\n :size=\"40\"\n />\n </template>\n <VListItemTitle>{{ currentUser.person.fullName }}</VListItemTitle>\n <VListItemSubtitle>\n {{ currentUser.email }}<br>\n {{ currentUser.id }}\n </VListItemSubtitle>\n </VListItem>\n <VDivider />\n <VListItem\n :active=\"false\"\n prepend-icon=\"mdi-cog\"\n :to=\"{ name: settingsRouteName }\"\n data-cy=\"navbar-user-settings\"\n >\n {{ t('common.system.currentUser.settings') }}\n </VListItem>\n <VListItem\n prepend-icon=\"mdi-logout\"\n data-cy=\"navbar-user-logout\"\n @click.stop=\"logoutDialog = true\"\n >\n {{ t('common.system.currentUser.logout') }}\n <VDialog\n v-model=\"logoutDialog\"\n width=\"auto\"\n >\n <VCard v-if=\"logoutDialog\">\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n >\n <VToolbarTitle class=\"flex-fill\">\n {{ t('common.system.currentUser.logout') }}\n </VToolbarTitle>\n <VSpacer />\n <VBtn\n class=\"ml-2\"\n icon=\"mdi-close\"\n size=\"small\"\n variant=\"text\"\n data-cy=\"button-close\"\n @click.stop=\"logoutDialog = false\"\n />\n </VToolbar>\n <VCardText>{{ t('common.system.currentUser.logoutText') }}</VCardText>\n <VCardActions>\n <VSpacer />\n <VBtn\n color=\"secondary\"\n variant=\"text\"\n data-cy=\"button-cancel\"\n @click.stop=\"logoutDialog = false\"\n >\n {{ t('common.button.cancel') }}\n </VBtn>\n <VBtn\n color=\"primary\"\n data-cy=\"button-confirm\"\n :to=\"{ name: logoutRouteName }\"\n >\n {{ t('common.system.currentUser.logoutConfirm') }}\n </VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, inject, ref, toRefs, watch } from 'vue'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { cloneDeep, isArray, isNull, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { usePagination } from '@/composables/system/pagination'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\n// type FetchItemsByIdsType =\n// | ((ids: IntegerId[]) => Promise<ValueObjectOption<IntegerId>[]>)\n// | ((ids: DocId[]) => Promise<ValueObjectOption<DocId>[]>)\n\ntype FetchItemsMinimalType = (pagination: Pagination, filterBag: FilterBag) => Promise<any[]>\n\ntype UseCachedType = () => {\n fetch: any\n add: any\n addManualMinimal: any\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n label?: string | undefined\n required?: boolean\n multiple?: boolean\n clearable?: boolean\n v?: any\n errorMessage?: string\n hideLabel?: boolean\n fetchItemsMinimal: FetchItemsMinimalType\n innerFilter: FilterBag\n filterByField?: string\n filterSortBy?: string | null\n loading?: boolean\n useCached: UseCachedType\n itemTitle?: string\n itemValue?: string\n }>(),\n {\n label: undefined,\n required: undefined,\n multiple: false,\n clearable: false,\n v: null,\n errorMessage: undefined,\n hideLabel: false,\n filterByField: 'name',\n filterSortBy: 'createdAt',\n loading: false,\n itemTitle: 'name',\n itemValue: 'id',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'blur', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'focus', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'searchChange', data: string): void\n (e: 'searchChangeDebounced', data: string): void\n}>()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetch, add, addManualMinimal } = props.useCached()\n\nconst modelValue = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined) {\n emit('update:modelValue', cloneDeep<DocId | IntegerId | DocId[] | IntegerId[] | null | undefined>(newValue))\n },\n})\n\nconst { t } = useI18n()\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst isFocused = ref(false)\nconst search = ref('')\nconst loadingLocal = ref(false)\nconst { innerFilter } = toRefs(props)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst pagination = usePagination(props.filterSortBy)\n\nconst fetchedItemsMinimal = ref<Map<IntegerId | DocId, any>>(new Map())\n// const fetchedItems = ref<Map<IntegerId | DocId, string>>(new Map())\n\nconst onFocus = () => {\n isFocused.value = true\n emit('focus', modelValue.value)\n}\n\nconst onBlur = () => {\n isFocused.value = false\n props.v?.$touch()\n emit('blur', modelValue.value)\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return props.v.$errors.map((item: ErrorObject) => item.$message)\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n return props.v?.required && props.v?.required.$params.type === 'required'\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.multiple === false) return false\n return true as unknown as undefined\n})\n\nconst onSearchUpdate = (query: string) => {\n if (!props.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n search.value = query\n}\n\nconst apiSearch = async (query: string) => {\n loadingLocal.value = true\n const filterField = innerFilter.value[props.filterByField]\n filterField.model = query\n fetchedItemsMinimal.value.clear()\n const res = await props.fetchItemsMinimal(pagination, innerFilter.value)\n res.forEach((item: any) => {\n fetchedItemsMinimal.value.set(item[props.itemValue], item)\n })\n loadingLocal.value = false\n}\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final: Map<IntegerId | DocId, string> = new Map()\n if (isArray(modelValue.value)) {\n modelValue.value.forEach((value) => {\n final.set(value, '')\n })\n } else if (modelValue.value) {\n final.set(modelValue.value, '')\n }\n fetchedItemsMinimal.value.forEach((value) => {\n final.set(value[props.itemValue], value[props.itemTitle])\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value }\n })\n})\n\nconst tryToAddFromFetchedItems = (ids: Set<DocId | IntegerId>) => {\n return new Promise<boolean>((resolve) => {\n fetchedItemsMinimal.value.forEach((value, key) => {\n if (ids.has(key)) {\n addManualMinimal(cloneDeep(value))\n }\n })\n return resolve(true)\n })\n}\n\nconst onClickClear = () => {\n apiSearch('')\n if (props.multiple) {\n modelValue.value = []\n return\n }\n modelValue.value = null\n}\n\nconst deleteWasPressedTime = ref(0)\nconst onKeydownDelete = () => {\n deleteWasPressedTime.value = Date.now()\n}\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n apiSearch(newValue)\n emit('searchChangeDebounced', newValue)\n }\n },\n { debounce: 300, maxWait: 1000 }\n)\n\nwatch(search, (newValue, oldValue) => {\n if (newValue.length === 0 && isFocused.value === true) {\n const now = Date.now()\n if (now - deleteWasPressedTime.value > 200) {\n search.value = oldValue\n return\n }\n }\n if (newValue !== oldValue) {\n emit('searchChange', newValue)\n }\n})\n\nwatch(\n modelValue,\n async (newValue) => {\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n return\n }\n const values = isArray(newValue) ? newValue : [newValue]\n const idsToFetch = new Set(values)\n await tryToAddFromFetchedItems(idsToFetch)\n\n if (idsToFetch.size > 0) {\n add(Array.from(idsToFetch) as Array<DocId & IntegerId>)\n fetch()\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :search=\"search\"\n chips\n :items=\"allItems\"\n no-filter\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :loading=\"loadingLocal\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @update:search=\"onSearchUpdate\"\n @click:clear=\"onClickClear\"\n @keydown.delete=\"onKeydownDelete\"\n >\n <template #label>\n <span\n v-if=\"!hideLabel\"\n :key=\"requiredComputed + ''\"\n >\n {{ labelComputed }}\n <span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </span>\n </template>\n <template\n v-if=\"!multiple\"\n #selection\n />\n <!-- @vue-skip -->\n <template #chip=\"{ props: chipProps, item: chipItem }\">\n <slot\n name=\"chip\"\n :props=\"chipProps\"\n :item=\"chipItem\"\n >\n <VChip\n v-bind=\"chipProps\"\n :text=\"chipItem.title\"\n />\n </slot>\n </template>\n <!-- @vue-skip -->\n <template #item=\"{ props: itemProps, item: itemItem }\">\n <slot\n name=\"item\"\n :props=\"itemProps\"\n :item=\"itemItem\"\n >\n <VListItem :props=\"itemProps\" />\n </slot>\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n title?: string | undefined\n logoUrl?: string | undefined\n loginUrl?: undefined | (() => string)\n dataCy?: string\n }>(),\n {\n title: undefined,\n logoUrl: undefined,\n loginUrl: undefined,\n dataCy: 'button-login',\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex justify-center align-center flex-column\">\n <img\n :src=\"logoUrl\"\n class=\"logo pb-2\"\n alt=\"\"\n >\n <h1\n v-if=\"title\"\n class=\"display-1 my-3\"\n >\n {{ title }}\n </h1>\n <h4 class=\"mb-3 body-1\">\n <span>{{ t('common.system.login.text') }}</span>\n </h4>\n <div class=\"py-5\">\n <VBtn\n v-if=\"loginUrl\"\n :data-cy=\"dataCy\"\n :href=\"loginUrl()\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.login.text') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.logo {\n display: block;\n max-width: 120px;\n height: auto;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { onMounted } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n logoutUrl?: undefined | (() => string)\n }>(),\n {\n logoutUrl: undefined,\n }\n)\n\nonMounted(() => {\n if (!props.logoutUrl) return\n window.location.href = props.logoutUrl()\n})\n</script>\n\n<template>\n <div />\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n returnRouteName: string\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <h1 class=\"d-flex justify-center align-center text-primary\">\n <VIcon\n size=\"x-large\"\n icon=\"mdi-emoticon-cry\"\n />\n <span>{{ t('common.system.unauthorized.title') }}</span>\n </h1>\n\n <p class=\"pa-4\">\n {{ t('common.system.unauthorized.text') }}\n </p>\n\n <VBtn\n :to=\"{ name: returnRouteName }\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.unauthorized.backButton') }}\n </VBtn>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n returnRouteName: string\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <h1 class=\"d-flex justify-center align-center text-primary\">\n <VIcon\n size=\"x-large\"\n icon=\"mdi-emoticon-cry\"\n />\n <span>{{ t('common.system.notFound.title') }}</span>\n </h1>\n\n <p class=\"pa-4\">\n {{ t('common.system.notFound.text') }}\n </p>\n\n <VBtn\n :to=\"{ name: returnRouteName }\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.notFound.backButton') }}\n </VBtn>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { JobBase } from '@/types/Job'\nimport { useI18n } from 'vue-i18n'\nimport ARow from '@/components/ARow.vue'\nimport AJobStatusChip from '@/components/job/AJobStatusChip.vue'\nimport ADatetime from '@/components/ADatetime.vue'\n\nwithDefaults(\n defineProps<{\n job: JobBase\n loading?: boolean\n }>(),\n {\n loading: false,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <ARow\n :title=\"t('common.job.model.id')\"\n :value=\"job.id\"\n />\n <ARow :title=\"t('common.job.model._resourceName')\">\n <slot name=\"resource-name\">\n {{ job._resourceName }}\n </slot>\n </ARow>\n <ARow :title=\"t('common.job.model.status')\">\n <AJobStatusChip :value=\"job.status\" />\n </ARow>\n <ARow :title=\"t('common.job.model.startedAt')\">\n <ADatetime :date-time=\"job.startedAt\" />\n </ARow>\n <ARow :title=\"t('common.job.model.finishedAt')\">\n <ADatetime :date-time=\"job.finishedAt\" />\n </ARow>\n <ARow\n :title=\"t('common.job.model.result')\"\n :value=\"job.result\"\n />\n </div>\n</template>\n","import type { DocId, DocIdNullable, IntegerId } from '@/types/common'\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\nimport type { ResourceNameSystemAware } from '@/types/ResourceNameSystemAware'\nimport type { AssetFile } from '@/types/coreDam/AssetFile'\n\ninterface Texts {\n displayTitle: string\n}\n\nexport type DamDistributionServiceName = string\n\nexport enum DamAssetStatus {\n Draft = 'draft',\n WithFile = 'with_file',\n Deleting = 'deleting',\n Default = Draft,\n}\n\nexport enum DamAssetType {\n Image = 'image',\n Audio = 'audio',\n Video = 'video',\n Document = 'document',\n Default = Image,\n}\n\nexport type DamAssetTypeValues = `${DamAssetType}`\n\nexport const damAssetTypeValueToEnum = (value: DamAssetTypeValues) => {\n switch (value) {\n case 'image':\n return DamAssetType.Image\n case 'audio':\n return DamAssetType.Audio\n case 'video':\n return DamAssetType.Video\n case 'document':\n return DamAssetType.Document\n default:\n return DamAssetType.Default\n }\n}\n\ninterface Attributes {\n assetType: DamAssetType\n assetStatus: DamAssetStatus\n}\n\nexport interface AssetFileProperties {\n distributesInServices: DamDistributionServiceName[]\n slotNames: string[]\n fromRss: boolean\n width: number\n height: number\n}\n\ninterface Flags {\n described: boolean\n visible: boolean\n}\n\nexport interface AssetMetadataSuggestions extends Record<string, Array<string>> {}\n\nexport type AssetCustomData = Record<string, any>\n\ninterface Metadata {\n authorSuggestions: AssetMetadataSuggestions\n keywordSuggestions: AssetMetadataSuggestions\n customData: any\n}\n\nexport interface AssetSearchListItemDto extends AnzuUserAndTimeTrackingAware, ResourceNameSystemAware {\n id: DocId\n texts: Texts\n attributes: Attributes\n flags: Flags\n licence: IntegerId\n mainFile: null | AssetFile\n keywords: DocId[]\n authors: DocId[]\n podcasts: DocId[]\n metadata: Metadata\n assetFileProperties: AssetFileProperties\n}\n\nexport interface AssetDetailItemDto extends AnzuUserAndTimeTrackingAware, ResourceNameSystemAware {\n id: DocId\n texts: Texts\n attributes: Attributes\n flags: Flags\n licence: IntegerId\n mainFile: null | AssetFile\n keywords: DocId[]\n authors: DocId[]\n podcasts: DocId[]\n metadata: Metadata\n distributionCategory: DocIdNullable\n assetFileProperties: AssetFileProperties\n}\n\nexport interface AssetMetadataDto extends AnzuUserAndTimeTrackingAware, ResourceNameSystemAware, Metadata {\n id: DocId\n customData: AssetCustomData\n}\n\nexport type AssetExternalProviderId = string | number\nexport type AssetExternalProviderIdNullable = AssetExternalProviderId | null\n\nexport type AssetExternalProviderMetadata = Record<string, string | number | number[] | string[] | boolean>\n","import { reactive } from 'vue'\nimport { makeFilterHelper } from '@/lib'\n\nconst makeFilter = makeFilterHelper('common', 'assetSelect')\n\nconst filter = reactive({\n _elastic: {\n ...makeFilter({ exclude: true }),\n },\n text: {\n ...makeFilter({ name: 'text', variant: 'search' }),\n },\n type: {\n ...makeFilter({ name: 'type', default: [] }),\n },\n status: {\n ...makeFilter({ name: 'status', default: ['with_file'] }),\n },\n mostDominantColor: {\n ...makeFilter({ name: 'mostDominantColor', default: [] }),\n },\n closestMostDominantColor: {\n ...makeFilter({ name: 'closestMostDominantColor', default: [] }),\n },\n codecName: {\n ...makeFilter({ name: 'codecName', default: [] }),\n },\n orientation: {\n ...makeFilter({ name: 'orientation', default: [] }),\n },\n described: {\n ...makeFilter({ name: 'described', default: null }),\n },\n visible: {\n ...makeFilter({ name: 'visible', default: true }),\n },\n generatedBySystem: {\n ...makeFilter({ name: 'generatedBySystem', default: false }),\n },\n inPodcast: {\n ...makeFilter({ name: 'inPodcast', default: null }),\n },\n fromRss: {\n ...makeFilter({ name: 'fromRss', default: null }),\n },\n slotNames: {\n ...makeFilter({ name: 'slotNames', default: [] }),\n },\n distributedInServices: {\n ...makeFilter({ name: 'distributedInServices', default: [], multiple: true }),\n },\n licences: {\n ...makeFilter({ name: 'licences', default: [] }),\n },\n shortestDimensionFrom: {\n ...makeFilter({ name: 'shortestDimensionFrom', default: null }),\n },\n shortestDimensionUntil: {\n ...makeFilter({ name: 'shortestDimensionUntil', default: null }),\n },\n pixelSizeFrom: {\n ...makeFilter({ name: 'pixelSizeFrom', default: null }),\n },\n pixelSizeUntil: {\n ...makeFilter({ name: 'pixelSizeUntil', default: null }),\n },\n widthFrom: {\n ...makeFilter({ name: 'widthFrom', default: null }),\n },\n widthUntil: {\n ...makeFilter({ name: 'widthUntil', default: null }),\n },\n heightFrom: {\n ...makeFilter({ name: 'heightFrom', default: null }),\n },\n heightUntil: {\n ...makeFilter({ name: 'heightUntil', default: null }),\n },\n ratioWidthFrom: {\n ...makeFilter({ name: 'ratioWidthFrom', default: null }),\n },\n ratioWidthUntil: {\n ...makeFilter({ name: 'ratioWidthUntil', default: null }),\n },\n ratioHeightFrom: {\n ...makeFilter({ name: 'ratioHeightFrom', default: null }),\n },\n ratioHeightUntil: {\n ...makeFilter({ name: 'ratioHeightUntil', default: null }),\n },\n rotationFrom: {\n ...makeFilter({ name: 'rotationFrom', default: null }),\n },\n rotationUntil: {\n ...makeFilter({ name: 'rotationUntil', default: null }),\n },\n durationFrom: {\n ...makeFilter({ name: 'durationFrom', default: null }),\n },\n durationUntil: {\n ...makeFilter({ name: 'durationUntil', default: null }),\n },\n bitrateFrom: {\n ...makeFilter({ name: 'bitrateFrom', default: null }),\n },\n bitrateUntil: {\n ...makeFilter({ name: 'bitrateUntil', default: null }),\n },\n slotsCountFrom: {\n ...makeFilter({ name: 'slotsCountFrom', default: null }),\n },\n slotsCountUntil: {\n ...makeFilter({ name: 'slotsCountUntil', default: null }),\n },\n createdAtFrom: {\n ...makeFilter({ name: 'createdAtFrom', default: null }),\n },\n createdAtUntil: {\n ...makeFilter({ name: 'createdAtUntil', default: null }),\n },\n})\n\nexport function useAssetListFilter() {\n return filter\n}\n","import type { DocId } from '@/types/common'\nimport type { AssetSearchListItemDto } from '@/types/coreDam/Asset'\n\nexport enum AssetSelectReturnType {\n MainFileId = 'mainFileId',\n AssetId = 'assetId',\n Asset = 'asset',\n}\n\nexport type AssetSelectReturnTypeValues = `${AssetSelectReturnType}`\n\nexport type AssetSelectReturnData = AssetSelectReturnMainFileId | AssetSelectReturnAssetId | AssetSelectReturnAsset\n\ninterface AssetSelectReturnMainFileId {\n type: 'mainFileId'\n value: Array<DocId>\n}\n\ninterface AssetSelectReturnAssetId {\n type: 'assetId'\n value: Array<DocId>\n}\n\ninterface AssetSelectReturnAsset {\n type: 'asset'\n value: Array<AssetSearchListItemDto>\n}\n\nexport const assetSelectReturnTypeValuesToEnum = (value: AssetSelectReturnTypeValues) => {\n switch (value) {\n case 'assetId':\n return AssetSelectReturnType.AssetId\n case 'asset':\n return AssetSelectReturnType.Asset\n case 'mainFileId':\n default:\n return AssetSelectReturnType.MainFileId\n }\n}\n","import { acceptHMRUpdate, defineStore } from 'pinia'\nimport type { AssetSearchListItemDto, DamAssetType } from '@/types/coreDam/Asset'\nimport { DamAssetType as AssetTypeValue } from '@/types/coreDam/Asset'\nimport type { DocId } from '@/types/common'\nimport { computed, ref, toRaw } from 'vue'\nimport { type AssetSelectReturnData, AssetSelectReturnType } from '@/types/coreDam/AssetSelect'\n\nexport interface AssetSelectListItem {\n asset: AssetSearchListItemDto\n selected: boolean\n}\n\nexport const useAssetSelectStore = defineStore('commonAdminCoreDamAssetSelectStore', () => {\n const assetListItems = ref<Array<AssetSelectListItem>>([])\n const loader = ref(false)\n const licenceId = ref(0)\n const assetType = ref<AssetTypeValue>(AssetTypeValue.Default)\n const selectedAssets = ref<Map<DocId, AssetSelectListItem>>(new Map())\n const singleMode = ref(false)\n const minCount = ref(0)\n const maxCount = ref(0)\n\n function showLoader() {\n loader.value = true\n }\n\n function hideLoader() {\n loader.value = false\n }\n\n function setLicenceId(value: number) {\n licenceId.value = value\n }\n\n function setSingleMode(value: boolean) {\n singleMode.value = value\n }\n\n function setAssetType(value: DamAssetType) {\n assetType.value = value\n }\n\n function setMinCount(value: number) {\n minCount.value = value\n }\n\n function setMaxCount(value: number) {\n maxCount.value = value\n }\n\n function setList(items: AssetSearchListItemDto[]) {\n assetListItems.value = items.map((item) => {\n return {\n asset: item,\n selected: false,\n }\n })\n }\n\n function appendList(items: AssetSearchListItemDto[]) {\n const assets = items.map((asset) => {\n return {\n asset: asset,\n selected: false,\n }\n })\n assetListItems.value = assetListItems.value.concat(assets)\n }\n\n function toggleSelectedByIndex(index: number) {\n if (!assetListItems.value[index]) return\n\n if (!singleMode.value && isSelectedMax.value && !assetListItems.value[index].selected) {\n return\n }\n\n assetListItems.value[index].selected = !assetListItems.value[index].selected\n\n if (singleMode.value && assetListItems.value[index].selected) {\n unselectAllExcept(index)\n clearSelected()\n addToSelected(assetListItems.value[index])\n return\n }\n\n if (!singleMode.value && assetListItems.value[index].selected) {\n addToSelected(assetListItems.value[index])\n return\n }\n\n removeFromSelected(assetListItems.value[index].asset.id)\n }\n\n function unselectAllExcept(ignoreIndex: number) {\n const items = assetListItems.value\n for (let i = 0; i < items.length; i++) {\n if (items[i].selected && i !== ignoreIndex) {\n items[i].selected = false\n }\n }\n }\n\n function clearSelected() {\n selectedAssets.value.clear()\n }\n\n function addToSelected(assetItem: AssetSelectListItem) {\n if (!selectedAssets.value.has(assetItem.asset.id)) {\n selectedAssets.value.set(assetItem.asset.id, assetItem)\n }\n }\n\n function removeFromSelected(assetId: DocId) {\n if (selectedAssets.value.has(assetId)) {\n selectedAssets.value.delete(assetId)\n }\n }\n\n function getSelectedMainFileIds(): DocId[] {\n const fileIds: Set<DocId> = new Set()\n for (const value of selectedAssets.value.values()) {\n if (value.asset.mainFile?.id) {\n fileIds.add(value.asset.mainFile.id)\n }\n }\n return Array.from(fileIds)\n }\n\n function getSelectedAssetIds(): DocId[] {\n return Array.from(selectedAssets.value.keys())\n }\n\n function getSelectedAssets(): AssetSearchListItemDto[] {\n const assets: Array<AssetSearchListItemDto> = []\n for (const value of selectedAssets.value.values()) {\n assets.push(toRaw(value.asset))\n }\n return assets\n }\n\n function getSelectedData(type: AssetSelectReturnType): AssetSelectReturnData {\n switch (type) {\n case AssetSelectReturnType.AssetId:\n return {\n type: AssetSelectReturnType.AssetId,\n value: getSelectedAssetIds(),\n }\n case AssetSelectReturnType.Asset:\n return {\n type: AssetSelectReturnType.Asset,\n value: getSelectedAssets(),\n }\n case AssetSelectReturnType.MainFileId:\n default:\n return {\n type: AssetSelectReturnType.MainFileId,\n value: getSelectedMainFileIds(),\n }\n }\n }\n\n const isSelectedMax = computed(() => {\n return selectedCount.value >= maxCount.value\n })\n\n const selectedCount = computed(() => {\n return selectedAssets.value.size\n })\n\n function reset() {\n assetListItems.value = []\n loader.value = false\n clearSelected()\n }\n\n return {\n licenceId,\n assetType,\n singleMode,\n minCount,\n maxCount,\n selectedCount,\n selectedAssets,\n loader,\n assetListItems,\n getSelectedData,\n setAssetType,\n setLicenceId,\n setSingleMode,\n setMinCount,\n setMaxCount,\n showLoader,\n hideLoader,\n setList,\n appendList,\n toggleSelectedByIndex,\n clearSelected,\n reset,\n }\n})\n\nif (import.meta.hot) {\n import.meta.hot.accept(acceptHMRUpdate(useAssetSelectStore, import.meta.hot))\n}\n","import { ref } from 'vue'\nimport type { CommonAdminCoreDamOptions } from '@/AnzuSystemsCommonAdmin'\n\nimport { isUndefined } from '@/utils/common'\n\nconst commonAdminCoreDamOptions = ref<CommonAdminCoreDamOptions | undefined>(undefined)\n\nexport function initCommonAdminCoreDamOptions(data: CommonAdminCoreDamOptions) {\n commonAdminCoreDamOptions.value = data\n}\n\nexport function useCommonAdminCoreDamOptions(configName: string = 'default') {\n if (\n isUndefined(commonAdminCoreDamOptions.value) ||\n isUndefined(commonAdminCoreDamOptions.value.configs) ||\n isUndefined(commonAdminCoreDamOptions.value.configs[configName])\n ) {\n throw new Error(\"Composable can't be used without properly configured common admin.\")\n }\n\n return {\n damClient: commonAdminCoreDamOptions.value.configs[configName].damClient,\n defaultLicenceId: commonAdminCoreDamOptions.value.configs[configName].defaultLicenceId,\n }\n}\n\nexport function useCommonAdminCoreDamOptionsGlobal() {\n if (\n isUndefined(commonAdminCoreDamOptions.value) ||\n isUndefined(commonAdminCoreDamOptions.value.configs)\n ) {\n throw new Error(\"Composable can't be used without properly configured common admin.\")\n }\n\n return {\n apiTimeout: commonAdminCoreDamOptions.value.apiTimeout,\n uploadStatusFallback: commonAdminCoreDamOptions.value.uploadStatusFallback,\n notification: commonAdminCoreDamOptions.value.notification,\n }\n}\n","import { stringUrlTemplateReplace } from '@/utils/string'\nimport { isEmptyObject } from '@/utils/common'\n\nexport type UrlParams = {\n [key: string]: number | string\n}\n\nexport const replaceUrlParameters = (urlTemplate: string, urlParams: UrlParams, overrideUrlTemplate = '') => {\n if (isEmptyObject(urlParams)) return urlTemplate\n return stringUrlTemplateReplace(overrideUrlTemplate === '' ? urlTemplate : overrideUrlTemplate, urlParams)\n}\n","import { HTTP_STATUS_VALID_ALL } from '@/composables/statusCodes'\n\nexport const isValidHTTPStatus = (statusCode: number) => {\n return HTTP_STATUS_VALID_ALL.includes(statusCode)\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template R Response type\n */\nexport const apiFetchOne = <R>(\n client: () => AxiosInstance,\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .get(replaceUrlParameters(urlTemplate, urlParams), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { ref } from 'vue'\nimport { isArray, isBoolean, isNull, isNumber, isString, isUndefined } from '@/utils/common'\nimport type { Filter, FilterBag, FilterVariant } from '@/types/Filter'\n\n/**\n * Docs: /doc/Admin-Cms-Doc/Filters.md\n */\nexport function useApiQueryBuilder() {\n const q = ref<string[]>([])\n\n const querySetLimit = (value: number): void => {\n queryAdd('limit', value)\n }\n\n const querySetOffset = (page: number, limit: number): void => {\n queryAdd('offset', page * limit - limit)\n }\n\n const querySetOrder = (field: string | null, desc: boolean): void => {\n if (!isNull(field) && field.length > 0) queryAdd('order[' + field + ']', desc ? 'desc' : 'asc')\n }\n\n const formatValue = (value: string | number | boolean): string | number => {\n if (isBoolean(value)) {\n return value ? '1' : '0'\n }\n return value\n }\n\n const queryAddFilter = (filterVariant: FilterVariant, field: string, value: string | number | boolean): void => {\n if (isString(value) && value.length === 0) return\n q.value.push('filter_' + filterVariant + '[' + field + ']=' + formatValue(value))\n }\n\n const getValue = (filter: Filter): string | number | boolean | null => {\n const model = filter.model\n if (isNull(model)) {\n if (filter.mandatory) {\n filter.model = filter.default\n return filter.default\n }\n return null\n }\n if (isString(model)) {\n if (model.length === 0) {\n if (filter.mandatory) {\n filter.model = filter.default\n return filter.default\n }\n return null\n }\n return encodeURIComponent(model)\n }\n if (isArray(model)) {\n if (model.length === 0) {\n if (filter.mandatory) {\n filter.model = filter.default\n return filter.default\n }\n return null\n }\n return model.map((item) => (isString(item) ? encodeURIComponent(item) : item)).join(',')\n }\n if (isNumber(model) || isBoolean(model)) {\n return model\n }\n\n return null\n }\n\n const queryAdd = (key: string, value: any): void => {\n q.value.push(key + '=' + value)\n }\n\n const queryBuild = (): string => {\n return '?' + q.value.join('&')\n }\n\n const querySetFilters = (filterBag: FilterBag): void => {\n const isSearchApi = !isUndefined(filterBag._elastic)\n for (const filterName in filterBag) {\n const filter = filterBag[filterName]\n const field = filter.field || filterName\n if (filter.exclude) {\n continue\n }\n const value = getValue(filter)\n if (isNull(value)) {\n continue\n }\n if (isSearchApi) {\n queryAdd(field, value)\n continue\n }\n queryAddFilter(filter.variant, field, value)\n }\n }\n\n return {\n querySetLimit,\n querySetOffset,\n querySetOrder,\n queryAddFilter,\n querySetFilters,\n queryAdd,\n queryBuild,\n }\n}\n","import { isObject } from '@/utils/common'\n\nexport interface ApiResponseList<T> {\n totalCount: number\n data: T\n}\n\nexport interface ApiInfiniteResponseList<T> {\n hasNextPage: boolean\n data: T\n}\n\nexport const isApiResponseList = <T>(value: unknown): value is ApiResponseList<T> => {\n return isObject(value) && Object.hasOwn(value, 'totalCount')\n}\n\nexport const isApiInfiniteResponseList = <T>(value: unknown): value is ApiInfiniteResponseList<T> => {\n return isObject(value) && Object.hasOwn(value, 'hasNextPage')\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\nimport { isUndefined } from '@/utils/common'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { useApiQueryBuilder } from '@/services/api/queryBuilder'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport type { ApiInfiniteResponseList, ApiResponseList } from '@/types/ApiResponse'\nimport { isApiInfiniteResponseList, isApiResponseList } from '@/types/ApiResponse'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\nconst generateListApiQuery = (pagination: Pagination, filterBag: FilterBag): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, querySetFilters } = useApiQueryBuilder()\n querySetLimit(pagination.rowsPerPage)\n querySetOffset(pagination.page, pagination.rowsPerPage)\n querySetOrder(pagination.sortBy, pagination.descending)\n querySetFilters(filterBag)\n return queryBuild()\n}\n\n/**\n * @template R Response type override, optional\n */\nexport const apiFetchList = <R>(\n client: () => AxiosInstance,\n urlTemplate: string,\n urlParams: UrlParams = {},\n pagination: Pagination,\n filterBag: FilterBag,\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n const searchApi = isUndefined(filterBag._elastic) ? '' : '/search'\n client()\n .get(\n replaceUrlParameters(urlTemplate, urlParams) + searchApi + generateListApiQuery(pagination, filterBag),\n options\n )\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n const resData = res.data as unknown as ApiResponseList<R> | ApiInfiniteResponseList<R>\n if (isApiInfiniteResponseList(resData)) {\n pagination.hasNextPage = res.data.hasNextPage\n } else if (isApiResponseList(resData)) {\n pagination.totalCount = resData.totalCount\n }\n pagination.currentViewCount = res.data.data.length\n return resolve(res.data.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve([] as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import type { DamAssetType, DamDistributionServiceName } from '@/types/coreDam/Asset'\n\nexport interface DamPrvConfig {\n assetExternalProviders: {\n [key: string]: { title: string }\n }\n distributionServices: {\n [key: string]: {\n title: string\n iconPath: string\n type: DamDistributionServiceType\n allowedRedistributeStatuses: Array<DamDistributionStatus>\n }\n }\n colorSet: {\n [key: string]: string\n }\n settings: {\n aclCheckEnabled: boolean\n adminAllowListName: string\n allowSelectExtSystem: boolean\n allowSelectLicenceId: boolean\n defaultAssetLicenceId: number\n defaultExtSystemId: number\n imageChunkConfig: {\n minSize: number\n maxSize: number\n }\n maxBulkItemCount: number\n }\n}\n\nexport interface DamExtSystemConfig extends Record<DamAssetType, DamExtSystemConfigItem> {\n assetExternalProviders: DamExternalProviderAssetConfig\n audio: DamExtSystemConfigItem\n video: DamExtSystemConfigItem\n image: DamExtSystemConfigItem\n document: DamExtSystemConfigItem\n}\n\nexport interface DamExtSystemConfigItem {\n sizeLimit: number\n defaultFileVersion: string\n versions: Array<string>\n mimeTypes: Array<string>\n distribution: DamDistributionConfig\n authors: DamExtSystemAssetTypeExifMetadata\n keywords: DamExtSystemAssetTypeExifMetadata\n customMetadataPinnedAmount: number\n slots: string[]\n}\n\nexport type DamExternalProviderAssetConfig = Record<\n DamExternalProviderAssetName,\n {\n listingLimit: number\n title: string\n }\n>\n\nexport type DamExternalProviderAssetName = string\n\nexport interface DamDistributionConfig {\n distributionServices: Array<DamDistributionServiceName>\n distributionRequirements: Record<DamDistributionServiceName, DamDistributionRequirementsConfig>\n}\n\nexport interface DamDistributionRequirementsConfig {\n title: string\n requiredAuth: boolean\n blockedBy: Array<DamDistributionServiceName>\n categorySelect: DamDistributionRequirementsCategorySelectConfig\n strategy: DamDistributionRequirementStrategy\n}\n\nexport enum DamDistributionRequirementStrategy {\n None = 'none',\n AtLeastOne = 'at_least_one',\n OneFromType = 'one_from_type',\n WaitForAll = 'wait_for_all',\n Default = None,\n}\n\nexport interface DamDistributionRequirementsCategorySelectConfig {\n enabled: boolean\n required: boolean\n}\n\nexport interface DamExtSystemAssetTypeExifMetadata {\n enabled: boolean\n required: boolean\n}\n\nexport enum DamDistributionServiceType {\n Youtube = 'youtubeDistribution',\n Jw = 'jwDistribution',\n Custom = 'customDistribution',\n}\n\nexport enum DamDistributionStatus {\n Waiting = 'waiting',\n Distributing = 'distributing',\n RemoteProcessing = 'remote_processing',\n Distributed = 'distributed',\n Failed = 'failed',\n Default = Waiting,\n}\n\nexport interface DamPubConfig {\n userAuthType: UserAuthType\n}\n\nexport enum UserAuthType {\n JsonCredentials = 'json_credentials',\n OAuth2 = 'oauth2',\n Default = JsonCredentials,\n}\n","import type { DamExtSystemConfig, DamPrvConfig, DamPubConfig } from '@/types/coreDam/DamConfig'\nimport type { AxiosInstance } from 'axios'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { IntegerId } from '@/types/common'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nconst END_POINT = '/adm/v1/configuration'\nconst PUB_END_POINT_PREFIX = '/pub'\nconst PUB_END_POINT = PUB_END_POINT_PREFIX + '/v1/configuration'\nconst ENTITY = 'settings'\n\nexport const fetchPubConfiguration = (damClient: () => AxiosInstance) =>\n apiFetchOne<DamPubConfig>(damClient, PUB_END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\nexport const fetchConfiguration = (damClient: () => AxiosInstance) =>\n apiFetchOne<DamPrvConfig>(damClient, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\nexport const fetchExtSystemConfiguration = (extSystem: IntegerId, damClient: () => AxiosInstance) =>\n apiFetchOne<DamExtSystemConfig>(damClient, END_POINT + '/ext-system/' + extSystem, {}, SYSTEM_CORE_DAM, ENTITY)\n","import type { AxiosInstance } from 'axios'\nimport type { IntegerId } from '@/types/common'\nimport type { DamAssetType, DamDistributionServiceName } from '@/types/coreDam/Asset'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\n\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nconst END_POINT = '/adm/v1/asset-custom-form'\nconst ENTITY = 'assetCustomForm'\n\n// todo limit set to 100 for now, add load for pagination?\nexport const fetchAssetCustomFormElements = (\n damClient: () => AxiosInstance,\n extSystem: IntegerId,\n assetType: DamAssetType\n) =>\n apiFetchOne<{ data: CustomDataFormElement[] }>(\n damClient,\n END_POINT + '/ext-system/:extSystem/type/:assetType/element?order[position]=asc&limit=100',\n { extSystem, assetType },\n SYSTEM_CORE_DAM,\n ENTITY\n )\n\n// todo limit set to 100 for now, add load for pagination?\nexport const fetchDistributionCustomFormElements = (\n damClient: () => AxiosInstance,\n distributionService: DamDistributionServiceName\n) =>\n apiFetchOne<{ data: CustomDataFormElement[] }>(\n damClient,\n END_POINT + '/distribution-service/:distributionService/element?order[position]=asc&limit=100',\n { distributionService },\n SYSTEM_CORE_DAM,\n ENTITY\n )\n","import {\n type DamExtSystemConfig,\n type DamExtSystemConfigItem,\n type DamPrvConfig,\n type DamPubConfig,\n UserAuthType,\n} from '@/types/coreDam/DamConfig'\nimport { DamAssetType, type DamDistributionServiceName } from '@/types/coreDam/Asset'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport type { AxiosInstance } from 'axios'\nimport { isUndefined } from '@/utils/common'\nimport {\n fetchConfiguration,\n fetchExtSystemConfiguration,\n fetchPubConfiguration,\n} from '@/components/damImage/uploadQueue/composables/damConfigApi'\nimport type { IntegerId } from '@/types/common'\nimport {\n fetchAssetCustomFormElements,\n fetchDistributionCustomFormElements,\n} from '@/components/damImage/uploadQueue/composables/damAssetCustomFormApi'\nimport { reactive, shallowRef } from 'vue'\n\nconst createDefaultExtSystemConfig = (override: Partial<DamExtSystemConfigItem> = {}): DamExtSystemConfigItem => ({\n ...({\n sizeLimit: 0,\n defaultFileVersion: '',\n versions: [],\n mimeTypes: [],\n distribution: {\n distributionServices: [],\n distributionRequirements: {},\n },\n keywords: {\n enabled: false,\n required: false,\n },\n authors: {\n enabled: false,\n required: false,\n },\n customMetadataPinnedAmount: 1,\n slots: [],\n } as DamExtSystemConfigItem),\n ...override,\n})\n\nconst initialized = reactive<{\n damPubConfig: boolean\n damPrvConfig: boolean\n damConfigExtSystem: IntegerId | null\n damConfigAssetCustomFormElements: IntegerId | null\n}>({\n damPubConfig: false,\n damPrvConfig: false,\n damConfigExtSystem: null,\n damConfigAssetCustomFormElements: null,\n})\n\nconst damPubConfig = shallowRef<DamPubConfig>({\n userAuthType: UserAuthType.JsonCredentials,\n})\n\nconst damPrvConfig = shallowRef<DamPrvConfig>({\n colorSet: {},\n assetExternalProviders: {},\n distributionServices: {},\n settings: {\n aclCheckEnabled: true,\n adminAllowListName: 'root',\n allowSelectExtSystem: false,\n allowSelectLicenceId: false,\n defaultAssetLicenceId: 0,\n defaultExtSystemId: 0,\n imageChunkConfig: {\n minSize: 0,\n maxSize: 0,\n },\n maxBulkItemCount: 0,\n },\n})\n\nconst damConfigExtSystem = shallowRef<DamExtSystemConfig>({\n assetExternalProviders: {},\n audio: createDefaultExtSystemConfig(),\n document: createDefaultExtSystemConfig(),\n image: createDefaultExtSystemConfig(),\n video: createDefaultExtSystemConfig(),\n})\n\nconst damConfigAssetCustomFormElements = shallowRef<{ [key in DamAssetType]: CustomDataFormElement[] }>({\n image: [],\n audio: [],\n video: [],\n document: [],\n})\n\nconst damConfigDistributionCustomFormElements = shallowRef<Record<DamDistributionServiceName, CustomDataFormElement[]>>(\n {}\n)\n\nexport function useDamConfigState(client: undefined | (() => AxiosInstance) = undefined) {\n function onConfigError(error: Error) {\n console.error(error)\n }\n\n function loadDamPubConfig() {\n return new Promise((resolve, reject) => {\n initialized.damPubConfig = false\n if (isUndefined(client)) {\n reject(false)\n return\n }\n fetchPubConfiguration(client)\n .then((config) => {\n if (Object.keys(config).length < 1) {\n throw new Error('Unable to load pub config. Incorrect response body.')\n }\n setDamPubConfig(config)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamPubConfig(data: DamPubConfig) {\n try {\n damPubConfig.value.userAuthType = data.userAuthType\n\n initialized.damPubConfig = true\n } catch (err) {\n throw new Error('Unable to load dam pub config. Incorrect fields in json.')\n }\n }\n\n function loadDamPrvConfig() {\n return new Promise((resolve, reject) => {\n initialized.damPubConfig = false\n if (isUndefined(client)) {\n reject(false)\n return\n }\n fetchConfiguration(client)\n .then((config) => {\n if (Object.keys(config).length < 1) {\n throw new Error('Unable to load dam prv config. Incorrect response body.')\n }\n setDamPrvConfig(config)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamPrvConfig(data: DamPrvConfig) {\n try {\n damPrvConfig.value.settings = data.settings\n damPrvConfig.value.colorSet = data.colorSet\n damPrvConfig.value.assetExternalProviders = data.assetExternalProviders\n damPrvConfig.value.distributionServices = data.distributionServices\n\n initialized.damPrvConfig = true\n } catch (err) {\n throw new Error('Unable to load dam config. Incorrect fields in json.')\n }\n }\n\n function loadDamConfigExtSystem(extSystemId: IntegerId) {\n return new Promise((resolve, reject) => {\n initialized.damConfigExtSystem = null\n if (isUndefined(client)) {\n reject(false)\n return\n }\n fetchExtSystemConfiguration(extSystemId, client)\n .then((config) => {\n if (Object.keys(config).length < 1) {\n throw new Error('Unable to load dam ext system config. Incorrect response body.')\n }\n setDamConfigExtSystem(config, extSystemId)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamConfigExtSystem(data: DamExtSystemConfig, extSystemId: IntegerId) {\n try {\n damConfigExtSystem.value.assetExternalProviders = data.assetExternalProviders\n damConfigExtSystem.value.audio = data.audio\n damConfigExtSystem.value.document = data.document\n damConfigExtSystem.value.image = data.image\n damConfigExtSystem.value.video = data.video\n\n initialized.damConfigExtSystem = extSystemId\n } catch (err) {\n throw new Error('Unable to load dam ext system config. Incorrect fields in json.')\n }\n }\n\n // todo add support to load only selected types\n function loadDamConfigAssetCustomFormElements(extSystemId: IntegerId) {\n return new Promise((resolve, reject) => {\n initialized.damConfigExtSystem = null\n if (isUndefined(client)) {\n reject(false)\n return\n }\n const promises = [\n fetchAssetCustomFormElements(client, extSystemId, DamAssetType.Image),\n fetchAssetCustomFormElements(client, extSystemId, DamAssetType.Audio),\n fetchAssetCustomFormElements(client, extSystemId, DamAssetType.Video),\n fetchAssetCustomFormElements(client, extSystemId, DamAssetType.Document),\n ]\n\n Promise.all(promises)\n .then((responses) => {\n if (\n responses.length !== 4 ||\n Object.keys(responses[0]).length < 1 ||\n Object.keys(responses[1]).length < 1 ||\n Object.keys(responses[2]).length < 1 ||\n Object.keys(responses[3]).length < 1\n ) {\n throw new Error('Unable to load asset custom form config. Incorrect response body.')\n }\n setDamConfigAssetCustomFormElements(responses, extSystemId)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamConfigAssetCustomFormElements(\n responses: Awaited<{\n data: CustomDataFormElement[]\n }>[],\n extSystemId: IntegerId\n ) {\n try {\n damConfigAssetCustomFormElements.value.image = responses[0].data\n damConfigAssetCustomFormElements.value.audio = responses[1].data\n damConfigAssetCustomFormElements.value.video = responses[2].data\n damConfigAssetCustomFormElements.value.document = responses[3].data\n\n initialized.damConfigAssetCustomFormElements = extSystemId\n } catch (err) {\n throw new Error('Unable to load asset custom form config. Incorrect fields in json.')\n }\n }\n\n function loadDamConfigDistributionCustomFormElements (distributionServiceName: DamDistributionServiceName) {\n return new Promise((resolve, reject) => {\n if (isUndefined(client)) {\n reject(false)\n return\n }\n if (damConfigDistributionCustomFormElements.value[distributionServiceName]) {\n resolve(true)\n return\n }\n fetchDistributionCustomFormElements(client, distributionServiceName)\n .then((res) => {\n damConfigDistributionCustomFormElements.value[distributionServiceName] = res.data\n resolve(true)\n return\n })\n .catch((error) => {\n reject(error)\n return\n })\n })\n }\n\n return {\n initialized,\n damPubConfig,\n damPrvConfig,\n damConfigExtSystem,\n damConfigAssetCustomFormElements,\n damConfigDistributionCustomFormElements,\n loadDamPrvConfig,\n loadDamPubConfig,\n loadDamConfigExtSystem,\n loadDamConfigAssetCustomFormElements,\n loadDamConfigDistributionCustomFormElements,\n }\n}\n","import type { AxiosInstance, AxiosResponse } from 'axios'\nimport type { DocId } from '@/types/common'\nimport type { AssetDetailItemDto, AssetSearchListItemDto, DamAssetType } from '@/types/coreDam/Asset'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { UploadQueueItem } from '@/types/coreDam/UploadQueue'\nimport { HTTP_STATUS_OK } from '@/composables/statusCodes'\nimport { isNull } from '@/utils/common'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport {\n AnzuApiValidationError,\n type AnzuApiValidationResponseData,\n axiosErrorResponseHasValidationData,\n type ValidationError,\n} from '@/model/error/AnzuApiValidationError'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\n\nconst END_POINT = '/adm/v1/asset'\nconst BULK_METADATA_LIMIT = 10\nexport const ENTITY = 'asset'\nexport const SYSTEM_CORE_DAM = 'coreDam'\nconst FETCH_BY_IDS_MAX_LIMIT = 25\n\nexport interface AssetMetadataBulkItem {\n id: DocId\n keywords: DocId[]\n authors: DocId[]\n described: boolean\n customData: AssetCustomData\n}\n\nexport declare type AssetCustomData = Record<string, any>;\n\nexport const fetchAssetList = (\n client: () => AxiosInstance,\n licenceId: number,\n pagination: Pagination,\n filterBag: FilterBag\n) =>\n apiFetchList<AssetSearchListItemDto[]>(\n client,\n END_POINT + '/licence/:licenceId',\n { licenceId },\n pagination,\n filterBag,\n SYSTEM_CORE_DAM,\n ENTITY\n )\n\nexport const fetchAsset = (client: () => AxiosInstance, id: DocId) =>\n apiFetchOne<AssetDetailItemDto>(client, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n\nexport const fetchAssetByFileId = (client: () => AxiosInstance, assetFileId: DocId) =>\n apiFetchOne<AssetDetailItemDto>(client, END_POINT + '/asset-file/:id', { id: assetFileId }, SYSTEM_CORE_DAM, ENTITY)\n\nexport const bulkUpdateAssetsMetadata = (client: () => AxiosInstance, items: UploadQueueItem[]) => {\n return new Promise<AssetMetadataBulkItem[]>((resolve, reject) => {\n const bulkItems = listItemsToMetadataBulkItems(items)\n updateMetadataSequence(client, bulkItems)\n .then((responses) => {\n if (bulkItems.length === 0) {\n return resolve([])\n } else if (responses.length === 0) {\n return reject(responses)\n } else if (\n responses.every((res) => {\n return res.status === HTTP_STATUS_OK\n })\n ) {\n const bulkItemsRes: AssetMetadataBulkItem[] = responses.flatMap(response => response.data)\n return resolve(bulkItemsRes)\n } else {\n return reject(responses)\n }\n })\n .catch((err) => {\n //\n return reject(err)\n })\n })\n}\n\nasync function fetchAssetListByIdsSequence(client: () => AxiosInstance, ids: DocId[], licenceId: number) {\n if (ids.length === 0) return Promise.resolve([])\n const totalCalls = Math.ceil(ids.length / FETCH_BY_IDS_MAX_LIMIT)\n const responses = []\n\n for (let i = 0; i < totalCalls; i++) {\n const offset = i * FETCH_BY_IDS_MAX_LIMIT\n const reduced = ids.slice(offset, offset + FETCH_BY_IDS_MAX_LIMIT)\n const res = await client().get(END_POINT + `/licence/${licenceId}/ids/${reduced.join(',')}`)\n responses.push(res)\n }\n return responses\n}\n\nexport const fetchAssetListByIds: (\n client: () => AxiosInstance,\n ids: DocId[],\n licenceId: number\n) => Promise<AssetDetailItemDto[]> = (client: () => AxiosInstance, ids: DocId[], licenceId: number) => {\n return new Promise((resolve, reject) => {\n fetchAssetListByIdsSequence(client, ids, licenceId)\n .then((responses) => {\n if (ids.length === 0) {\n return resolve([])\n } else if (responses.length === 0) {\n reject(responses)\n } else if (\n responses.every((res) => {\n return res.status === HTTP_STATUS_OK\n })\n ) {\n const final = []\n for (let i = 0; i < responses.length; i++) {\n final.push(...responses[i].data.data)\n }\n resolve(final as AssetDetailItemDto[])\n } else {\n reject(responses)\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nasync function updateMetadataSequence(client: () => AxiosInstance, bulkItems: AssetMetadataBulkItem[]) {\n const totalCalls = Math.ceil(bulkItems.length / BULK_METADATA_LIMIT)\n const responses: AxiosResponse[] = []\n if (bulkItems.length === 0) return Promise.resolve([])\n\n for (let i = 0; i < totalCalls; i++) {\n const offset = i * BULK_METADATA_LIMIT\n const reduced = bulkItems.slice(offset, offset + BULK_METADATA_LIMIT)\n const res = await client().patch(END_POINT + '/metadata-bulk-update', JSON.stringify(reduced))\n responses.push(res)\n }\n return responses\n}\n\nfunction listItemsToMetadataBulkItems (items: UploadQueueItem[]) {\n const dtoItems: AssetMetadataBulkItem[] = []\n items.forEach((item) => {\n if (!isNull(item.assetId) && item.canEditMetadata) {\n dtoItems.push({\n id: item.assetId,\n keywords: item.keywords,\n authors: item.authors,\n described: true,\n customData: item.customData,\n })\n }\n })\n\n return dtoItems\n}\n\nconst { showUnknownError, showApiValidationError } = useAlerts()\n\nconst handleMetadataValidationError = (error: any, assetType: DamAssetType) => {\n const { damConfigAssetCustomFormElements } = useDamConfigState()\n if (!error || !error.response || !error.response.data) return\n const data = error.response.data as AnzuApiValidationResponseData\n const items = [] as ValidationError[]\n for (const [key, values] of Object.entries(data.fields)) {\n const field = key.split('.').pop()\n const found = damConfigAssetCustomFormElements.value[assetType].find((item) => item.property === field)\n if (found) {\n items.push({\n field: found.name,\n errors: values,\n })\n }\n }\n if (items.length) {\n showApiValidationError(items, -1, true)\n return\n }\n showUnknownError()\n}\n\nexport const updateAssetMetadata = (client: () => AxiosInstance, asset: AssetDetailItemDto) => {\n return new Promise((resolve, reject) => {\n const data = {\n id: asset.id,\n keywords: asset.keywords,\n authors: asset.authors,\n described: true,\n customData: asset.metadata.customData,\n }\n client()\n .patch(END_POINT + '/metadata-bulk-update', JSON.stringify([data]))\n .then((res) => {\n if (res.status === HTTP_STATUS_OK) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n handleMetadataValidationError(err, asset.attributes.assetType)\n return reject(new AnzuApiValidationError(err, SYSTEM_CORE_DAM, ENTITY, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { useAssetListFilter } from '@/model/coreDam/filter/AssetFilter'\nimport { type AssetSelectListItem, useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { storeToRefs } from 'pinia'\nimport type { Ref } from 'vue'\nimport { ref } from 'vue'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { usePagination } from '@/composables/system/pagination'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { useAlerts } from '@/composables/system/alerts'\nimport type { DocId } from '@/types/common'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { fetchAssetList as apiFetchAssetList } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nconst filter = useAssetListFilter()\nconst pagination = usePagination()\nconst filterIsTouched = ref(false)\n\nexport function useAssetListActions(configName = 'default') {\n const { damClient } = useCommonAdminCoreDamOptions(configName)\n\n const assetListStore = useAssetSelectStore()\n const { selectedCount, selectedAssets, assetListItems, loader } = storeToRefs(assetListStore)\n\n const { resetFilter } = useFilterHelpers()\n const { showErrorsDefault } = useAlerts()\n\n const fetchAssetList = async () => {\n pagination.page = 1\n try {\n assetListStore.showLoader()\n assetListStore.setList(await apiFetchAssetList(damClient, assetListStore.licenceId, pagination, filter))\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n assetListStore.hideLoader()\n }\n }\n const fetchNextPage = async () => {\n pagination.page = pagination.page + 1\n try {\n assetListStore.showLoader()\n assetListStore.appendList(await apiFetchAssetList(damClient, assetListStore.licenceId, pagination, filter))\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n assetListStore.hideLoader()\n }\n }\n\n const onItemClick = (data: { assetId: DocId; index: number }) => {\n assetListStore.toggleSelectedByIndex(data.index)\n }\n\n const resetAssetList = async () => {\n assetListStore.reset()\n filter.type.default = [assetListStore.assetType]\n resetFilter(filter, pagination, fetchAssetList)\n }\n\n const filterTouch = () => {\n filterIsTouched.value = true\n }\n const filterUnTouch = () => {\n filterIsTouched.value = false\n }\n\n const initStoreContext = (\n licenceId: number,\n assetType: DamAssetType,\n singleMode: boolean,\n minCount: number,\n maxCount: number\n ): void => {\n assetListStore.clearSelected()\n assetListStore.setAssetType(assetType)\n assetListStore.setLicenceId(licenceId)\n assetListStore.setSingleMode(singleMode)\n assetListStore.setMinCount(minCount)\n assetListStore.setMaxCount(maxCount)\n }\n\n return {\n filterIsTouched,\n filter,\n selectedCount,\n selectedAssets,\n pagination,\n loader,\n assetListItems: assetListItems as Ref<Array<AssetSelectListItem>>,\n getSelectedData: assetListStore.getSelectedData,\n onItemClick,\n fetchAssetList,\n fetchNextPage,\n resetAssetList,\n filterTouch,\n filterUnTouch,\n initStoreContext,\n }\n}\n","import { computed, type Ref } from 'vue'\nimport type { AssetSearchListItemDto } from '@/types/coreDam/Asset'\nimport type { AssetSelectListItem } from '@/services/stores/coreDam/assetSelectStore'\n\nconst IMAGE_HEIGHT = 200\nconst IMAGE_BG_COLOR_DEFAULT = '#ccc'\n\nexport function useAssetItemActions(item: Readonly<Ref<AssetSelectListItem>>) {\n const asset = computed<AssetSearchListItemDto>(() => {\n return item.value.asset\n })\n\n const assetType = computed(() => {\n return asset.value.attributes.assetType\n })\n\n const assetStatus = computed(() => {\n return asset.value.attributes.assetStatus\n })\n\n const imageProperties = computed(() => {\n if (asset.value.mainFile && asset.value.mainFile.links && asset.value.mainFile.links.image_list) {\n return {\n url: asset.value.mainFile.links.image_list.url,\n width: asset.value.mainFile.links.image_list.width,\n height: asset.value.mainFile.links.image_list.height,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n }\n return {\n url: undefined,\n width: undefined,\n height: IMAGE_HEIGHT,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n })\n\n const tableImageProperties = computed(() => {\n if (asset.value.mainFile && asset.value.mainFile.links && asset.value.mainFile.links.image_table) {\n return {\n url: asset.value.mainFile.links.image_table.url,\n width: asset.value.mainFile.links.image_table.width,\n height: asset.value.mainFile.links.image_table.height,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n }\n return {\n url: undefined,\n width: undefined,\n height: IMAGE_HEIGHT,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n })\n\n return {\n asset,\n assetType,\n assetStatus,\n imageProperties,\n tableImageProperties,\n }\n}\n","export default \"data:image/jpeg;base64,/9j/4QZGRXhpZgAATU0AKgAAAAgADAEAAAMAAAABCgAAAAEBAAMAAAABBaAAAAECAAMAAAADAAAAngEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEVAAMAAAABAAMAAAEaAAUAAAABAAAApAEbAAUAAAABAAAArAEoAAMAAAABAAIAAAExAAIAAAAkAAAAtAEyAAIAAAAUAAAA2IdpAAQAAAABAAAA7AAAASQACAAIAAgADqYAAAAnEAAOpgAAACcQQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCkAMjAxNzowNDoyNiAxNDoyMzo1NAAABJAAAAcAAAAEMDIyMaABAAMAAAAB//8AAKACAAQAAAABAAAGQKADAAQAAAABAAADhAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAFyARsABQAAAAEAAAF6ASgAAwAAAAEAAgAAAgEABAAAAAEAAAGCAgIABAAAAAEAAAS8AAAAAAAAAEgAAAABAAAASAAAAAH/2P/tAAxBZG9iZV9DTQAC/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAWgCgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A7hJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJT//0O4SSSSUpJJJJSkkkklKSSVfKyLqn01UMa+28uA3kho2ieySmwkqnqdWHNOOPjYf70vU6r/osf8A7cP/AJJJTbSVT1Oq/wCix/8Atw/+SUbMvPoDX31U+mXtYfTeS73eGqSm6knIg+PaQmSUpJJJJSkkkklKSSSSU//R7hJJJJSkkkklKSSSSUpVcj/lHp/9ez8jVaVa/wD5R6f/AF7PyNSU1cHCxMml9t9fqWG2wFxLpgH+S5Wf2V07/QD/ADnf+SUek/0V3/HWflCrZfU3szR6J3VUy17ezyf5z/N+jWkps2dN6XXW6x9ADGAudq7gf2lWw2dKybHVjFNTwC5svcZA54d9JaTXU5FIc331WtIg9wdHNcq7MfC6eHXS4F8MBcdxMn+brGiSmOBWynKzaahtrY6va2SQJafFXVVxhHUM8eDq/wDqSrSSlJJJJKUkkkkpSSSSSn//0u4SSSSUpJJJJSkkkklKVa/XqPT/AOvZ+RqsoV+Lj5O0XtJDDILSWkT9LVqSnPqyXY3TLHM0sffYxh8Cfzv7LVmgQIWkyosoOJkYl9rWWue11eg19rfd+d7U32fF/wDK/L/zikpr4edZiFwDRZW/UsJj3fvtKHbkW5F7bLTJ3ANA4aJHtYFc+z4v/lfl/wCcUhRjAgjAy5BkanskpuUf8o9Q/rs/I5WlUwxa/Iysiyp1Iucwta/R3tB3K2kpSSSSSlJJJJKUkkkkp//T7hJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJT//1O4SSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSU//9n/7Q30UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAABccAVoAAxslRxwBWgADGyVHHAIAAAIAAAA4QklNBCUAAAAAABDHXRfldLVu9du+OZTA6XlcOEJJTQQ6AAAAAADlAAAAEAAAAAEAAAAAAAtwcmludE91dHB1dAAAAAUAAAAAUHN0U2Jvb2wBAAAAAEludGVlbnVtAAAAAEludGUAAAAAQ2xybQAAAA9wcmludFNpeHRlZW5CaXRib29sAAAAAAtwcmludGVyTmFtZVRFWFQAAAABAAAAAAAPcHJpbnRQcm9vZlNldHVwT2JqYwAAAAwAUAByAG8AbwBmACAAUwBlAHQAdQBwAAAAAAAKcHJvb2ZTZXR1cAAAAAEAAAAAQmx0bmVudW0AAAAMYnVpbHRpblByb29mAAAACXByb29mQ01ZSwA4QklNBDsAAAAAAi0AAAAQAAAAAQAAAAAAEnByaW50T3V0cHV0T3B0aW9ucwAAABcAAAAAQ3B0bmJvb2wAAAAAAENsYnJib29sAAAAAABSZ3NNYm9vbAAAAAAAQ3JuQ2Jvb2wAAAAAAENudENib29sAAAAAABMYmxzYm9vbAAAAAAATmd0dmJvb2wAAAAAAEVtbERib29sAAAAAABJbnRyYm9vbAAAAAAAQmNrZ09iamMAAAABAAAAAAAAUkdCQwAAAAMAAAAAUmQgIGRvdWJAb+AAAAAAAAAAAABHcm4gZG91YkBv4AAAAAAAAAAAAEJsICBkb3ViQG/gAAAAAAAAAAAAQnJkVFVudEYjUmx0AAAAAAAAAAAAAAAAQmxkIFVudEYjUmx0AAAAAAAAAAAAAAAAUnNsdFVudEYjUHhsQFgAAAAAAAAAAAAKdmVjdG9yRGF0YWJvb2wBAAAAAFBnUHNlbnVtAAAAAFBnUHMAAAAAUGdQQwAAAABMZWZ0VW50RiNSbHQAAAAAAAAAAAAAAABUb3AgVW50RiNSbHQAAAAAAAAAAAAAAABTY2wgVW50RiNQcmNAWQAAAAAAAAAAABBjcm9wV2hlblByaW50aW5nYm9vbAAAAAAOY3JvcFJlY3RCb3R0b21sb25nAAAAAAAAAAxjcm9wUmVjdExlZnRsb25nAAAAAAAAAA1jcm9wUmVjdFJpZ2h0bG9uZwAAAAAAAAALY3JvcFJlY3RUb3Bsb25nAAAAAAA4QklNA+0AAAAAABAAYAAAAAEAAgBgAAAAAQACOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD+AAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANVAAAABgAAAAAAAAAAAAADhAAABkAAAAAQAHAAbABhAGMAZQBoAG8AbABkAGUAcgAtADEANgAtADkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAABkAAAAOEAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAOEAAAAAFJnaHRsb25nAAAGQAAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAADhAAAAABSZ2h0bG9uZwAABkAAAAADdXJsVEVYVAAAAAEAAAAAAABudWxsVEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAAAAAADmNlbGxUZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGlnbmVudW0AAAAPRVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9FU2xpY2VWZXJ0QWxp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Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06RG9jdW1lbnRJRD0iMjc4M0ZDMUFGQTdBRThFREUyRDE3MjI5NTdCNEExQjAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MGVlZDBlZGUtOGM3MC00OTljLWEyYjUtMzMwZmFmNWYxMjZmIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9IjI3ODNGQzFBRkE3QUU4RURFMkQxNzIyOTU3QjRBMUIwIiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHBob3Rvc2hvcDpMZWdhY3lJUFRDRGlnZXN0PSJDNzVEMTdFNTc0QjU2RUY1REJCRTM5OTRDMEU5Nzk1QyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IiIgeG1wOkNyZWF0ZURhdGU9IjIwMTctMDQtMjFUMTI6MTk6MTkrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE3LTA0LTI2VDE0OjIzOjU0KzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE3LTA0LTI2VDE0OjIzOjU0KzAxOjAwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChNYWNpbnRvc2gpIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NDU2NTBiMjEtMjM4Zi00MGNjLTlkNGEtNDZiZTMyOWUzYWExIiBzdEV2dDp3aGVuPSIyMDE3LTA0LTIxVDEyOjE5OjU3KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MGVlZDBlZGUtOGM3MC00OTljLWEyYjUtMzMwZmFmNWYxMjZmIiBzdEV2dDp3aGVuPSIyMDE3LTA0LTI2VDE0OjIzOjU0KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/Pv/uAA5BZG9iZQBkAAAAAAH/2wCEAAYEBAcFBwsGBgsOCggKDhEODg4OERYTExMTExYRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBwkJEwwTIhMTIhQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIA4QGQAMBEQACEQEDEQH/3QAEAMj/xAGiAAAABwEBAQEBAAAAAAAAAAAEBQMCBgEABwgJCgsBAAICAwEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAgEDAwIEAgYHAwQCBgJzAQIDEQQABSESMUFRBhNhInGBFDKRoQcVsUIjwVLR4TMWYvAkcoLxJUM0U5KismNzwjVEJ5OjszYXVGR0w9LiCCaDCQoYGYSURUaktFbTVSga8uPzxNTk9GV1hZWltcXV5fVmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6PgpOUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6EQACAgECAwUFBAUGBAgDA20BAAIRAwQhEjFBBVETYSIGcYGRMqGx8BTB0eEjQhVSYnLxMyQ0Q4IWklMlomOywgdz0jXiRIMXVJMICQoYGSY2RRonZHRVN/Kjs8MoKdPj84SUpLTE1OT0ZXWFlaW1xdXl9UZWZnaGlqa2xtbm9kdXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6Pg5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6vr/2gAMAwEAAhEDEQA/AO4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq3xJ7Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFWsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/9HuGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KrJZViUvIeKKKknsMVYrqPm+SQlLEcE/nPU+4H7OKpNJqV1KavM5P+sf4Yqt+uT/79f/gjirvrk/8Av1/+COKu+uT/AO/X/wCCOKu+uT/79f8A4I4q765P/v1/+COKu+uT/wC/X/4I4q765P8A79f/AII4q765P/v1/wDgjirvrk/+/X/4I4q765P/AL9f/gjirvrk/wDv1/8Agjirvrk/+/X/AOCOKu+uT/79f/gjirvrk/8Av1/+COKu+uT/AO/X/wCCOKu+uT/79f8A4I4q765P/v1/+COKu+uT/wC/X/4I4q765P8A79f/AII4q765P/v1/wDgjirvrk/+/X/4I4q765P/AL9f/gjirvrk/wDv1/8Agjirvrk/+/X/AOCOKu+uT/79f/gjirvrk/8Av1/+COKu+uT/AO/X/wCCOKu+uT/79f8A4I4q765P/v1/+COKu+uT/wC/X/4I4q765P8A79f/AII4q765P/v1/wDgjirvrk/+/X/4I4q765P/AL9f/gjirvrk/wDv1/8Agjirvrk/+/X/AOCOKu+uT/79f/gjirvrk/8Av1/+COKuF5cD/dr/APBHFUZaeYb22NBJzX+V9x/zVirK9H1qLUlIUcJV+0h/Wv8AMuKpjirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir/AP/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirEPNmqGab6nGfgj3b/Kb/mwYqkOKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVfBO1s6zREq6GoOKvQrC8W8gS4Xo43Hge4xVEYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWj2xV5tcyGWV5G6sxP44qsxVuONpGCICzHoB1xVX/AEbdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4qsltJoRyljZV8SKb4qo4q3irLfJkpa2kjJ2WTb6RirIMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir/AP/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVaxV5o/2j8z+vFWsVR2gml9D/r4qz8HFW64q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4qkPnE/6Gv/GQfqOKsOGKt4qyryUP3U//ABkX9WKsjxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv//V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqRecf8AeNf+Mg/UcVYcOmKt4qyryV/cz/8AGRf1YqyPFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//9buGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvM3+0fmf14q1iqO0L/e6H/XxVn4xV2KuxVw36Yql15r1naMVkkBYfsr8R/DFUJ/i6yHaT/gf7cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFUt8wa9b6hbiGEPyDg/EKbCuKsfGKt4qnXlzWoNOSRZ+VXYEcRXoPniqb/AOL7L/iz/gR/XFXf4vsvCT/gf7cVXR+bbJjQl19yv9Diqa211FdLzgcOPbFVXFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8zf7R+Z/XirWKo7Qv97of9fFWfjFXYq7FWH675ia4Zra2YrCNmYdWPen+TiqRAU6Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqvt7mW1cSwMUYeH8R3xVnOi6uupRVNFmSgdR/xIe2KpjirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8zf7R+Z/XirWKo7Qv97of9fFWfjFXYqlnmS8a1smKGjueCnwr1/wCFxVggFP4Yq3irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVR2h3htLyNx9ljwb5NtirPz1pirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHfOjEQwDsZG/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sVdirsVdirsVdirsVS3zDqP1G0ZlP7x/hX5nq3+xGKsDpireKuxV2KuxV2Ktd69D4+GKs+0LUfr9qsjf3q/A/wAx3/2WKphirsVdirsVccVYDr3+903+viqAxVtPtL8x+vFXpgxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWJecrgvcRwjoicvvxVj+KuxV2KuxV2KuxV2Ksh8mTH1ZYezKGH0bYqywYq7FXYq7FXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq44qwrzcCL817op+6uKpPirsVdirsVdirsVdiqd+UP97Sewjav4YqzIYq7FXYq7FXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FXYqsmmSFfUlIVQQKn3xVdXemKt4q7FXYq7FXYq7FXYq7FXYq7FXYqxbzrbHnFcDoQUJ+W64qxvFXYq7FXYq7FXYq7FWTeS7U/vbk9NkH62xVk9KbYq7FXYq7FXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FXYqw/zZqXry/U03jjPxeBb/mzFUd5X1v1gLKc/vFHwE9wP2T/AJWKsixV2KuxV2KuxV2KuxV2KuxV2KuxVCarp4v7d7c7EiqnwYdMVefyxtCxjkHFlNCPliq3FXYq7FXYq7FV0MLzyLFFu7mgHvir0LTrFbGBLdf2RufFj9o4qicVdirsVdirjirAde/3um/18VQGKtp9pfmP14q9MGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv//T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FUv1vUv0dbmUf3jHig9z/zTirAiSTVjUnvirlJUhgSCDsR44qzrQtZGoxfHtMn2x49ueKpnirsVdirsVdirsVdirsVdirsVdiqTa95fXUB6sFFuB9Aan83virDJYnt3MMylHHY4q1irsVdiq+3gkuZBFCpdyaUH8f5cVZpoOgrpy+pJRp26kdAP5VxVNsVdirsVdirsVccVYDr3+903+viqAxVtPtL8x+vFXpgxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//9TuGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvM3+0fmf14q1iqO0L/e6H/XxVn4xV2Ksc86/3MH/GRv1YqxXFWm6YqzHyb/vG3/GQ/qGKp7irsVdirsVdirsVdirsVdirj93zxVgWvamdQuCyH91GeKf8bN9OKpfirsVVrS7ktJVuIftqfvH8uKs90/UI7+FbiI7HZh4HwxVFYq7FXYq7FXYq7FXYq7FXYq7FXYqh7yxhvF4ToHHavUfJuuKpLP5LiYkwSsvswqB/HFUMfJcv+/l/4E4qibbybCprPIzjwAoP+asVTu1sobReECBAfDqf9bFVfFXYq7FXYq7FXYq44qwHXv8Ae6b/AF8VQGKtp9pfmP14q9MGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8zf7R+Z/XirWKo7Qv97of9fFWfjFXYqxzzr/cwf8ZG/VirFcVabpirMfJv+8bf8ZD+oYqnuKuxV2KuxV2KuxV2KuxV2KpH5p1T6tB9XjNJJgRt2X/m7pirDQABtireKuxV2Ko7RtUbTZuY3jfZ18R4/wCsMVZ5DIkqCSM8kYVBHcYqvxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVxxVgOvf73Tf6+KoDFW0+0vzH68VemDFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX//1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8zf7R+Z/XirWKo7Qv97of9fFWfjFXYqxzzr/cwf8ZG/VirFcVabpirMfJv+8bf8ZD+oYqnuKuxV2KuxV2KuxV2KuxVTuJkhRpJDRFFSfbFXn2oXrX07XD9W6DwHYYqh8VdirsVdirVMVT3y1rf1RhbXDfuXNFP8p/o2KsxpirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirjirAde/3um/18VQGKtp9pfmP14q9MGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv8A/9fuGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvM3+0fmf14q1iqO0L/e6H/XxVn4xV2Ksc86/3MH/GRv1YqxXFWm6YqzHyb/vG3/GQ/qGKp7irsVdirsVdirsVdirRrirGPN2q1IsUOwo0lPH9lMVY1irsVdirsVdirsVdirK/LGt+sBZTmsg+wx7j+X/WGKshBr1xVvFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqp3NzHbRtNM3FF6nFUBousHU/VcLwRGCqO+474qmeKuOKsB17/e6b/XxVAYq2n2l+Y/Xir0wYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//9DuGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvM3+0fmf14q1iqO0L/e6H/XxVn4xV2Ksc86/3MH/GRv1YqxXFWm6YqzHyb/vG3/GQ/qGKp7irsVdirsVdirsVdiqG1K/Swgad+q/ZB7sfsr/xtirz2R2kYySHk7Ekn3OKrcVdirsVdirsVdirsVcCykMpIYGoI7HFWc6HrA1GL4tpkoHHj/ljFU0xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuJpiqG1DUYbCL1ZzSv2V7t/q4qwbVdVm1Jw8poq/ZQdB/XFU/8AJP8Acz/8ZF/VirI8VccVYDr3+903+viqAxVtPtL8x+vFXpgxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8zf7R+Z/XirWKo7Qv97of9fFWfjFXYqxzzr/cwf8ZG/VirFcVabpirMfJv+8bf8ZD+oYqnuKuxV2KuxV2KuxV1MVYV5n1P63cejGaxQ9Pdj9pvo+ziqTYq3irsVdirsVdirsVdirsVVrK7ks5lnh+0vaux8a4qz/T76O+hWeLodiO4PcYqiMVdirsVdirsVdirsVdirsVdirsVdirsVS7Wdai01KP8Ux+yn8W/ycVYRd3kt5IZpzyc/cPliqlirKvJX9zP/wAZF/VirI8VccVYDr3+903+viqAxVtPtL8x+vFXpgxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FUq8xamLK2IU0mkqq+w/afFWDYq3irsVdirsVdirsVdirsVdirsVR+jaq2mzcxvE2zj2/m/2OKs7SZZVWSM8kcVB8cVX4q7FXYq7FXYq7FXYq7FXYq7FXYqk2u+YksAYIKNc/gvz/wAr/JxVhskryuZJCWdtyTiq3FXYqyryV/cz/wDGRf1YqyPFXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV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sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYqgNa1EadbtMPtt8Ke5P/NOKsBJJJLGpJrirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVR+jaq+nTch8Ub7Ovt/MP8AKGKsi/xhZeEn3D+uKu/xhZeEn3f24qtl842oUmNHZ+wIoK++KsVu72a9kM1weTdvAey4qpYq7FXYq7FXYq7FXYq7FWVeSv7mf/jIv6sVZHirjirAde/3um/18VQGKtp9pfmP14q9MGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv//Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYqwTX9U+v3BK/wB1HVV9/wCZ/wDZYqluKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KtcRiruIxV1BireKuxV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3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxVr/AAVcf79T7jiq6PyVJX95MtPZTX8cVTjTfL9tYEOg5yD9tuv+xH7OKpnirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Z\"","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport placeholder16x9 from '@/assets/image/placeholder16x9.jpg'\nimport { isUndefined } from '@/lib'\n\nconst props = withDefaults(\n defineProps<{\n src?: string\n assetType?: DamAssetType\n assetStatus?: DamAssetStatus\n backgroundColor?: string\n width?: number\n height?: number\n fallbackHeight?: number\n iconSize?: number\n iconColor?: string\n }>(),\n {\n assetType: DamAssetType.Image,\n assetStatus: DamAssetStatus.WithFile,\n src: undefined,\n backgroundColor: '#ccc',\n width: undefined,\n height: undefined,\n fallbackHeight: 200,\n iconSize: 80,\n iconColor: '#505050',\n }\n)\nconst emit = defineEmits<{\n (e: 'error'): void\n}>()\n\nconst onError = () => {\n emit('error')\n}\n\nconst icon = computed(() => {\n if (props.assetStatus === DamAssetStatus.Deleting) return 'mdi-trash-can'\n switch (props.assetType) {\n case DamAssetType.Audio:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-music' : 'mdi-music-off'\n case DamAssetType.Document:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-note' : 'mdi-note-off'\n case DamAssetType.Video:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-video' : 'mdi-video-off'\n case DamAssetType.Image:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-image' : 'mdi-image-off'\n default:\n return ''\n }\n})\n\nconst srcComputed = computed(() => {\n return isUndefined(props.src) ? placeholder16x9 : props.src\n})\n\nconst showIconComputed = computed(() => {\n if (props.assetType === DamAssetType.Image && props.src) return false\n return true\n})\n</script>\n\n<template>\n <div\n v-if=\"assetStatus === DamAssetStatus.WithFile && src\"\n class=\"anzu-common-asset-image anzu-common-asset-image--img position-relative\"\n :style=\"{ width: width + 'px' }\"\n >\n <img\n class=\"anzu-common-asset-image__img\"\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n alt=\"\"\n :style=\"'background-color:' + backgroundColor\"\n @onerror=\"onError\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"anzu-common-asset-image__icon-wrapper\"\n >\n <div\n class=\"anzu-common-asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"anzu-common-asset-image__icon\"\n />\n </div>\n </div>\n </div>\n <div\n v-else\n :style=\"{ height: fallbackHeight + 'px', backgroundColor: backgroundColor }\"\n style=\"width: 100%\"\n class=\"asset-image asset-image--placeholder d-flex align-center justify-center\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"asset-image__icon\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.anzu-common-asset-image {\n position: relative;\n\n &__icon-wrapper {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__icon-circle {\n border-radius: 100%;\n background-color: rgba(204 204 204 / 50%);\n }\n}\n</style>\n","export const prettyBytes = (bytes: number, decimals = 2) => {\n if (bytes === 0) {\n return '0 Bytes'\n }\n\n const k = 1024\n const dm = decimals < 0 ? 0 : decimals\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]\n}\n","<script lang=\"ts\" setup>\nimport type { AssetSelectListItem } from '@/services/stores/coreDam/assetSelectStore'\nimport { useI18n } from 'vue-i18n'\nimport { useAssetItemActions } from '@/components/dam/assetSelect/composables/assetSelectItemActions'\nimport AssetImagePreview from '@/components/dam/assetSelect/components/AssetImagePreview.vue'\nimport type { DocId } from '@/types/common'\nimport { prettyBytes } from '@/utils/file'\nimport ADatetime from '@/components/ADatetime.vue'\nimport { toRef } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n item: AssetSelectListItem\n showMetaIcons?: boolean\n }>(),\n {\n showMetaIcons: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'itemClick', data: { assetId: DocId; index: number }): void\n}>()\n\nconst { t } = useI18n()\n\nconst IMAGE_HEIGHT = 72\nconst IMAGE_WIDTH = 128\n\nconst item = toRef(props, 'item')\n\nconst { asset, tableImageProperties, assetType, assetStatus } = useAssetItemActions(item)\n\nconst onItemClick = () => {\n emit('itemClick', { assetId: asset.value.id, index: props.index })\n}\n</script>\n\n<template>\n <tr\n class=\"a-datatable__row\"\n :class=\"{ 'a-datatable__row--selected': item.selected }\"\n @click.stop.exact=\"onItemClick\"\n >\n <td>\n <VIcon\n v-if=\"item.selected\"\n icon=\"mdi-checkbox-outline\"\n :size=\"20\"\n />\n <VIcon\n v-else\n icon=\"mdi-checkbox-blank-outline\"\n :size=\"20\"\n />\n </td>\n <td>\n <AssetImagePreview\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"tableImageProperties.url\"\n :background-color=\"tableImageProperties.bgColor\"\n :width=\"IMAGE_WIDTH\"\n :height=\"IMAGE_HEIGHT\"\n :icon-size=\"20\"\n :fallback-height=\"IMAGE_HEIGHT\"\n />\n </td>\n <td>\n {{ asset.texts.displayTitle || t('commonCoreDam.asset.list.noTitle') }}\n </td>\n <td>\n <ADatetime :date-time=\"asset.createdAt\" />\n </td>\n <td>\n {{ asset.mainFile?.fileAttributes.mimeType }}\n </td>\n <td>\n {{ prettyBytes(asset.mainFile?.fileAttributes.size || 0) }}\n </td>\n </tr>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport AssetSelectTableRowItem from '@/components/dam/assetSelect/components/AssetSelectTableRowItem.vue'\nimport { useAssetListActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\n\nconst { t } = useI18n()\n\nconst { onItemClick, assetListItems, loader } = useAssetListActions()\n</script>\n\n<template>\n <VTable\n class=\"a-datatable a-datatable--dialog-sticky-fix\"\n fixed-header\n >\n <thead>\n <tr>\n <th class=\"text-left\" />\n <th class=\"text-left\">\n {{ t('common.assetSelect.meta.table.image') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.assetSelect.model.texts.displayTitle') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.model.tracking.created') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.assetSelect.model.mainFile.fileAttributes.mimeType') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.assetSelect.model.mainFile.fileAttributes.size') }}\n </th>\n </tr>\n </thead>\n <tbody>\n <AssetSelectTableRowItem\n v-for=\"(item, index) in assetListItems\"\n :key=\"item.asset.id\"\n :index=\"index\"\n :item=\"item\"\n @item-click=\"onItemClick\"\n />\n <tr v-if=\"!loader && assetListItems.length === 0\">\n <td\n colspan=\"6\"\n class=\"text-center\"\n >\n {{ t('common.assetSelect.meta.texts.noItemsFound') }}\n </td>\n </tr>\n </tbody>\n </VTable>\n</template>\n","import { readonly, ref } from 'vue'\n\nexport enum AssetSelectGridView {\n Masonry = 'masonry',\n Thumbnail = 'thumbnail',\n Table = 'table',\n Default = Masonry,\n}\n\nconst gridView = ref<AssetSelectGridView>(AssetSelectGridView.Default)\n\nexport function useGridView() {\n const setGridView = (value: AssetSelectGridView) => {\n gridView.value = value\n }\n\n return {\n gridView: readonly(gridView),\n setGridView,\n }\n}\n","import { ref } from 'vue'\n\nconst sidebarLeft = ref(false)\n\nexport function useSidebar() {\n const toggleSidebar = () => {\n sidebarLeft.value ? closeSidebar() : openSidebar()\n }\n\n const openSidebar = () => {\n sidebarLeft.value = true\n }\n\n const closeSidebar = () => {\n sidebarLeft.value = false\n }\n\n return {\n sidebarLeft,\n toggleSidebar,\n openSidebar,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { AssetSelectGridView, useGridView } from '@/components/dam/assetSelect/composables/assetSelectGridView'\nimport { useSidebar } from '@/components/dam/assetSelect/composables/assetSelectFilterSidebar'\n\nconst { t } = useI18n()\nconst { setGridView } = useGridView()\nconst { toggleSidebar } = useSidebar()\n</script>\n\n<template>\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n :height=\"46\"\n elevation=\"0\"\n class=\"system-border-b subject-select__second-bar\"\n >\n <slot name=\"second-bar\">\n <div class=\"d-flex flex-column w-100 px-1 align-center\">\n <div class=\"d-flex justify-space-between w-100 align-center\">\n <div class=\"d-flex align-center\">\n <VBtn\n icon\n :width=\"30\"\n :height=\"30\"\n @click=\"toggleSidebar\"\n >\n <VIcon\n icon=\"mdi-tune\"\n :size=\"16\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.filter.toggle') }}\n </VTooltip>\n </VBtn>\n <slot name=\"second-bar-left\" />\n </div>\n <div class=\"d-flex align-center\">\n <slot name=\"second-bar-right\" />\n <VBtn\n size=\"x-small\"\n icon\n variant=\"text\"\n @click.stop=\"setGridView(AssetSelectGridView.Masonry)\"\n >\n <VIcon icon=\"mdi-view-compact\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.grid.masonry') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"setGridView(AssetSelectGridView.Thumbnail)\"\n >\n <VIcon icon=\"mdi-view-grid\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.grid.thumbnail') }}\n </VTooltip>\n </VBtn>\n <VBtn\n size=\"x-small\"\n icon\n variant=\"text\"\n @click.stop=\"setGridView(AssetSelectGridView.Table)\"\n >\n <VIcon icon=\"mdi-view-headline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.grid.table') }}\n </VTooltip>\n </VBtn>\n </div>\n </div>\n </div>\n </slot>\n </VToolbar>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport type { AssetSelectListItem } from '@/services/stores/coreDam/assetSelectStore'\nimport { useAssetItemActions } from '@/components/dam/assetSelect/composables/assetSelectItemActions'\nimport AssetImagePreview from '@/components/dam/assetSelect/components/AssetImagePreview.vue'\nimport type { DocId } from '@/types/common'\nimport { toRef } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n item: AssetSelectListItem\n showMetaIcons?: boolean\n }>(),\n {\n showMetaIcons: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'itemClick', data: { assetId: DocId; index: number }): void\n}>()\n\nconst { t } = useI18n()\n\nconst IMAGE_HEIGHT = 200\n\nconst onItemClick = () => {\n emit('itemClick', { assetId: asset.value.id, index: props.index })\n}\n\nconst item = toRef(props, 'item')\n\nconst { asset, assetType, assetStatus, imageProperties } = useAssetItemActions(item)\n</script>\n\n<template>\n <div\n class=\"asset-list-tiles__item asset-list-tiles__item--pointer\"\n :class=\"{ 'asset-list-tiles__item--selected': item.selected }\"\n @click.stop.exact=\"onItemClick\"\n >\n <div class=\"asset-list-tiles__item-card\">\n <div\n v-if=\"item.selected\"\n class=\"asset-list-tiles__selected-triangle\"\n >\n <div class=\"asset-list-tiles__selected-triangle__bg\" />\n <VIcon\n class=\"asset-list-tiles__selected-triangle__icon\"\n icon=\"mdi-check\"\n color=\"white\"\n size=\"x-small\"\n />\n </div>\n <AssetImagePreview\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"imageProperties.url\"\n :background-color=\"imageProperties.bgColor\"\n :width=\"imageProperties.width\"\n :height=\"imageProperties.height\"\n :fallback-height=\"IMAGE_HEIGHT\"\n :asset-file-properties=\"item.asset.assetFileProperties\"\n :show-meta-icons=\"showMetaIcons\"\n />\n <div class=\"asset-list-tiles__item-text text-caption px-2 py-1\">\n <div class=\"d-flex align-center justify-space-between position-relative\">\n <div class=\"line-clamp-1\">\n {{ asset.texts.displayTitle || t('commonCoreDam.asset.list.noTitle') }}\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport AssetSelectTilesItem from '@/components/dam/assetSelect/components/AssetSelectTilesItem.vue'\nimport { useGridView } from '@/components/dam/assetSelect/composables/assetSelectGridView'\nimport { useAssetListActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport { useI18n } from 'vue-i18n'\n\nconst { gridView } = useGridView()\nconst { onItemClick, assetListItems, loader } = useAssetListActions()\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n class=\"asset-list-tiles\"\n :class=\"'asset-list-tiles--' + gridView\"\n >\n <AssetSelectTilesItem\n v-for=\"(item, index) in assetListItems\"\n :key=\"item.asset.id\"\n :index=\"index\"\n :item=\"item\"\n @item-click=\"onItemClick\"\n />\n </div>\n <div\n v-if=\"!loader && assetListItems.length === 0\"\n class=\"text-h6 text-medium-emphasis d-flex w-100 h-100 align-center justify-center\"\n >\n {{ t('common.assetSelect.meta.texts.noItemsFound') }}\n </div>\n</template>\n\n<style lang=\"scss\">\n// css similar to '.dam-image-grid' in admin-dam, for now renamed here to new class to avoid conflicts\n// consider refactor later according how much different both versions will be\n\n$class-name-root: 'asset-list-tiles';\n$bg-color-light: #f9f9f9;\n$bg-color-dark: #1e1e1e;\n$border-color-light: #e8e9ea;\n$border-color-dark: #2c2c2c;\n$shadow-color-light: #959595;\n$shadow-color-dark: #3d3d3d;\n$bg-color-actions-light: #fff;\n$bg-color-actions-dark: #1a1a1a;\n\n.#{$class-name-root} {\n display: flex;\n flex-wrap: wrap;\n max-width: 100%;\n padding: 2px;\n\n &__item {\n user-select: none;\n flex-grow: 2;\n max-width: 800px;\n padding: 10px;\n position: relative;\n overflow: hidden;\n min-width: 200px;\n\n &-card {\n border-radius: 5px;\n overflow: hidden;\n\n img.anzu-common-asset-image__img {\n display: block;\n height: 200px;\n min-width: 100%;\n object-fit: cover;\n width: 100%;\n }\n\n &:hover {\n .#{$class-name-root}__item-card-actions {\n display: block;\n }\n }\n\n &-actions {\n border-radius: 4px;\n position: absolute;\n top: -2px;\n right: -5px;\n display: none;\n overflow: hidden;\n }\n }\n\n &-text,\n &-text .line-clamp-1 {\n font-weight: 500;\n line-height: 30px;\n min-height: 38px;\n max-height: 38px;\n }\n\n &--pointer {\n cursor: pointer;\n }\n }\n\n &--thumbnail {\n display: grid;\n grid-template-columns: repeat(6, auto);\n\n .#{$class-name-root}__item {\n img:not(.img-svg) {\n object-fit: contain;\n padding-left: 6px;\n padding-right: 6px;\n padding-top: 6px;\n background-color: transparent !important;\n }\n }\n }\n\n .#{$class-name-root}__selected-triangle {\n position: absolute;\n top: 11px;\n right: 11px;\n z-index: 1;\n\n &__bg {\n content: '';\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 0 30px 30px 0;\n border-color: transparent #608a32 transparent transparent;\n top: 0;\n right: 0;\n position: absolute;\n }\n\n &__icon {\n position: absolute;\n display: block;\n width: 16px;\n height: 16px;\n top: -3px;\n right: 0;\n }\n }\n}\n\n.v-theme--light {\n .#{$class-name-root} {\n &__item {\n &-card {\n background-color: $bg-color-light;\n border: 1px solid $border-color-light;\n\n &:hover {\n box-shadow: 0 0 3px 1px $shadow-color-light;\n }\n\n &-actions {\n background-color: $bg-color-actions-light;\n }\n }\n\n &--selected {\n .#{$class-name-root}__item-card {\n border-color: #608a32;\n }\n }\n\n &--active {\n .#{$class-name-root}__item-card {\n border-color: blue;\n }\n }\n }\n }\n}\n\n.v-theme--dark {\n .#{$class-name-root} {\n &__item {\n &-card {\n background-color: $bg-color-dark;\n border: 1px solid $border-color-dark;\n\n &:hover {\n box-shadow: 0 0 3px 1px $shadow-color-dark;\n }\n\n &-actions {\n background-color: $bg-color-actions-dark;\n }\n }\n\n &--selected {\n .#{$class-name-root}__item-card {\n border-color: #608a32;\n }\n }\n\n &--active {\n .#{$class-name-root}__item-card {\n border-color: blue;\n }\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useAssetListActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport AFilterString from '@/components/filter/AFilterString.vue'\nimport AFilterBooleanSelect from '@/components/filter/AFilterBooleanSelect.vue'\n\nconst { filter, filterTouch, filterUnTouch, fetchAssetList } = useAssetListActions()\n\nconst onAnyFilterUpdate = () => {\n filterTouch()\n}\n\nconst submitFilter = () => {\n filterUnTouch()\n fetchAssetList()\n}\n</script>\n\n<template>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterString\n v-model=\"filter.text\"\n @update:model-value=\"onAnyFilterUpdate\"\n @keydown.enter=\"submitFilter\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterBooleanSelect\n v-model=\"filter.described\"\n @update:model-value=\"onAnyFilterUpdate\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterBooleanSelect\n v-model=\"filter.visible\"\n @update:model-value=\"onAnyFilterUpdate\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <AFilterBooleanSelect\n v-model=\"filter.generatedBySystem\"\n @update:model-value=\"onAnyFilterUpdate\"\n />\n </VCol>\n </VRow>\n</template>\n","<script lang=\"ts\" setup>\nimport { useAssetListActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport AFilterString from '@/components/filter/AFilterString.vue'\n\nconst { filter, fetchAssetList, filterTouch, filterUnTouch } = useAssetListActions()\n\nconst submitFilter = () => {\n filterUnTouch()\n fetchAssetList()\n}\n\nconst onAnyFilterUpdate = () => {\n filterTouch()\n}\n</script>\n\n<template>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterString\n v-model=\"filter.text\"\n @update:model-value=\"onAnyFilterUpdate\"\n @keydown.enter=\"submitFilter\"\n />\n </VCol>\n </VRow>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { useAssetListActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport { computed } from 'vue'\nimport { useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { DamAssetType as AssetTypeValue } from '@/types/coreDam/Asset'\nimport AssetSelectFilterFormImage from '@/components/dam/assetSelect/components/filter/AssetSelectFilterFormImage.vue'\nimport AssetSelectFilterFormDefault from '@/components/dam/assetSelect/components/filter/AssetSelectFilterFormDefault.vue'\n\nconst { t } = useI18n()\nconst { fetchAssetList, resetAssetList, filterUnTouch, filterIsTouched } = useAssetListActions()\n\nconst assetListStore = useAssetSelectStore()\n\nconst submitFilter = () => {\n filterUnTouch()\n fetchAssetList()\n}\n\nconst resetFilter = () => {\n resetAssetList()\n filterUnTouch()\n}\n\nconst componentComputed = computed(() => {\n switch (assetListStore.assetType) {\n case AssetTypeValue.Image:\n return AssetSelectFilterFormImage\n default:\n return AssetSelectFilterFormDefault\n }\n})\n</script>\n\n<template>\n <div class=\"subject-select-filter\">\n <div class=\"subject-select-filter__content\">\n <VForm\n name=\"search2\"\n class=\"px-2 pt-4\"\n @submit.prevent=\"submitFilter\"\n >\n <Component :is=\"componentComputed\" />\n </VForm>\n </div>\n <div class=\"subject-select-filter__actions\">\n <VBtn\n color=\"primary\"\n class=\"mx-2\"\n :variant=\"filterIsTouched ? 'flat' : 'text'\"\n size=\"small\"\n @click.stop=\"submitFilter\"\n >\n {{ t('common.button.submitFilter') }}\n </VBtn>\n <VBtn\n class=\"px-2\"\n color=\"light\"\n min-width=\"36px\"\n variant=\"flat\"\n size=\"small\"\n @click.stop=\"resetFilter\"\n >\n <VIcon icon=\"mdi-filter-remove-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.resetFilter') }}\n </VTooltip>\n </VBtn>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch, withModifiers } from 'vue'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DamAssetType, DamAssetTypeValues } from '@/types/coreDam/Asset'\nimport { damAssetTypeValueToEnum } from '@/types/coreDam/Asset'\nimport { useAssetListActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport AssetSelectListTable from '@/components/dam/assetSelect/components/AssetSelectListTable.vue'\nimport AssetSelectListBar from '@/components/dam/assetSelect/components/AssetSelectListBar.vue'\nimport { AssetSelectGridView, useGridView } from '@/components/dam/assetSelect/composables/assetSelectGridView'\nimport AssetSelectListTiles from '@/components/dam/assetSelect/components/AssetSelectListTiles.vue'\nimport { useSidebar } from '@/components/dam/assetSelect/composables/assetSelectFilterSidebar'\nimport AssetSelectFilter from '@/components/dam/assetSelect/components/filter/AssetSelectFilter.vue'\nimport { isUndefined } from '@/utils/common'\nimport type {\n AssetSelectReturnData,\n AssetSelectReturnType,\n AssetSelectReturnTypeValues,\n} from '@/types/coreDam/AssetSelect'\nimport { assetSelectReturnTypeValuesToEnum } from '@/types/coreDam/AssetSelect'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: boolean | undefined\n assetType: DamAssetType | DamAssetTypeValues\n minCount: number\n maxCount: number\n assetLicenceId?: number\n returnType?: AssetSelectReturnType | AssetSelectReturnTypeValues\n configName?: string\n }>(),\n {\n modelValue: undefined,\n assetLicenceId: undefined,\n returnType: 'mainFileId',\n configName: 'default',\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n (e: 'onConfirm', data: AssetSelectReturnData): void\n}>()\n\nconst { t } = useI18n()\n\nconst dialogLocal = ref(false)\nconst dialog = computed({\n get() {\n if (isUndefined(props.modelValue)) return dialogLocal.value\n return props.modelValue\n },\n set(newValue: boolean) {\n dialogLocal.value = newValue\n emit('update:modelValue', newValue)\n },\n})\n\nconst { selectedCount, loader, pagination, fetchNextPage, resetAssetList, getSelectedData, initStoreContext } =\n useAssetListActions()\n\nconst { openSidebar, sidebarLeft } = useSidebar()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { defaultLicenceId } = useCommonAdminCoreDamOptions(props.configName)\n\nconst onOpen = () => {\n const licenceId = props.assetLicenceId || defaultLicenceId\n if (isUndefined(licenceId)) {\n throw new Error('LicenceId must be provided. Provide using props or common-admin configuration.')\n }\n\n initStoreContext(\n licenceId,\n damAssetTypeValueToEnum(props.assetType),\n 1 === props.minCount && props.minCount === props.maxCount,\n props.minCount,\n props.maxCount\n )\n resetAssetList()\n openSidebar()\n dialog.value = true\n}\n\nwatch(\n dialog,\n async (newValue, oldValue) => {\n if (newValue === oldValue || !newValue) return\n onOpen()\n },\n { immediate: true }\n)\n\nconst onClose = () => {\n dialog.value = false\n}\n\nconst onConfirm = () => {\n emit('onConfirm', getSelectedData(assetSelectReturnTypeValuesToEnum(props.returnType)))\n onClose()\n}\n\nconst autoloadOnIntersect = (isIntersecting: boolean) => {\n if (isIntersecting && pagination.hasNextPage === true) {\n fetchNextPage()\n }\n}\n\nconst { gridView } = useGridView()\n\nconst componentComputed = computed(() => {\n switch (gridView.value) {\n case AssetSelectGridView.Table:\n return AssetSelectListTable\n default:\n case AssetSelectGridView.Masonry:\n case AssetSelectGridView.Thumbnail:\n return AssetSelectListTiles\n }\n})\n\nconst disabledSubmit = computed(() => {\n return selectedCount.value < props.minCount || selectedCount.value > props.maxCount\n})\n\ndefineExpose({\n open: onOpen,\n})\n</script>\n\n<template>\n <slot\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => onOpen(), ['stop']) }\"\n />\n <VDialog\n :model-value=\"dialog\"\n fullscreen\n class=\"subject-select\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <VCard\n v-if=\"dialog\"\n class=\"subject-select__card\"\n >\n <ADialogToolbar\n class=\"subject-select__toolbar system-border-b\"\n @on-cancel=\"onClose\"\n >\n <slot name=\"title\">\n {{ t('common.assetSelect.meta.texts.title') }}\n </slot>\n </ADialogToolbar>\n <AssetSelectListBar />\n <div\n class=\"subject-select__main\"\n :class=\"{ 'subject-select__main--sidebar-active': sidebarLeft }\"\n >\n <div class=\"subject-select__sidebar system-border-r\">\n <AssetSelectFilter />\n </div>\n <div class=\"subject-select__content\">\n <component :is=\"componentComputed\" />\n <div class=\"d-flex w-100 align-center justify-center pa-4\">\n <ABtnSecondary\n v-show=\"pagination.hasNextPage || loader\"\n v-intersect=\"autoloadOnIntersect\"\n :loading=\"loader\"\n size=\"small\"\n @click=\"fetchNextPage\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.loadMore') }}\n </slot>\n </ABtnSecondary>\n </div>\n </div>\n </div>\n <div class=\"subject-select__actions system-border-t\">\n <div v-if=\"props.minCount === props.maxCount\">\n {{ t('common.assetSelect.meta.texts.pickExactCount', { count: props.minCount, selected: selectedCount }) }}\n </div>\n <div v-else>\n {{\n t('common.assetSelect.meta.texts.pickRangeCount', {\n minCount: props.minCount,\n maxCount: props.maxCount,\n selected: selectedCount,\n })\n }}\n </div>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"disabledSubmit\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.confirm') }}\n </slot>\n </ABtnPrimary>\n </div>\n </VCard>\n </VDialog>\n</template>\n","/**!\n * Sortable 1.15.1\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.1\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Returns the content rect of the element (bounding rect minus border and padding)\r\n * @param {HTMLElement} el \r\n */\nfunction getContentRect(el) {\n var rect = getRect(el);\n var paddingLeft = parseInt(css(el, 'padding-left')),\n paddingTop = parseInt(css(el, 'padding-top')),\n paddingRight = parseInt(css(el, 'padding-right')),\n paddingBottom = parseInt(css(el, 'padding-bottom'));\n rect.top += paddingTop + parseInt(css(el, 'border-top-width'));\n rect.left += paddingLeft + parseInt(css(el, 'border-left-width'));\n // Client Width/Height includes padding only\n rect.width = el.clientWidth - paddingLeft - paddingRight;\n rect.height = el.clientHeight - paddingTop - paddingBottom;\n rect.bottom = rect.top + rect.height;\n rect.right = rect.left + rect.width;\n return rect;\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = parent.parentNode);\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var sortableContentRect = getContentRect(sortable.el);\n var spacer = 10;\n return vertical ? evt.clientX < sortableContentRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < sortableContentRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var sortableContentRect = getContentRect(sortable.el);\n var spacer = 10;\n return vertical ? evt.clientX > sortableContentRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > sortableContentRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","import { tryOnMounted, tryOnScopeDispose, toValue, unrefElement, defaultDocument } from '@vueuse/core';\nimport Sortable from 'sortablejs';\nimport { isRef, nextTick } from 'vue-demi';\n\nfunction useSortable(el, list, options = {}) {\n let sortable;\n const { document = defaultDocument, ...resetOptions } = options;\n const defaultOptions = {\n onUpdate: (e) => {\n moveArrayElement(list, e.oldIndex, e.newIndex);\n }\n };\n const start = () => {\n const target = typeof el === \"string\" ? document == null ? void 0 : document.querySelector(el) : unrefElement(el);\n if (!target || sortable !== void 0)\n return;\n sortable = new Sortable(target, { ...defaultOptions, ...resetOptions });\n };\n const stop = () => {\n sortable == null ? void 0 : sortable.destroy();\n sortable = void 0;\n };\n const option = (name, value) => {\n if (value !== void 0)\n sortable == null ? void 0 : sortable.option(name, value);\n else\n return sortable == null ? void 0 : sortable.option(name);\n };\n tryOnMounted(start);\n tryOnScopeDispose(stop);\n return { stop, start, option };\n}\nfunction moveArrayElement(list, from, to) {\n const _valueIsRef = isRef(list);\n const array = _valueIsRef ? [...toValue(list)] : toValue(list);\n if (to >= 0 && to < array.length) {\n const element = array.splice(from, 1)[0];\n nextTick(() => {\n array.splice(to, 0, element);\n if (_valueIsRef)\n list.value = array;\n });\n }\n}\n\nexport { moveArrayElement, useSortable };\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || unsafeStringify(b);\n}\n\nexport default v1;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","// @ts-ignore // todo\nimport { v1 as uuidv1, v4 as uuidv4 } from 'uuid'\n\nexport const generateUUIDv1 = () => {\n return uuidv1()\n}\n\nexport const generateUUIDv4 = () => {\n return uuidv4()\n}\n","import { computed, type ComputedRef, nextTick, type Ref, ref } from 'vue'\nimport type { UseSortableReturn } from '@vueuse/integrations/useSortable'\nimport type { SortableItemDataAware, SortableItemNewPositions } from '@/components/sortable/sortableUtils'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport { objectSetValueByPath } from '@/utils/object'\n\nexport const HANDLE_CLASS = 'a-sortable-widget__handle'\nexport const GHOST_CLASS = 'a-sortable-widget__ghost'\nexport const DRAG_CLASS = 'a-sortable-widget__drag'\nexport const CHOSEN_CLASS = 'a-sortable-widget__chosen'\nexport const GROUP_CLASS = 'a-sortable-widget__group'\n\nexport type SortablePropItem<TItem = any> = SortableItemDataAware & TItem\n\nexport interface SortableItem<TItem = any> {\n key: DocId | IntegerId\n index: number\n raw: SortablePropItem<TItem>\n}\n\nexport interface SortableEmit {\n (e: 'update:modelValue', data: SortablePropItem[]): void\n\n (e: 'update:dirty', data: Array<DocId | IntegerId>): void\n\n (e: 'onEnd', data: SortableItemNewPositions): void\n\n (e: 'onAddAfter', data: SortableItem): void\n\n (e: 'onAddLast', data: SortablePropItem | null): void\n\n (e: 'onEdit', data: SortableItem): void\n\n (e: 'onDelete', data: SortableItem): void\n}\n\nexport interface SortableActionsProps {\n dirty: Set<DocId | IntegerId>\n keyField: string\n positionField: string\n updatePosition: boolean\n}\n\nexport function useSortableActions(\n model: Readonly<Ref<SortablePropItem[]>>,\n initSortableCallback: () => void,\n props: SortableActionsProps,\n emit: SortableEmit\n): {\n removeByIndex: (index: number) => SortableItemNewPositions\n updateDataAtIndex: (index: number, data: SortablePropItem, position: number | null, dirty?: boolean | null) => void\n onRemoveDialogConfirm: () => void\n removeById: (id: DocId | IntegerId) => SortableItemNewPositions\n updateData: (id: DocId | IntegerId, data: SortablePropItem, position: number | null, dirty?: boolean | null) => void\n refresh: () => void\n destroy: () => void\n removeDialog: Ref<boolean>\n addAfterId: (targetId: DocId | IntegerId | null, data: SortablePropItem) => SortableItemNewPositions\n forceRerender: Ref<number>\n dirtyLocal: Ref<Set<DocId | IntegerId>>\n widgetEl: Ref<HTMLElement | null>\n itemToRemove: Ref<SortableItem | null>\n sortableInstance: Ref<UseSortableReturn | null>\n randomUuid: Ref<string>\n items: ComputedRef<SortableItem[]>\n moveArrayElement: (from: number, to: number) => SortableItemNewPositions\n addAfterIndex: (targetIndex: number | null, data: SortablePropItem) => SortableItemNewPositions\n} {\n const removeDialog = ref(false)\n const itemToRemove = ref<null | SortableItem>(null)\n const widgetEl = ref<HTMLElement | null>(null)\n const randomUuid = ref<string>(generateUUIDv1())\n const sortableInstance = ref<UseSortableReturn | null>(null)\n const forceRerender = ref(0)\n const dirtyLocal = ref(props.dirty)\n\n function transformItem(item: SortablePropItem, index: number): SortableItem {\n return {\n key: item[props.keyField],\n index,\n raw: item,\n }\n }\n\n const items = computed(() => {\n return model.value.map((item, index) => transformItem(item, index))\n })\n\n const forceRerenderWidgetHtml = (emitData: SortablePropItem[] | undefined = undefined) => {\n forceRerender.value++\n if (!isUndefined(emitData)) {\n emit('update:modelValue', emitData)\n }\n nextTick(() => {\n initSortableCallback()\n })\n }\n\n const touchDirty = (id: DocId | IntegerId) => {\n dirtyLocal.value.add(id)\n }\n\n const untouchDirty = (id: DocId | IntegerId) => {\n dirtyLocal.value.delete(id)\n }\n\n const updatePositions = (\n items: SortablePropItem[],\n oldIndex: number,\n newIndex: number,\n updatedPositions: SortableItemNewPositions = []\n ) => {\n const start = oldIndex > newIndex ? newIndex : oldIndex\n let position = start + 1\n for (let i = start; i < items.length; i++) {\n objectSetValueByPath(items[i], props.positionField, position)\n touchDirty(items[i][props.keyField])\n position++\n updatedPositions.push({\n id: items[i].id,\n position: items[i].position,\n })\n }\n return updatedPositions\n }\n\n const moveArrayElement = (from: number, to: number): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n if (to >= 0 && to < clonedData.length) {\n let returnData: SortableItemNewPositions = []\n const element = clonedData.splice(from, 1)[0]\n clonedData.splice(to, 0, element)\n if (!isUndefined(props.updatePosition)) {\n returnData = updatePositions(clonedData, from, to)\n }\n forceRerenderWidgetHtml()\n emit('update:modelValue', clonedData)\n return returnData\n }\n return []\n }\n\n const findItemIndexById = (id: DocId | IntegerId, items: SortablePropItem[]) => {\n const idx = items.findIndex((item) => item[props.keyField] === id)\n if (idx === -1) return null\n return idx\n }\n\n const updateDataCommon = (\n item: SortablePropItem,\n data: SortablePropItem,\n position: number | null,\n dirty: null | boolean = null\n ) => {\n item.data = cloneDeep(data)\n if (!isNull(position)) item.data.position = position\n if (!isNull(dirty)) touchDirty(data.id)\n }\n\n /**\n * @param id - id of item\n * @param data - item data\n * @param position - item position, use null to skip update and keep original data\n * @param dirty - item dirty, use null to skip update and keep original data\n */\n const updateData = (\n id: DocId | IntegerId,\n data: SortablePropItem,\n position: number | null = null,\n dirty: null | boolean = null\n ) => {\n const clonedData = cloneDeep(model.value)\n const foundIndex = findItemIndexById(id, clonedData)\n if (!isNull(foundIndex) && clonedData[foundIndex]) {\n updateDataCommon(clonedData[foundIndex], data, position, dirty)\n forceRerenderWidgetHtml(clonedData)\n }\n }\n\n const updateDataAtIndex = (\n index: number,\n data: SortablePropItem,\n position: number | null,\n dirty: null | boolean = null\n ) => {\n const clonedData = cloneDeep(model.value)\n if (clonedData[index]) {\n updateDataCommon(clonedData[index], data, position, dirty)\n forceRerenderWidgetHtml(clonedData)\n }\n }\n\n /**\n * @template targetIndex null value is when push as last item\n */\n const addAfterIndex = (targetIndex: number | null, data: SortablePropItem): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n\n if (isNull(targetIndex)) {\n clonedData.push(cloneDeep(data))\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n\n const returnData: SortableItemNewPositions = []\n\n if (clonedData[targetIndex]) {\n clonedData.splice(targetIndex + 1, 0, data)\n updatePositions(clonedData, targetIndex + 1, targetIndex + 1, returnData)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n return []\n }\n\n /**\n * @template targetId null value is when push as last item\n */\n const addAfterId = (targetId: DocId | IntegerId | null, data: SortablePropItem): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n\n if (isNull(targetId)) {\n clonedData.push(cloneDeep(data))\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n\n const foundIndex = findItemIndexById(targetId, clonedData)\n const returnData: SortableItemNewPositions = []\n\n if (!isNull(foundIndex) && clonedData[foundIndex]) {\n clonedData.splice(foundIndex + 1, 0, data)\n updatePositions(clonedData, foundIndex + 1, foundIndex + 1, returnData)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n return []\n }\n\n const removeById = (id: DocId | IntegerId): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n const foundIndex = findItemIndexById(id, clonedData)\n\n const returnData: SortableItemNewPositions = []\n\n if (!isNull(foundIndex) && clonedData[foundIndex]) {\n clonedData.splice(foundIndex, 1)\n updatePositions(clonedData, foundIndex, foundIndex, returnData)\n untouchDirty(id)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n return []\n }\n\n const removeByIndex = (index: number): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n\n const returnData: SortableItemNewPositions = []\n\n if (clonedData[index]) {\n const id = clonedData[index][props.keyField]\n clonedData.splice(index, 1)\n updatePositions(clonedData, index, index, returnData)\n untouchDirty(id)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n return []\n }\n\n const destroy = () => {\n if (!widgetEl.value) return\n if (!sortableInstance.value) return\n sortableInstance.value.stop()\n sortableInstance.value = null\n }\n\n const refresh = () => {\n destroy()\n initSortableCallback()\n }\n\n const onRemoveDialogConfirm = () => {\n if (isNull(itemToRemove.value)) return\n emit('onDelete', itemToRemove.value)\n removeDialog.value = false\n }\n\n return {\n items,\n forceRerender,\n dirtyLocal,\n widgetEl,\n randomUuid,\n removeDialog,\n itemToRemove,\n sortableInstance,\n refresh,\n onRemoveDialogConfirm,\n destroy,\n moveArrayElement,\n addAfterId,\n addAfterIndex,\n removeById,\n removeByIndex,\n updateData,\n updateDataAtIndex,\n }\n}\n","import type { DocId, IntegerId } from '@/types/common'\n\nexport const WIDGET_HTML_ID_PREFIX = 'a-sortable-'\n\nexport interface SortableItemDataAware {\n id?: DocId | IntegerId\n position: number\n}\n\nexport interface SortableItemWithParentDataAware {\n id: DocId | IntegerId\n position: number\n parent: DocId | IntegerId | null // if null, no parent\n}\n\nexport interface SortableItemNewPosition {\n id?: DocId | IntegerId\n position: number\n}\n\nexport type SortableItemNewPositions = Array<SortableItemNewPosition>\n","<script setup lang=\"ts\">\nimport { useSortable } from '@vueuse/integrations/useSortable'\nimport type { SortableEvent } from 'sortablejs'\nimport { computed, nextTick, onBeforeUnmount, toRef, watch, withModifiers } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { SortableEmit, SortableItem, SortablePropItem } from '@/components/sortable/sortableActions'\nimport {\n CHOSEN_CLASS,\n DRAG_CLASS,\n GHOST_CLASS,\n GROUP_CLASS,\n HANDLE_CLASS,\n useSortableActions,\n} from '@/components/sortable/sortableActions'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { cloneDeep, isUndefined } from '@/utils/common'\nimport { WIDGET_HTML_ID_PREFIX } from '@/components/sortable/sortableUtils'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: SortablePropItem[] | any\n dirty?: Set<DocId | IntegerId>\n keyField?: string\n disableDraggable?: boolean\n rootClassName?: string\n widgetIdentifierId?: string | undefined\n disableDefaultSort?: boolean\n updatePosition?: boolean\n positionField?: string\n showAddAfterButton?: boolean\n showAddLastButton?: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n addLastButtonT?: string\n }>(),\n {\n dirty: () => new Set<DocId | IntegerId>(),\n keyField: 'position',\n disableDraggable: false,\n rootClassName: 'a-sortable-widget',\n widgetIdentifierId: undefined,\n disableDefaultSort: false,\n updatePosition: false,\n positionField: 'position',\n showAddAfterButton: false,\n showAddLastButton: false,\n showDeleteButton: false,\n showEditButton: false,\n addLastButtonT: 'common.sortable.addNewAtEnd',\n }\n)\nconst emit = defineEmits<SortableEmit>()\n\nconst model = toRef(() => props.modelValue)\n\nconst { t } = useI18n()\n\nconst onAddAfterClick = (data: SortableItem) => {\n emit('onAddAfter', data)\n}\n\nconst onDeleteClick = (data: SortableItem) => {\n itemToRemove.value = data\n removeDialog.value = true\n}\n\nconst onEditClick = (data: SortableItem) => {\n emit('onEdit', data)\n}\n\nconst onAddLastClick = () => {\n if (props.modelValue.length > 0) {\n emit('onAddLast', cloneDeep(props.modelValue[props.modelValue.length - 1]))\n return\n }\n emit('onAddLast', null)\n}\n\nconst widgetHtmlId = computed(() => {\n return isUndefined(props.widgetIdentifierId) ? WIDGET_HTML_ID_PREFIX + randomUuid.value : props.widgetIdentifierId\n})\n\nconst initSortable = () => {\n if (props.disableDraggable) return\n if (!widgetEl.value) return\n const nestedSortable = widgetEl.value.querySelector<HTMLElement>('.' + GROUP_CLASS)\n if (!nestedSortable) return\n sortableInstance.value = useSortable(nestedSortable, [], {\n handle: '.' + HANDLE_CLASS,\n ghostClass: GHOST_CLASS,\n dragClass: DRAG_CLASS,\n chosenClass: CHOSEN_CLASS,\n onEnd: async (event: SortableEvent) => {\n if (props.disableDefaultSort || isUndefined(event.oldIndex) || isUndefined(event.newIndex)) return\n const needsRefresh = moveArrayElement(event.oldIndex, event.newIndex)\n emit('onEnd', needsRefresh)\n },\n })\n}\n\nconst {\n items,\n forceRerender,\n dirtyLocal,\n moveArrayElement,\n itemToRemove,\n removeDialog,\n destroy,\n refresh,\n onRemoveDialogConfirm,\n sortableInstance,\n widgetEl,\n randomUuid,\n addAfterId,\n removeById,\n updateData,\n addAfterIndex,\n removeByIndex,\n updateDataAtIndex,\n} = useSortableActions(model, initSortable, props, emit)\n\nonBeforeUnmount(() => {\n destroy()\n})\n\nnextTick(() => {\n widgetEl.value = document.querySelector('#' + widgetHtmlId.value)\n initSortable()\n})\n\nwatch(\n () => props.disableDraggable,\n async (newValue) => {\n destroy()\n if (newValue === false) initSortable()\n }\n)\n\nwatch(\n () => props.dirty,\n (newValue) => {\n dirtyLocal.value = newValue\n }\n)\n\ndefineExpose({\n refresh,\n addAfterId,\n addAfterIndex,\n removeById,\n removeByIndex,\n updateData,\n updateDataAtIndex,\n})\n</script>\n\n<template>\n <div>\n <div\n :id=\"widgetHtmlId\"\n :class=\"rootClassName\"\n >\n <div\n :key=\"forceRerender\"\n :class=\"GROUP_CLASS\"\n >\n <div\n v-for=\"item of items\"\n :key=\"item.key\"\n class=\"a-sortable-widget__item\"\n >\n <VIcon\n :class=\"{\n [HANDLE_CLASS]: true,\n [HANDLE_CLASS + '--disabled']: disableDraggable,\n }\"\n icon=\"mdi-drag\"\n />\n <div class=\"a-sortable-widget__content\">\n <slot\n name=\"item\"\n :item=\"item\"\n />\n </div>\n <div class=\"a-sortable-widget__buttons\">\n <VBtn\n v-if=\"showEditButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onEditClick(item)\"\n >\n <VIcon icon=\"mdi-pencil\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n text=\"Edit\"\n />\n </VBtn>\n <VBtn\n v-if=\"showDeleteButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onDeleteClick(item)\"\n >\n <VIcon icon=\"mdi-trash-can-outline\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n text=\"Remove\"\n />\n </VBtn>\n <slot\n name=\"buttons\"\n :item=\"item\"\n />\n <VBtn\n v-if=\"showAddAfterButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n >\n <VIcon icon=\"mdi-dots-vertical\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n text=\"More options\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem\n v-if=\"showAddAfterButton\"\n @click.stop=\"onAddAfterClick(item)\"\n >\n Add new item after\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </div>\n </div>\n </div>\n </div>\n <slot\n name=\"add-last-activator\"\n :props=\"{ onClick: withModifiers(() => onAddLastClick(), ['stop']) }\"\n >\n <VBtn\n v-if=\"showAddLastButton\"\n size=\"small\"\n prepend-icon=\"mdi-plus\"\n class=\"ma-1\"\n @click.stop=\"onAddLastClick\"\n >\n {{ t(addLastButtonT) }}\n </VBtn>\n </slot>\n <VDialog\n v-model=\"removeDialog\"\n :width=\"500\"\n >\n <VCard v-if=\"removeDialog\">\n <ADialogToolbar @on-cancel=\"removeDialog = false\">\n {{ t('common.system.modal.confirmDelete') }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary @click.stop=\"removeDialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary @click.stop=\"onRemoveDialogConfirm\">\n {{ t('common.button.delete') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use 'sass:color';\n\n// todo dark theme colors\n\n$class-name-root: 'a-sortable-widget';\n$bg-color: #fff;\n$border-color: lightgray;\n$border-color-hover: gray;\n$ghost-bg-color: color.scale(#3f6ad8, $lightness: 95%);\n\n.#{$class-name-root} {\n &__item {\n position: relative;\n display: flex;\n align-items: center;\n padding: 6px 0 6px 4px;\n background-color: $bg-color;\n border: 1px solid $border-color;\n border-bottom: none;\n\n &:first-child {\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n }\n\n &:last-child {\n border-bottom-left-radius: 5px;\n border-bottom-right-radius: 5px;\n border-bottom: 1px solid $border-color;\n }\n\n &:hover {\n border-color: $border-color-hover;\n\n .#{$class-name-root}__buttons {\n opacity: 1;\n }\n }\n\n &:hover + & {\n border-top: 1px solid $border-color-hover;\n }\n }\n\n &__content {\n width: 100%;\n }\n\n &__handle {\n cursor: move;\n margin: 6px;\n\n &--disabled {\n opacity: 0;\n cursor: default;\n }\n }\n\n &__ghost {\n background-color: $ghost-bg-color;\n }\n\n &__buttons {\n opacity: 0;\n display: flex;\n }\n}\n</style>\n","import { type InjectionKey, nextTick, type Ref, ref } from 'vue'\nimport type { UseSortableReturn } from '@vueuse/integrations/useSortable'\nimport type { SortableItemNewPositions, SortableItemWithParentDataAware } from '@/components/sortable/sortableUtils'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport type { DocId, IntegerId } from '@/types/common'\n\nexport const NESTED_HANDLE_CLASS = 'a-sortable-nested-widget__handle'\nexport const NESTED_GHOST_CLASS = 'a-sortable-nested-widget__ghost'\nexport const NESTED_DRAG_CLASS = 'a-sortable-nested-widget__drag'\nexport const NESTED_CHOSEN_CLASS = 'a-sortable-nested-widget__chosen'\nexport const NESTED_GROUP_CLASS = 'a-sortable-nested-widget__group'\nexport const SortableLevel: InjectionKey<number> = Symbol.for('anzu:SortableLevel')\n\nexport interface SortableNestedItem<TData extends SortableItemWithParentDataAware = any> {\n data: TData\n children?: Array<SortableNestedItem> | undefined // if undefined, no nested allowed\n meta: {\n dirty: boolean\n }\n}\n\nexport interface SortableNested<TData extends SortableItemWithParentDataAware = any> {\n children: Array<SortableNestedItem<TData>>\n meta: {\n dirty: boolean\n }\n}\n\nexport interface SortableNestedEmit {\n (e: 'update:modelValue', data: SortableNested): void\n\n (e: 'onEnd', data: SortableItemNewPositions): void\n\n (e: 'onAddAfter', data: SortableNestedItem): void\n\n (e: 'onAddChild', data: SortableNestedItem): void\n\n (e: 'onAddLast', data: SortableNestedItem | null): void\n\n (e: 'onEdit', data: SortableNestedItem): void\n\n (e: 'onDelete', data: SortableNestedItem): void\n}\n\nexport function useSortableNestedActions(\n model: Readonly<Ref<SortableNested>>,\n initSortablesCallback: () => void,\n emit: SortableNestedEmit\n): {\n onRemoveDialogConfirm: () => void\n removeById: (id: DocId | IntegerId) => SortableItemNewPositions\n updateData: (\n id: DocId | IntegerId,\n data: any,\n children: Array<SortableNestedItem> | undefined | null,\n position: number | null,\n dirty?: boolean | null,\n parent?: DocId | IntegerId | null | undefined\n ) => void\n refresh: () => void\n destroy: () => void\n removeDialog: Ref<boolean>\n sortableInstances: Ref<Array<UseSortableReturn>>\n addChildToId: (targetId: DocId | IntegerId, data: any, childrenAllowed: boolean) => void\n addAfterId: (targetId: DocId | IntegerId | null, data: any, childrenAllowed: boolean) => SortableItemNewPositions\n forceRerender: Ref<number>\n dragging: Ref<boolean>\n widgetEl: Ref<HTMLElement | null>\n itemToRemove: Ref<SortableNestedItem | null>\n randomUuid: Ref<string>\n moveArrayElement: (\n currentId: DocId | IntegerId,\n targetId: DocId | IntegerId | null,\n newIndex: number,\n oldIndex: number,\n maxDepth: number\n ) => SortableItemNewPositions\n} {\n const { showWarningT } = useAlerts()\n\n const sortableInstances = ref<Array<UseSortableReturn>>([])\n const forceRerender = ref(0)\n const removeDialog = ref(false)\n const itemToRemove = ref<null | SortableNestedItem>(null)\n const dragging = ref(false)\n const widgetEl = ref<HTMLElement | null>(null)\n const randomUuid = ref<string>(generateUUIDv1())\n\n const forceRerenderWidgetHtml = (emitData: SortableNested | undefined = undefined) => {\n forceRerender.value++\n if (!isUndefined(emitData)) {\n emit('update:modelValue', emitData)\n }\n nextTick(() => {\n initSortablesCallback()\n })\n }\n\n const refresh = () => {\n destroy()\n initSortablesCallback()\n }\n\n const onRemoveDialogConfirm = () => {\n if (isNull(itemToRemove.value)) return\n emit('onDelete', itemToRemove.value)\n removeDialog.value = false\n }\n\n const destroy = () => {\n if (!widgetEl.value) return\n sortableInstances.value.forEach((item) => {\n item.stop()\n })\n sortableInstances.value = []\n }\n\n const touchDirty = (item: SortableNestedItem, nestedData: SortableNested) => {\n item.meta.dirty = true\n nestedData.meta.dirty = true\n }\n\n const updatePositionsSameParent = (\n items: SortableNestedItem[],\n oldIndex: number,\n newIndex: number,\n clonedData: SortableNested,\n updatedPositions: SortableItemNewPositions = []\n ) => {\n const start = oldIndex > newIndex ? newIndex : oldIndex\n let position = start + 1\n for (let i = start; i < items.length; i++) {\n if (items[i].data.position !== position) {\n items[i].data.position = position\n touchDirty(items[i], clonedData)\n updatedPositions.push({\n id: items[i].data.id,\n position: items[i].data.position,\n })\n }\n position++\n }\n }\n const updatePositionsDifferentParent = (\n itemsTarget: SortableNestedItem[],\n itemsSource: SortableNestedItem[],\n indexTarget: number,\n indexSource: number,\n clonedData: SortableNested,\n updatedPositions: SortableItemNewPositions = []\n ) => {\n if (itemsTarget.length > 0) {\n let position = indexTarget + 1\n for (let i = indexTarget; i < itemsTarget.length; i++) {\n if (itemsTarget[i].data.position !== position) {\n itemsTarget[i].data.position = position\n touchDirty(itemsTarget[i], clonedData)\n updatedPositions.push({\n id: itemsTarget[i].data.id,\n position: itemsTarget[i].data.position,\n })\n }\n position++\n }\n }\n if (itemsSource.length > 0) {\n let position = indexSource + 1\n for (let i = indexSource; i < itemsSource.length; i++) {\n if (itemsSource[i].data.position !== position) {\n itemsSource[i].data.position = position\n touchDirty(itemsSource[i], clonedData)\n updatedPositions.push({\n id: itemsSource[i].data.id,\n position: itemsSource[i].data.position,\n })\n }\n position++\n }\n }\n }\n\n const calculateParentDepth = (\n parent: DocId | IntegerId | null,\n items: Array<SortableNestedItem>,\n depth: number = 0\n ): number => {\n if (parent === null) return depth\n const parentItem = items.find((item) => item.data.id === parent)\n if (!parentItem) return depth\n depth++\n return calculateParentDepth(parentItem.data.parent, items, depth)\n }\n\n const calculateChildDepth = (children: Array<SortableNestedItem> | undefined, depth: number = 0): number => {\n let childDepth = depth\n if (children && children.length) {\n depth++\n for (const child of children) {\n const currentDepth = calculateChildDepth(child.children, depth)\n childDepth = Math.max(childDepth, currentDepth)\n }\n }\n return childDepth\n }\n\n /**\n * @return number - Max depth of array, root = 1\n */\n const calculateNodeMaxDepth = (\n item: SortableNestedItem,\n items: Array<SortableNestedItem>,\n depth: number = 1\n ): number => {\n const parentDepth = calculateParentDepth(item.data.parent, items)\n const childDepth = calculateChildDepth(item.children, depth)\n return parentDepth + childDepth\n }\n\n const findItemById = (\n id: DocId | IntegerId,\n arr: SortableNestedItem[],\n parent: SortableNestedItem | null = null\n ): { itemFound: SortableNestedItem | null; parentItem: SortableNestedItem | null } => {\n for (const item of arr) {\n if (item.data.id === id) {\n return {\n itemFound: item,\n parentItem: parent,\n }\n }\n if (item.children) {\n const foundInChildren = findItemById(id, item.children, item)\n if (foundInChildren.itemFound !== null) {\n return foundInChildren\n }\n }\n }\n\n return {\n itemFound: null,\n parentItem: null,\n }\n }\n\n // todo refactor\n const moveArrayElement = (\n currentId: DocId | IntegerId,\n targetId: DocId | IntegerId | null,\n newIndex: number,\n oldIndex: number,\n maxDepth: number\n ): SortableItemNewPositions => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const { itemFound: itemToMove, parentItem: itemToMoveParentItem } = findItemById(currentId, clonedData.children)\n\n if (!itemToMove) {\n console.error('ASortableNested error.')\n return []\n }\n\n const returnData: SortableItemNewPositions = []\n\n // moving to root\n if (targetId === null) {\n if (isNull(itemToMoveParentItem) && newIndex === oldIndex) {\n // moving item from root to root, but same place, skip\n return []\n }\n if (isNull(itemToMoveParentItem)) {\n // moving item from root to root\n const idx = clonedData.children.indexOf(itemToMove)\n if (idx !== -1) {\n const element = clonedData.children.splice(idx, 1)[0]\n clonedData.children.splice(newIndex, 0, element)\n updatePositionsSameParent(clonedData.children, idx, newIndex, clonedData, returnData)\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n console.error('ASortableNested error.')\n return []\n }\n if (!isNull(itemToMoveParentItem) && itemToMoveParentItem.children) {\n // moving from non-root to root\n const idx = itemToMoveParentItem.children.indexOf(itemToMove)\n if (idx !== -1) {\n itemToMove.data.parent = null\n const element = itemToMoveParentItem.children.splice(idx, 1)[0]\n clonedData.children.splice(newIndex, 0, element)\n updatePositionsDifferentParent(\n clonedData.children,\n itemToMoveParentItem.children,\n newIndex,\n idx,\n clonedData,\n returnData\n )\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n console.error('ASortableNested error.')\n return []\n }\n console.error('ASortableNested error.')\n return []\n }\n // moving to specific array element\n const { itemFound: targetItem } = findItemById(targetId, clonedData.children)\n\n if (!targetItem || !targetItem.children) {\n // moving item to undefined children is not allowed by this implementation but allowed by sortablejs\n // so rerender is needed\n forceRerenderWidgetHtml()\n return []\n }\n\n if (!isNull(itemToMoveParentItem) && itemToMoveParentItem.data.id === targetItem.data.id && newIndex === oldIndex) {\n // moving item from/to same parent and same position, skip\n return []\n }\n\n if (itemToMoveParentItem && itemToMoveParentItem.children && targetItem.data.id === itemToMoveParentItem.data.id) {\n // moving item inside same parent\n const idx = itemToMoveParentItem.children.indexOf(itemToMove)\n if (idx !== -1) {\n const element = itemToMoveParentItem.children.splice(idx, 1)[0]\n targetItem.children.splice(newIndex, 0, element)\n updatePositionsSameParent(targetItem.children, idx, newIndex, clonedData, returnData)\n }\n } else if (\n itemToMoveParentItem &&\n itemToMoveParentItem.children &&\n targetItem.data.id !== itemToMoveParentItem.data.id\n ) {\n // moving item between two different parents\n const idx = itemToMoveParentItem.children.indexOf(itemToMove)\n if (idx !== -1) {\n itemToMove.data.parent = targetItem.data.id\n const element = itemToMoveParentItem.children.splice(idx, 1)[0]\n targetItem.children.splice(newIndex, 0, element)\n updatePositionsDifferentParent(\n targetItem.children,\n itemToMoveParentItem.children,\n newIndex,\n idx,\n clonedData,\n returnData\n )\n }\n } else {\n // moving from root to non-root\n const idx = clonedData.children.indexOf(itemToMove)\n if (idx !== -1) {\n itemToMove.data.parent = targetItem.data.id\n const element = clonedData.children.splice(idx, 1)[0]\n targetItem.children.splice(newIndex, 0, element)\n updatePositionsDifferentParent(targetItem.children, clonedData.children, newIndex, idx, clonedData, returnData)\n }\n }\n\n if (calculateNodeMaxDepth(targetItem, clonedData.children) > maxDepth) {\n showWarningT('common.sortable.error.maxDeepExceed')\n forceRerenderWidgetHtml()\n return []\n }\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n const removeById = (id: DocId | IntegerId): SortableItemNewPositions => {\n const clonedData: SortableNested = cloneDeep(model.value)\n const { itemFound, parentItem } = findItemById(id, clonedData.children)\n if (!itemFound) {\n return []\n }\n\n const returnData: SortableItemNewPositions = []\n\n if (parentItem && parentItem.children) {\n const idx = parentItem.children.indexOf(itemFound)\n if (idx !== -1) {\n parentItem.children.splice(idx, 1)\n updatePositionsSameParent(parentItem.children, idx, idx, clonedData, returnData)\n }\n } else {\n const idx = clonedData.children.indexOf(itemFound)\n if (idx !== -1) {\n clonedData.children.splice(idx, 1)\n updatePositionsSameParent(clonedData.children, idx, idx, clonedData, returnData)\n }\n }\n\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n /**\n * @param id - id of item\n * @param data - item data\n * @param children - item children, use null to skip update and keep original data\n * @param position - item position, use null to skip update and keep original data\n * @param dirty - item dirty, use null to skip update and keep original data\n * @param parent - item parent id, use undefined to skip update and keep original data\n */\n const updateData = (\n id: DocId | IntegerId,\n data: any,\n children: Array<SortableNestedItem> | undefined | null = null,\n position: number | null = null,\n dirty: null | boolean = null,\n parent: DocId | IntegerId | null | undefined = undefined\n ) => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const { itemFound } = findItemById(id, clonedData.children)\n if (!itemFound) {\n return\n }\n itemFound.data = cloneDeep(data)\n if (!isNull(children)) itemFound.children = children\n if (!isNull(position)) itemFound.data.position = position\n if (!isNull(dirty)) itemFound.meta.dirty = dirty\n if (!isNull(dirty) && dirty === true) clonedData.meta.dirty = true\n if (!isUndefined(parent)) itemFound.data.parent = parent\n forceRerenderWidgetHtml(clonedData)\n }\n\n /**\n * @template targetId null value is when push as last item\n */\n const addAfterId = (\n targetId: DocId | IntegerId | null,\n data: any,\n childrenAllowed: boolean\n ): SortableItemNewPositions => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const insertData: SortableNestedItem = {\n data: cloneDeep(data),\n children: childrenAllowed ? [] : undefined,\n meta: {\n dirty: false,\n },\n }\n\n if (isNull(targetId)) {\n clonedData.children.push(insertData)\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n\n const { itemFound: targetItem, parentItem: targetItemParentItem } = findItemById(targetId, clonedData.children)\n\n if (!targetItem) {\n showWarningT('common.sortable.error.unableToAdd')\n return []\n }\n insertData.data.position = targetItem.data.position + 1\n insertData.data.parent = targetItem.data.parent\n\n const returnData: SortableItemNewPositions = []\n\n if (!isNull(targetItemParentItem) && targetItemParentItem.children) {\n const idx = targetItemParentItem.children.indexOf(targetItem) + 1\n if (idx !== -1) {\n targetItemParentItem.children.splice(idx, 0, insertData)\n updatePositionsSameParent(targetItemParentItem.children, idx, idx, clonedData, returnData)\n }\n } else {\n // insert to root\n const idx = clonedData.children.indexOf(targetItem) + 1\n if (idx !== -1) {\n clonedData.children.splice(idx, 0, insertData)\n updatePositionsSameParent(clonedData.children, idx, idx, clonedData, returnData)\n }\n }\n\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n const addChildToId = (targetId: DocId | IntegerId, data: any, childrenAllowed: boolean) => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const { itemFound: targetItem } = findItemById(targetId, clonedData.children)\n\n if (!targetItem) {\n showWarningT('common.sortable.error.unableToAdd')\n return\n }\n const insertData: SortableNestedItem = {\n data: cloneDeep(data),\n children: childrenAllowed ? [] : undefined,\n meta: {\n dirty: false,\n },\n }\n insertData.data.id = data.id\n insertData.data.position =\n targetItem.children && targetItem.children.length > 0 ? targetItem.children.length + 1 : 1\n insertData.data.parent = targetItem.data.id\n\n if (!isUndefined(targetItem.children) && targetItem.children.length === 0) {\n targetItem.children.push(insertData)\n forceRerenderWidgetHtml(clonedData)\n }\n }\n\n return {\n dragging,\n widgetEl,\n randomUuid,\n removeDialog,\n itemToRemove,\n sortableInstances,\n forceRerender,\n refresh,\n onRemoveDialogConfirm,\n destroy,\n moveArrayElement,\n addAfterId,\n addChildToId,\n removeById,\n updateData,\n }\n}\n","<script setup lang=\"ts\">\nimport { inject, provide } from 'vue'\nimport { computed } from 'vue'\nimport type { SortableNestedItem } from '@/components/sortable/sortableNestedActions'\nimport { cloneDeep, isUndefined } from '@/utils/common'\nimport { NESTED_HANDLE_CLASS, SortableLevel } from '@/components/sortable/sortableNestedActions'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n item: SortableNestedItem | any\n disableDraggable: boolean\n maxDepth: number\n showAddAfterButton: boolean\n showAddChildButton: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n }>(),\n {}\n)\nconst emit = defineEmits<{\n (e: 'onAddAfter', item: SortableNestedItem): void\n (e: 'onAddChild', item: SortableNestedItem): void\n (e: 'onDelete', item: SortableNestedItem): void\n (e: 'onEdit', item: SortableNestedItem): void\n}>()\n\nconst onDeleteClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onDelete', item)\n return\n }\n emit('onDelete', cloneDeep(props.item))\n}\n\nconst onEditClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onEdit', item)\n return\n }\n emit('onEdit', cloneDeep(props.item))\n}\n\nconst onAddAfterClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onAddAfter', item)\n return\n }\n emit('onAddAfter', cloneDeep(props.item))\n}\n\nconst onAddChildClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onAddChild', item)\n return\n }\n emit('onAddChild', cloneDeep(props.item))\n}\n\nconst level = inject<number>(SortableLevel, 1)\nprovide<number>(SortableLevel, level + 1)\n\nconst showAddChildButtonComputed = computed(() => {\n return (\n props.showAddChildButton &&\n !isUndefined(props.item.children) &&\n props.item.children.length === 0 &&\n level < props.maxDepth\n )\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n class=\"a-sortable-nested-widget__container\"\n :class=\"'a-sortable-nested-widget__container--level-' + level\"\n :data-id=\"item.data.id\"\n >\n <div class=\"a-sortable-nested-widget__nested\">\n <div class=\"a-sortable-nested-widget__item\">\n <VIcon\n :class=\"{\n [NESTED_HANDLE_CLASS]: true,\n [NESTED_HANDLE_CLASS + '--disabled']: disableDraggable,\n }\"\n icon=\"mdi-drag\"\n />\n <div class=\"a-sortable-nested-widget__content\">\n <slot\n name=\"item\"\n :item=\"item\"\n />\n </div>\n <div class=\"a-sortable-nested-widget__buttons\">\n <VBtn\n v-if=\"showEditButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onEditClick\"\n >\n <VIcon icon=\"mdi-pencil\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.sortable.edit')\"\n />\n </VBtn>\n <VBtn\n v-if=\"showDeleteButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onDeleteClick\"\n >\n <VIcon icon=\"mdi-trash-can-outline\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.sortable.remove')\"\n />\n </VBtn>\n <slot\n name=\"buttons\"\n :item=\"item\"\n />\n <VBtn\n v-if=\"showAddAfterButton || showAddChildButtonComputed\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n >\n <VIcon icon=\"mdi-dots-vertical\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.sortable.more')\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem\n v-if=\"showAddAfterButton\"\n @click.stop=\"onAddAfterClick\"\n >\n {{ t('common.sortable.addAfter') }}\n </VListItem>\n <VListItem\n v-if=\"showAddChildButtonComputed\"\n @click.stop=\"onAddChildClick\"\n >\n {{ t('common.sortable.addChild') }}\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </div>\n </div>\n <div\n v-if=\"level < maxDepth && !isUndefined(item.children)\"\n class=\"a-sortable-nested-widget__group\"\n :class=\"{ 'a-sortable-nested-widget__group--empty': item.children.length === 0 }\"\n :data-id=\"item.data.id\"\n >\n <ASortableNestedItem\n v-for=\"child of item.children\"\n :key=\"child.data.id\"\n :item=\"child\"\n :disable-draggable=\"disableDraggable\"\n :max-depth=\"maxDepth\"\n :show-add-after-button=\"showAddAfterButton\"\n :show-add-child-button=\"showAddChildButton\"\n :show-delete-button=\"showDeleteButton\"\n :show-edit-button=\"showEditButton\"\n @on-add-after=\"onAddAfterClick\"\n @on-add-child=\"onAddChildClick\"\n @on-delete=\"onDeleteClick\"\n @on-edit=\"onEditClick\"\n >\n <!-- @vue-ignore -->\n <template #item=\"{ item: itemSlot }\">\n <slot\n name=\"item\"\n :item=\"itemSlot as any\"\n />\n </template>\n <!-- @vue-ignore -->\n <template #buttons=\"{ item: buttonSlot }\">\n <slot\n name=\"buttons\"\n :item=\"buttonSlot as any\"\n />\n </template>\n </ASortableNestedItem>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { SortableEvent } from 'sortablejs'\nimport { computed, nextTick, onBeforeUnmount, toRef, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type {\n SortableNested,\n SortableNestedEmit,\n SortableNestedItem,\n} from '@/components/sortable/sortableNestedActions'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport { WIDGET_HTML_ID_PREFIX } from '@/components/sortable/sortableUtils'\nimport {\n NESTED_CHOSEN_CLASS,\n NESTED_DRAG_CLASS,\n NESTED_GHOST_CLASS,\n NESTED_GROUP_CLASS,\n NESTED_HANDLE_CLASS,\n useSortableNestedActions,\n} from '@/components/sortable/sortableNestedActions'\nimport { useSortable } from '@vueuse/integrations/useSortable'\nimport { stringToInt } from '@/utils/string'\nimport ASortableNestedItem from '@/components/sortable/ASortableNestedItem.vue'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: SortableNested\n maxDepth: number\n disableDraggable?: boolean\n rootClassName?: string\n widgetIdentifierId?: string | undefined\n disableDefaultSort?: boolean\n showAddAfterButton?: boolean\n showAddLastButton?: boolean\n showAddChildButton?: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n }>(),\n {\n disableDraggable: false,\n rootClassName: 'a-sortable-nested-widget',\n widgetIdentifierId: undefined,\n disableDefaultSort: false,\n showAddAfterButton: false,\n showAddLastButton: false,\n showAddChildButton: false,\n showDeleteButton: false,\n showEditButton: false,\n }\n)\nconst emit = defineEmits<SortableNestedEmit>()\n\nconst model = toRef(() => props.modelValue)\n\nconst onAddAfterClick = (data: SortableNestedItem) => {\n emit('onAddAfter', data)\n}\n\nconst onAddChildClick = (data: SortableNestedItem) => {\n emit('onAddChild', data)\n}\n\nconst onDeleteClick = (data: SortableNestedItem) => {\n itemToRemove.value = data\n removeDialog.value = true\n}\n\nconst onEditClick = (data: SortableNestedItem) => {\n emit('onEdit', data)\n}\n\nconst onAddLastClick = () => {\n if (props.modelValue.children.length > 0) {\n emit('onAddLast', cloneDeep(props.modelValue.children[props.modelValue.children.length - 1]))\n return\n }\n emit('onAddLast', null)\n}\n\nconst { t } = useI18n()\n\nconst widgetHtmlId = computed(() => {\n return isUndefined(props.widgetIdentifierId) ? WIDGET_HTML_ID_PREFIX + randomUuid.value : props.widgetIdentifierId\n})\n\nconst widgetClass = computed(() => {\n return props.rootClassName + ' ' + (dragging.value ? props.rootClassName + '--dragging' : '')\n})\n\nconst initSortables = () => {\n if (props.disableDraggable) return\n if (!widgetEl.value) return\n const nestedSortables = Array.from(widgetEl.value.querySelectorAll<HTMLElement>('.' + NESTED_GROUP_CLASS))\n sortableInstances.value = []\n for (let i = 0; i < nestedSortables.length; i++) {\n sortableInstances.value[i] = useSortable(nestedSortables[i], [], {\n group: {\n name: 'nested',\n pull: true,\n put: true,\n },\n handle: '.' + NESTED_HANDLE_CLASS,\n ghostClass: NESTED_GHOST_CLASS,\n dragClass: NESTED_DRAG_CLASS,\n chosenClass: NESTED_CHOSEN_CLASS,\n fallbackOnBody: true,\n swapThreshold: 0.65,\n forceFallback: true,\n fallbackTolerance: 3,\n onUpdate: () => {},\n onStart: () => {\n dragging.value = true\n },\n onEnd: (event: SortableEvent) => {\n dragging.value = false\n nextTick(() => {\n const id = stringToInt(event.item.getAttribute('data-id') ?? '0')\n if (id < 1) return\n const newIndex = event.newIndex\n if (isUndefined(newIndex)) return\n const oldIndex = event.oldIndex\n if (isUndefined(oldIndex)) return\n let parentId: number | null = null\n const parentEl = event.item.parentElement\n if (!isNull(parentEl)) {\n parentId = stringToInt(parentEl.getAttribute('data-id') ?? '0')\n if (parentId === 0) parentId = null\n }\n const needsRefresh = moveArrayElement(id, parentId, newIndex, oldIndex, props.maxDepth)\n emit('onEnd', needsRefresh)\n })\n },\n })\n }\n}\n\nconst {\n dragging,\n widgetEl,\n randomUuid,\n removeDialog,\n itemToRemove,\n forceRerender,\n moveArrayElement,\n addAfterId,\n addChildToId,\n removeById,\n updateData,\n destroy,\n refresh,\n onRemoveDialogConfirm,\n sortableInstances,\n} = useSortableNestedActions(model, initSortables, emit)\n\nonBeforeUnmount(() => {\n destroy()\n})\n\nnextTick(() => {\n widgetEl.value = document.querySelector('#' + widgetHtmlId.value)\n initSortables()\n})\n\nwatch(\n () => props.disableDraggable,\n async (newValue) => {\n destroy()\n if (newValue === false) initSortables()\n }\n)\n\ndefineExpose({\n refresh,\n addAfterId,\n addChildToId,\n removeById,\n updateData,\n})\n</script>\n\n<template>\n <div>\n <div\n :id=\"widgetHtmlId\"\n :class=\"widgetClass\"\n >\n <div\n :key=\"forceRerender\"\n :class=\"NESTED_GROUP_CLASS\"\n >\n <ASortableNestedItem\n v-for=\"item of modelValue.children\"\n :key=\"item.data.id\"\n :item=\"item\"\n :disable-draggable=\"disableDraggable\"\n :max-depth=\"maxDepth\"\n :show-add-after-button=\"showAddAfterButton\"\n :show-add-child-button=\"showAddChildButton\"\n :show-delete-button=\"showDeleteButton\"\n :show-edit-button=\"showEditButton\"\n @on-add-after=\"onAddAfterClick\"\n @on-add-child=\"onAddChildClick\"\n @on-delete=\"onDeleteClick\"\n @on-edit=\"onEditClick\"\n >\n <template #item=\"{ item: itemSlot }\">\n <slot\n name=\"item\"\n :item=\"itemSlot\"\n />\n </template>\n <template #buttons=\"{ item: buttonsSlot }\">\n <slot\n name=\"buttons\"\n :item=\"buttonsSlot\"\n />\n </template>\n </ASortableNestedItem>\n </div>\n </div>\n <VBtn\n v-if=\"showAddLastButton\"\n size=\"small\"\n prepend-icon=\"mdi-plus\"\n @click.stop=\"onAddLastClick\"\n >\n {{ t('common.sortable.addNewAtEnd') }}\n </VBtn>\n <VDialog\n v-model=\"removeDialog\"\n :width=\"500\"\n >\n <VCard v-if=\"removeDialog\">\n <ADialogToolbar @on-cancel=\"removeDialog = false\">\n {{ t('common.system.modal.confirmDelete') }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary @click.stop=\"removeDialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary @click.stop=\"onRemoveDialogConfirm\">\n {{ t('common.button.delete') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use 'sass:color';\n\n// todo dark theme colors\n\n$class-name-root: 'a-sortable-nested-widget';\n$bg-color: #fff;\n$border-color: lightgray;\n$border-color-hover: gray;\n$ghost-bg-color: color.scale(#3f6ad8, $lightness: 95%);\n$item-space: 10px;\n$ident: 40px;\n\n.#{$class-name-root} {\n &__container {\n position: relative;\n background-color: $bg-color;\n margin-left: ($ident + $item-space);\n\n &::before {\n content: '';\n position: absolute;\n top: -($item-space);\n left: -($ident);\n border-left: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n width: $ident;\n height: ($ident + $item-space);\n }\n\n &::after {\n position: absolute;\n content: '';\n top: ($ident - 1px);\n left: -($ident);\n border-left: 1px solid $border-color;\n border-top: 1px solid $border-color;\n width: $ident;\n height: 100%;\n }\n\n &:last-child::after {\n display: none;\n }\n\n &--level-2 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -4%);\n }\n }\n\n &--level-3 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -8%);\n }\n }\n\n &--level-4 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -12%);\n }\n }\n\n &--level-5 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -16%);\n }\n }\n }\n\n > .#{$class-name-root}__group > .#{$class-name-root}__container:first-child:before {\n border-bottom: none;\n }\n\n &__item {\n width: 100%;\n display: flex;\n border: 1px solid $border-color;\n align-items: center;\n justify-content: space-between;\n padding: 6px 10px;\n border-radius: 5px;\n margin-bottom: 10px;\n\n &:hover {\n border-color: $border-color-hover;\n\n .#{$class-name-root}__buttons {\n opacity: 1;\n }\n }\n\n &:hover + div {\n div {\n border-color: $border-color-hover;\n\n &::after,\n &::before {\n border-color: $border-color-hover;\n }\n }\n }\n }\n\n &__content {\n width: 100%;\n }\n\n &__nested {\n width: 100%;\n }\n\n &__handle {\n cursor: move;\n margin-right: 6px;\n\n &--disabled {\n opacity: 0;\n cursor: default;\n }\n }\n\n &__ghost {\n .#{$class-name-root}__item {\n background-color: $ghost-bg-color !important;\n }\n }\n\n &__buttons {\n opacity: 0;\n display: flex;\n }\n\n &--dragging {\n .#{$class-name-root}__group--empty {\n padding-bottom: 20px;\n }\n }\n\n &__chosen {\n .#{$class-name-root}__container {\n margin-left: 0;\n }\n }\n\n &__drag {\n &::before,\n &::after {\n opacity: 0;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TItem\">\nimport { computed, ref, toRaw, withModifiers } from 'vue'\nimport { isNull, isUndefined } from '@/utils/common'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport type { Pagination } from '@/types/Pagination'\nimport ADatatablePagination from '@/components/ADatatablePagination.vue'\nimport type { Fn } from '@vueuse/core'\n\nconst props = withDefaults(\n defineProps<{\n selectedItems: Array<TItem>\n pagination: Pagination\n submitFilter: Fn\n resetFilter: Fn\n loading?: boolean\n minCount?: number\n maxCount?: number\n modelValue?: boolean | undefined // dialog\n dialogTitleT?: string\n paginationMode?: 'standard' | 'more'\n }>(),\n {\n loading: false,\n minCount: 1,\n maxCount: 1,\n modelValue: undefined,\n dialogTitleT: 'common.subjectSelect.texts.title',\n paginationMode: 'standard',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n (e: 'update:pagination', data: Pagination): void\n (e: 'onOpen'): void\n (e: 'onPageChange'): void\n (e: 'onConfirm', data: Array<TItem>): void\n (e: 'onFetchNextPage'): void\n}>()\n\nconst dialogLocal = ref(false)\nconst dialog = computed({\n get() {\n if (isUndefined(props.modelValue)) return dialogLocal.value\n return props.modelValue\n },\n set(newValue: boolean) {\n dialogLocal.value = newValue\n emit('update:modelValue', newValue)\n },\n})\n\nconst paginationComputed = computed({\n get: () => props.pagination,\n set: (newValue) => {\n emit('update:pagination', { ...toRaw(newValue) })\n },\n})\n\nconst sidebarLeft = ref(true)\nconst filterTouched = ref(false)\n\nconst { t } = useI18n()\n\nconst selectedItemsCount = computed(() => {\n return props.selectedItems.length\n})\n\nconst disabledSubmit = computed(() => {\n return selectedItemsCount.value < props.minCount || selectedItemsCount.value > props.maxCount\n})\n\nconst onOpen = () => {\n emit('onOpen')\n sidebarLeft.value = true\n dialog.value = true\n}\n\nconst toggleSidebar = () => {\n sidebarLeft.value = !sidebarLeft.value\n}\n\nconst onClose = () => {\n dialog.value = false\n}\n\nconst onConfirm = () => {\n emit(\n 'onConfirm',\n props.selectedItems.map((item) => toRaw(item))\n )\n onClose()\n}\n\nconst fetchNextPage = () => {\n emit('onFetchNextPage')\n}\n\nconst onPageChange = () => {\n emit('onPageChange')\n}\n\nconst lastPage = computed(() => {\n return Math.ceil(paginationComputed.value.totalCount / paginationComputed.value.rowsPerPage)\n})\n\nconst hasNextPage = computed(() => {\n return !(\n (isNull(paginationComputed.value.hasNextPage) && paginationComputed.value.page === lastPage.value) ||\n paginationComputed.value.hasNextPage === false\n )\n})\n\nconst autoloadOnIntersect = (isIntersecting: boolean) => {\n if (isIntersecting && hasNextPage.value && !props.loading) {\n fetchNextPage()\n }\n}\n\ndefineExpose({\n open: onOpen,\n})\n</script>\n\n<template>\n <slot\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => onOpen(), ['stop']) }\"\n />\n <VDialog\n v-bind=\"$attrs\"\n :model-value=\"dialog\"\n fullscreen\n class=\"subject-select\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <VCard\n v-if=\"dialog\"\n class=\"subject-select__card\"\n >\n <ADialogToolbar\n class=\"subject-select__toolbar system-border-b\"\n @on-cancel=\"onClose\"\n >\n <slot name=\"title\">\n {{ t(dialogTitleT) }}\n </slot>\n </ADialogToolbar>\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n :height=\"46\"\n elevation=\"0\"\n class=\"system-border-b subject-select__second-bar\"\n >\n <slot name=\"second-bar\">\n <div class=\"d-flex flex-column w-100 px-1 align-center\">\n <div class=\"d-flex justify-space-between w-100 align-center\">\n <div class=\"d-flex align-center\">\n <VBtn\n icon\n :width=\"30\"\n :height=\"30\"\n @click=\"toggleSidebar\"\n >\n <VIcon\n icon=\"mdi-tune\"\n :size=\"16\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.subjectSelect.filter.toggle') }}\n </VTooltip>\n </VBtn>\n <slot name=\"second-bar-left\" />\n </div>\n <div class=\"d-flex align-center\">\n <slot name=\"second-bar-right\" />\n </div>\n </div>\n </div>\n </slot>\n </VToolbar>\n <div\n class=\"subject-select__main\"\n :class=\"{ 'subject-select__main--sidebar-active': sidebarLeft }\"\n >\n <div class=\"subject-select__sidebar system-border-r\">\n <div class=\"subject-select-filter\">\n <div class=\"subject-select-filter__content\">\n <VForm\n name=\"search2\"\n class=\"px-2 pt-4\"\n @submit.prevent=\"submitFilter\"\n >\n <slot name=\"filter\" />\n </VForm>\n </div>\n <div class=\"subject-select-filter__actions\">\n <VBtn\n color=\"primary\"\n class=\"mx-2\"\n :variant=\"filterTouched ? 'flat' : 'text'\"\n size=\"small\"\n @click.stop=\"submitFilter\"\n >\n {{ t('common.button.submitFilter') }}\n </VBtn>\n <VBtn\n class=\"px-2\"\n color=\"light\"\n min-width=\"36px\"\n variant=\"flat\"\n size=\"small\"\n @click.stop=\"resetFilter\"\n >\n <VIcon icon=\"mdi-filter-remove-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.resetFilter') }}\n </VTooltip>\n </VBtn>\n </div>\n </div>\n </div>\n <div class=\"subject-select__content\">\n <slot name=\"content\" />\n <div\n v-if=\"paginationMode === 'more'\"\n class=\"d-flex w-100 align-center justify-center pa-4\"\n >\n <ABtnSecondary\n v-show=\"hasNextPage || loading\"\n v-intersect.quiet=\"autoloadOnIntersect\"\n :loading=\"loading\"\n size=\"small\"\n @click=\"fetchNextPage\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.loadMore') }}\n </slot>\n </ABtnSecondary>\n </div>\n <ADatatablePagination\n v-else\n v-model=\"paginationComputed\"\n @change=\"onPageChange\"\n />\n </div>\n </div>\n <div class=\"subject-select__actions system-border-t\">\n <div v-if=\"props.minCount === props.maxCount\">\n {{ t('common.subjectSelect.texts.pickExactCount', { count: props.minCount, selected: selectedItemsCount }) }}\n </div>\n <div v-else>\n {{\n t('common.subjectSelect.texts.pickRangeCount', {\n minCount: props.minCount,\n maxCount: props.maxCount,\n selected: selectedItemsCount,\n })\n }}\n </div>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"disabledSubmit\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.confirm') }}\n </slot>\n </ABtnPrimary>\n </div>\n </VCard>\n </VDialog>\n</template>\n","import { ref } from 'vue'\n\nconst showAll = ref(false)\n\nexport function useCustomDataForm() {\n const toggleForm = () => {\n showAll.value = !showAll.value\n }\n\n return {\n showAll,\n toggleForm,\n }\n}\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport const CustomDataFormElementType = {\n String: 'string',\n Integer: 'integer',\n StringArray: 'string_array',\n Boolean: 'boolean',\n} as const\nexport const CustomDataFormElementTypeDefault = CustomDataFormElementType.String\nexport type CustomDataFormElementTypeType = (typeof CustomDataFormElementType)[keyof typeof CustomDataFormElementType]\n\nexport function useCustomDataFormElementType() {\n const { t } = useI18n()\n const customDataFormElementTypeOptions = ref<ValueObjectOption<CustomDataFormElementTypeType>[]>([\n {\n value: CustomDataFormElementType.String,\n title: t('common.customFormElement.type.string'),\n },\n {\n value: CustomDataFormElementType.Integer,\n title: t('common.customFormElement.type.integer'),\n },\n {\n value: CustomDataFormElementType.StringArray,\n title: t('common.customFormElement.type.stringArray'),\n },\n {\n value: CustomDataFormElementType.Boolean,\n title: t('common.customFormElement.type.boolean'),\n },\n ])\n\n const getCustomDataFormElementTypeOption = (value: CustomDataFormElementTypeType) => {\n return customDataFormElementTypeOptions.value.find((item) => item.value === value)\n }\n\n return {\n customDataFormElementTypeOptions,\n getCustomDataFormElementTypeOption,\n }\n}\n","import { between, createI18nMessage } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateBetween() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(between, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.between',\n })\n}\n","import { createI18nMessage, email } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateEmail() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(email, {\n messagePath: () => 'error.jsValidation.email',\n })\n}\n","import { createI18nMessage, maxLength } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateMaxLength() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(maxLength, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.maxLength',\n })\n}\n","import { createI18nMessage, maxValue } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateMaxValue() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(maxValue, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.maxValue',\n })\n}\n","import { createI18nMessage, minLength } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateMinLength() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(minLength, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.minLength',\n })\n}\n","import { createI18nMessage, minValue } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateMinValue() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(minValue, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.minValue',\n })\n}\n","import { createI18nMessage, numeric } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateNumeric() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(numeric, {\n messagePath: () => 'error.jsValidation.numeric',\n })\n}\n","import { createI18nMessage, required } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateRequired() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(required, {\n messagePath: () => 'error.jsValidation.required',\n })\n}\n","import { createI18nMessage, helpers } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateSlug() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(helpers.regex(/^[a-z\\-0-9/]+$/), {\n messagePath: () => 'error.jsValidation.slug',\n })\n}\n","import { createI18nMessage, helpers } from '@vuelidate/validators'\nimport { unref } from 'vue'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateStringArrayItemLength() {\n const withI18nMessage = createI18nMessage({ t })\n\n const stringArrayItemLengthValidator = (min: number, max: number) => {\n return (value: string[]) =>\n !helpers.req(value) || value.every((item) => item.length >= unref(min) && item.length <= unref(max))\n }\n const stringArrayItemLengthHelper = (min: number, max: number) => {\n return {\n $validator: stringArrayItemLengthValidator(min, max),\n // $message not required when using i18n\n // $message: (input: { $params: Record<string, any> }) => {\n // const { $params } = input\n // return `Item length in list must have between ${$params.min} and ${$params.max} characters.`\n // },\n $params: {\n min,\n max,\n type: 'stringArrayItemLength',\n },\n }\n }\n\n return withI18nMessage(stringArrayItemLengthHelper, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.stringArrayItemLength',\n })\n}\n","import { createI18nMessage, url } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateUrl() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(url, {\n messagePath: () => 'error.jsValidation.url',\n })\n}\n","import { useValidateBetween } from '@/validators/vuelidate/common/useValidateBetween'\nimport { useValidateEmail } from '@/validators/vuelidate/common/useValidateEmail'\nimport { useValidateMaxLength } from '@/validators/vuelidate/common/useValidateMaxLength'\nimport { useValidateMaxValue } from '@/validators/vuelidate/common/useValidateMaxValue'\nimport { useValidateMinLength } from '@/validators/vuelidate/common/useValidateMinLength'\nimport { useValidateMinValue } from '@/validators/vuelidate/common/useValidateMinValue'\nimport { useValidateNumeric } from '@/validators/vuelidate/common/useValidateNumeric'\nimport { useValidateRequired } from '@/validators/vuelidate/common/useValidateRequired'\nimport { useValidateRequiredIf } from '@/validators/vuelidate/common/useValidateRequiredIf'\nimport { useValidateSlug } from '@/validators/vuelidate/common/useValidateSlug'\nimport { useValidateStringArrayItemLength } from '@/validators/vuelidate/common/useValidateStringArrayItemLength'\nimport { useValidateUrl } from '@/validators/vuelidate/common/useValidateUrl'\n\nexport function useValidate() {\n return {\n required: useValidateRequired(),\n requiredIf: useValidateRequiredIf(),\n minLength: useValidateMinLength(),\n maxLength: useValidateMaxLength(),\n minValue: useValidateMinValue(),\n maxValue: useValidateMaxValue(),\n between: useValidateBetween(),\n email: useValidateEmail(),\n numeric: useValidateNumeric(),\n slug: useValidateSlug(),\n url: useValidateUrl(),\n stringArrayItemLength: useValidateStringArrayItemLength(),\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, isProxy, ref, toRaw } from 'vue'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useVuelidate } from '@vuelidate/core'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport type { ValidationScope } from '@/types/Validation'\nimport { CustomDataFormElementType } from '@/components/customDataForm/CustomDataFormElementTypes'\nimport { isEmptyObject } from '@/utils/common'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n config: CustomDataFormElement\n validationScope?: ValidationScope\n }>(),\n {\n validationScope: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: { property: string; value: any }): void\n (e: 'blur', data: any): void\n}>()\n\nconst fixValue = (value: any) => {\n if (props.config.attributes.type === CustomDataFormElementType.Integer) {\n return parseInt(value)\n }\n return value\n}\n\nconst updateModelValue = (value: any) => {\n emit('update:modelValue', { property: props.config.property, value: fixValue(value) })\n}\n\nconst modelValueComputed = computed(() => {\n const value = isProxy(props.modelValue) ? toRaw(props.modelValue) : props.modelValue\n if (props.config.attributes.type === CustomDataFormElementType.StringArray && isEmptyObject(value)) return []\n return value\n})\n\nconst { maxLength, minLength, requiredIf, minValue, maxValue, stringArrayItemLength } = useValidate()\n\nconst rules = computed(() => {\n const dynamicRules: Record<string, any> = {\n modelValueComputed: {\n required: requiredIf(props.config.attributes.required),\n },\n }\n switch (props.config.attributes.type) {\n case CustomDataFormElementType.String:\n dynamicRules.modelValueComputed.minLength = minLength(\n props.config.attributes.minValue ? props.config.attributes.minValue : 0\n )\n dynamicRules.modelValueComputed.maxLength = maxLength(\n props.config.attributes.maxValue ? props.config.attributes.maxValue : 256\n )\n break\n case CustomDataFormElementType.Integer:\n dynamicRules.modelValueComputed.minValue = minValue(\n props.config.attributes.minValue ? props.config.attributes.minValue : 0\n )\n dynamicRules.modelValueComputed.maxValue = maxValue(\n props.config.attributes.maxValue ? props.config.attributes.maxValue : 9999\n )\n break\n case CustomDataFormElementType.StringArray:\n dynamicRules.modelValueComputed.minLength = minLength(\n props.config.attributes.minCount ? props.config.attributes.minCount : 0\n )\n dynamicRules.modelValueComputed.maxLength = maxLength(\n props.config.attributes.maxCount ? props.config.attributes.maxCount : 32\n )\n dynamicRules.modelValueComputed.stringArrayItemLength = stringArrayItemLength(\n props.config.attributes.minValue ? props.config.attributes.minValue : 0,\n props.config.attributes.maxValue ? props.config.attributes.maxValue : 256\n )\n break\n }\n\n return dynamicRules\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate(rules, { modelValueComputed }, { $scope: props.validationScope })\n\nconst errorMessageComputed = computed(() => {\n if (v$.value.$errors.length) return [v$.value.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst counter = ref<number | undefined>(undefined)\ncounter.value = props.config.attributes.maxValue ?? undefined\n\nconst onBlur = () => {\n emit('blur', props.modelValue)\n v$.value.$touch()\n}\n</script>\n\n<template>\n <VTextarea\n v-if=\"config.attributes.type === CustomDataFormElementType.String\"\n :model-value=\"modelValue\"\n auto-grow\n :rows=\"1\"\n :label=\"config.name\"\n :error-messages=\"errorMessageComputed\"\n :counter=\"counter\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n @blur=\"onBlur\"\n >\n <template #label>\n {{ config.name\n }}<span\n v-if=\"config.attributes.required\"\n class=\"required\"\n />\n </template>\n </VTextarea>\n <VTextField\n v-else-if=\"config.attributes.type === CustomDataFormElementType.Integer\"\n :model-value=\"modelValueComputed\"\n type=\"number\"\n :label=\"config.name\"\n :error-messages=\"errorMessageComputed\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n @blur=\"onBlur\"\n >\n <template #label>\n {{ config.name\n }}<span\n v-if=\"config.attributes.required\"\n class=\"required\"\n />\n </template>\n </VTextField>\n <VCombobox\n v-else-if=\"config.attributes.type === CustomDataFormElementType.StringArray\"\n :model-value=\"modelValueComputed\"\n :label=\"config.name\"\n multiple\n chips\n :error-messages=\"errorMessageComputed\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n @blur=\"onBlur\"\n >\n <template #label>\n {{ config.name\n }}<span\n v-if=\"config.attributes.required\"\n class=\"required\"\n />\n </template>\n </VCombobox>\n <VSwitch\n v-if=\"config.attributes.type === CustomDataFormElementType.Boolean && config.attributes.required === true\"\n :label=\"config.name\"\n :model-value=\"modelValueComputed\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n />\n <div v-if=\"config.attributes.type === CustomDataFormElementType.Boolean && config.attributes.required === false\">\n optional boolean todo\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport useVuelidate from '@vuelidate/core'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport type { ValidationScope } from '@/types/Validation'\nimport { useCustomDataForm } from '@/components/customDataForm/useCustomDataForm'\nimport ACustomFormElement from '@/components/customDataForm/ACustomDataFormElement.vue'\nimport ARow from '@/components/ARow.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: { [key: string]: any }\n elements: CustomDataFormElement[]\n validationScope?: ValidationScope\n pinnedCount?: number\n readonly?: boolean\n }>(),\n {\n validationScope: undefined,\n pinnedCount: 1000,\n readonly: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'anyChange'): void\n}>()\n\nconst { t } = useI18n()\n\nconst { showAll, toggleForm } = useCustomDataForm()\n\nconst updateModelValue = (data: { property: string; value: any }) => {\n const updated = {} as { [key: string]: any }\n updated[data.property] = data.value\n emit('update:modelValue', { ...props.modelValue, ...updated })\n emit('anyChange')\n}\n\nconst elementsPinned = computed(() => {\n return props.elements.slice(0, props.pinnedCount)\n})\n\nconst elementsOther = computed(() => {\n return props.elements.slice(props.pinnedCount)\n})\n\nconst showHideButtonText = computed(() => {\n return showAll.value\n ? t('common.damImage.asset.detail.metadataToggle.show')\n : t('common.damImage.asset.detail.metadataToggle.hide')\n})\nconst showHideButtonIcon = computed(() => {\n return showAll.value ? 'mdi-minus' : 'mdi-plus'\n})\n\nconst enableShowHide = computed(() => {\n return props.elements.length > props.pinnedCount\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate({ $scope: props.validationScope })\n\nconst validate = (): Promise<boolean> => {\n return v$.value.$validate()\n}\n\ndefineExpose({\n validate,\n})\n</script>\n\n<template>\n <div class=\"w-100\">\n <slot name=\"before-pinned\" />\n <VRow\n v-for=\"element in elementsPinned\"\n :key=\"element.id\"\n dense\n class=\"mt-1\"\n >\n <VCol>\n <ARow\n v-if=\"readonly\"\n :title=\"element.name\"\n >\n {{ modelValue[element.property] }}\n </ARow>\n <ACustomFormElement\n v-else\n :config=\"element\"\n :model-value=\"modelValue[element.property]\"\n :validation-scope=\"validationScope\"\n @update:model-value=\"updateModelValue\"\n />\n </VCol>\n </VRow>\n <slot name=\"after-pinned\" />\n </div>\n <div\n v-show=\"showAll\"\n class=\"w-100\"\n >\n <VRow\n v-for=\"element in elementsOther\"\n :key=\"element.id\"\n dense\n class=\"mt-1\"\n >\n <VCol>\n <ARow\n v-if=\"readonly\"\n :title=\"element.name\"\n >\n {{ modelValue[element.property] }}\n </ARow>\n <ACustomFormElement\n v-else\n :config=\"element\"\n :model-value=\"modelValue[element.property]\"\n @update:model-value=\"updateModelValue\"\n />\n </VCol>\n </VRow>\n </div>\n <VBtn\n v-if=\"enableShowHide\"\n variant=\"text\"\n size=\"small\"\n class=\"my-2\"\n @click=\"toggleForm\"\n >\n <VIcon :icon=\"showHideButtonIcon\" />\n {{ showHideButtonText }}\n </VBtn>\n</template>\n","import { type Ref, ref } from 'vue'\n\nconst isDraggingFile = ref(false)\nconst draggingTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nexport function useDropzoneGlobalDragState() {\n const dragoverHandler = (event: DragEvent) => {\n event.preventDefault()\n checkReallyDraggingEnded(event, true)\n }\n const dragleaveHandler = (event: DragEvent) => {\n event.preventDefault()\n checkReallyDraggingEnded(event, false)\n }\n const dropHandler = (event: DragEvent) => {\n event.preventDefault()\n checkReallyDraggingEnded(event, false)\n }\n const checkReallyDraggingEnded = (event: DragEvent, dragging: boolean) => {\n if (!dragEventContainsFiles(event)) {\n return\n }\n if (dragging) {\n isDraggingFile.value = true\n clearTimeout(draggingTimer.value)\n } else {\n clearTimeout(draggingTimer.value)\n draggingTimer.value = setTimeout(() => {\n isDraggingFile.value = false\n }, 100)\n }\n }\n const dragEventContainsFiles = (event: DragEvent) => {\n if (event.dataTransfer?.types) {\n for (let i = 0; i < event.dataTransfer.types.length; i++) {\n if (event.dataTransfer.types[i] === 'Files') {\n return true\n }\n }\n }\n\n return false\n }\n\n const initGlobalDragState = () => {\n window.document.addEventListener('dragover', dragoverHandler)\n window.document.addEventListener('dragleave', dragleaveHandler)\n window.document.addEventListener('drop', dropHandler)\n }\n\n const destroyGlobalDragState = () => {\n window.document.removeEventListener('dragover', dragoverHandler)\n window.document.removeEventListener('dragleave', dragleaveHandler)\n window.document.removeEventListener('drop', dropHandler)\n }\n\n return {\n isDraggingFile,\n initGlobalDragState,\n destroyGlobalDragState,\n }\n}\n","export const damFileTypeFix = (file: File | null | undefined) => {\n if (!file) return ''\n if (file.type && file.type.length > 0) {\n return file.type\n }\n const extension = file.name.split('.').pop()?.toLowerCase()\n switch (extension) {\n case 'mov':\n return 'video/quicktime'\n default:\n return ''\n }\n}\n","import { useAlerts } from '@/composables/system/alerts'\nimport { damFileTypeFix } from '@/components/file/composables/fileType'\nimport { isUndefined } from '@/utils/common'\nimport { computed } from 'vue'\nimport { i18n } from '@/plugins/i18n'\n\n/**\n * @param accept example: 'image/*,.jpg'\n * @param maxSizes example: { 'image/*': 20000 } or { 'image/png': 20000, 'image/jpg': 20000 } or\n * { '.jpg': 20000, '.png': 20000 } or { '*': 20000, }\n */\nexport function useFormatAndSizeCheck(accept: string | undefined, maxSizes: Record<string, number> | undefined) {\n const acceptKeys = computed(() => {\n if (isUndefined(accept)) {\n return []\n }\n return accept.split(',')\n })\n\n const maxSizeKeys = computed(() => {\n if (isUndefined(maxSizes)) {\n return []\n }\n return Object.keys(maxSizes)\n })\n\n const checkFormatsAndSizes = (files: File[], disableAlert = false) => {\n const incorrectFileNames: string[] = []\n const validFiles = files.filter((file) => {\n const isFileValid = checkFormats(file, acceptKeys.value) && checkSizes(file, maxSizeKeys.value, maxSizes)\n if (!isFileValid) {\n incorrectFileNames.push(file.name)\n }\n return isFileValid\n })\n if (incorrectFileNames.length && !disableAlert) {\n const { showWarning } = useAlerts()\n const { t } = i18n.global\n showWarning(t('system.upload.incorrectFormatSize') + ':' + incorrectFileNames.join(', '))\n }\n\n return validFiles\n }\n\n const checkFormats = (file: File, accepts: string[]) => {\n if (accepts.length === 0) {\n return true\n }\n for (let i = 0; i < accepts.length; i++) {\n if (accepts[i].startsWith('.')) {\n // .format\n if (file.name.toLowerCase().endsWith(accepts[i])) {\n return true\n }\n } else {\n // type\n const splitType = accepts[i].split('/')\n if (splitType[1] === '*' && damFileTypeFix(file).startsWith(splitType[0] + '/')) {\n return true\n } else if (accepts[i] === damFileTypeFix(file)) {\n return true\n }\n }\n }\n return false\n }\n\n const checkSizes = (file: File, keys: Array<string>, sizes: Record<string, number> | undefined) => {\n if (keys.length === 0 || isUndefined(sizes)) {\n return true\n }\n for (let j = 0; j < keys.length; j++) {\n if (keys[j] === '*' && sizes[keys[j]] <= file.size) {\n // *\n return true\n } else if (keys[j].startsWith('.') && sizes[keys[j]] <= file.size) {\n // .format\n return true\n } else {\n // type\n const splitType = keys[j].split('/')\n if (splitType[1] === '*' && damFileTypeFix(file).startsWith(splitType[0] + '/') && sizes[keys[j]] > file.size) {\n return true\n } else if (keys[j] === damFileTypeFix(file) && sizes[keys[j]] > file.size) {\n return true\n }\n }\n }\n return false\n }\n\n return {\n checkFormatsAndSizes,\n }\n}\n","<script setup lang=\"ts\">\nimport { useDropZone } from '@vueuse/core'\nimport { ref } from 'vue'\nimport { useDropzoneGlobalDragState } from '@/components/file/composables/dropzone'\nimport { isNull } from '@/utils/common'\nimport { useFormatAndSizeCheck } from '@/components/file/composables/formatAndSizeCheck'\nimport { useI18n } from 'vue-i18n'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nconst props = withDefaults(\n defineProps<{\n variant?: 'fill' | 'default' | 'fullscreen'\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n disabled?: boolean\n transparent?: boolean\n size?: 'small' | 'default' | 'large'\n hoverOnly?: boolean\n hideText?: boolean\n }>(),\n {\n variant: 'default',\n accept: undefined,\n maxSizes: undefined,\n disabled: false,\n transparent: false,\n size: 'default',\n hoverOnly: false,\n hideText: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'onDrop', files: File[]): void\n (e: 'onClick'): void\n}>()\n\nconst dropZoneRef = ref<HTMLDivElement>()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { checkFormatsAndSizes } = useFormatAndSizeCheck(props.accept, props.maxSizes)\n\nfunction onDrop(files: File[] | null) {\n if (props.disabled) return\n if (isNull(files) || files.length === 0) return\n emit('onDrop', checkFormatsAndSizes(files))\n}\n\nconst { isOverDropZone } = useDropZone(dropZoneRef, onDrop)\n\nconst { isDraggingFile } = useDropzoneGlobalDragState()\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n ref=\"dropZoneRef\"\n class=\"a-file-dropzone\"\n :class=\"{\n 'a-file-dropzone--bg': !transparent,\n 'a-file-dropzone--over': isOverDropZone && isDraggingFile,\n 'a-file-dropzone--possibility': isDraggingFile,\n [`a-file-dropzone--${variant}`]: true,\n [`a-file-dropzone--${size}`]: true,\n [`a-file-dropzone--hover-only`]: hoverOnly,\n [`a-file-dropzone--hide-text`]: hideText,\n }\"\n @click.stop=\"emit('onClick')\"\n >\n <div\n v-if=\"disabled\"\n class=\"text\"\n />\n <div\n v-else-if=\"isDraggingFile\"\n class=\"text\"\n >\n {{ t('common.system.dropzone.dropHere') }}\n </div>\n <div\n v-else\n class=\"text\"\n >\n {{ t('common.system.dropzone.dropPossibility') }}\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n$class-name-root: 'a-file-dropzone';\n\n.#{$class-name-root} {\n outline-offset: -4px;\n position: relative;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .text {\n padding: 6px;\n pointer-events: none;\n user-select: none;\n text-align: center;\n border-radius: 5px;\n }\n\n &--fill {\n position: absolute !important;\n inset: 0;\n }\n\n &--bg {\n width: 100%;\n }\n\n &--fullscreen {\n inset: 0;\n position: fixed;\n z-index: 9999;\n }\n\n &--small {\n min-height: 70px;\n }\n\n &--default {\n min-height: 140px;\n }\n\n &--large {\n min-height: 210px;\n }\n\n &--hover-only {\n display: none;\n }\n\n &--hide-text .text {\n display: none;\n }\n\n &.#{$class-name-root}--hover-only.#{$class-name-root}--possibility {\n display: flex;\n }\n}\n\n.v-theme--light {\n .#{$class-name-root} {\n .text {\n background-color: rgba(212 212 212 / 50%);\n }\n\n &--bg {\n background-color: #d4d4d4;\n }\n\n &--over:not(&--disabled) {\n background-color: #dcedc8;\n outline: 2px dashed #7cb342;\n }\n\n &--possibility:not(&--disabled) {\n background-color: #e5edf1;\n outline: 2px dashed #bacfd4;\n }\n }\n}\n\n.v-theme--dark {\n .#{$class-name-root} {\n .text {\n background-color: rgba(57 57 57 / 50%);\n }\n\n &--bg {\n background-color: #393939;\n }\n\n &--over:not(&--disabled) {\n background-color: #283121;\n outline: 2px dashed #333e28;\n }\n\n &--possibility:not(&--disabled) {\n background-color: #212531;\n outline: 2px dashed #01579b;\n }\n }\n}\n</style>\n","import { ref } from 'vue'\nimport type { CommonAdminImageOptions } from '@/AnzuSystemsCommonAdmin'\nimport { isUndefined } from '@/utils/common'\n\nconst imageOptions = ref<CommonAdminImageOptions>(undefined)\n\nexport function initCommonAdminImageOptions(data: CommonAdminImageOptions) {\n imageOptions.value = data\n}\n\nexport function useCommonAdminImageOptions(configName: string = 'default') {\n if (\n isUndefined(imageOptions.value) ||\n isUndefined(imageOptions.value.configs) ||\n isUndefined(imageOptions.value.configs[configName])\n ) {\n throw new Error(\"Composable can't be used without properly configured common admin.\")\n }\n\n return {\n imageClient: imageOptions.value.configs[configName].imageClient,\n previewDomain: imageOptions.value.configs[configName].previewDomain,\n imageWidth: imageOptions.value.configs[configName].width,\n imageHeight: imageOptions.value.configs[configName].height,\n }\n}\n","import type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport type { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\n\nexport function useImageActions(config: ReturnType<typeof useCommonAdminImageOptions>) {\n const widgetImageToDamImageUrl = (\n image: ImageAware | ImageCreateUpdateAware,\n width = config.imageWidth,\n height = config.imageHeight,\n random = true\n ) => {\n return (\n config.previewDomain +\n '/image/w' +\n width +\n '-h' +\n height +\n (image.dam.regionPosition > 0 ? '-c' + image.dam.regionPosition : '') +\n '/' +\n image.dam.damId +\n '.jpg' +\n (random ? '?random=' + Date.now() : '')\n )\n }\n\n return {\n widgetImageToDamImageUrl,\n }\n}\n","import { DamAssetType } from '@/types/coreDam/Asset'\nimport { computed } from 'vue'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\n\nexport function useDamAcceptTypeAndSizeHelper(\n assetType: undefined | DamAssetType = undefined,\n damConfigExtSystem: DamExtSystemConfig\n) {\n const createSizesByAssetType = (assetType: DamAssetType) => {\n const sizes: Record<string, number> = {}\n for (let i = 0; i < damConfigExtSystem[assetType].mimeTypes.length; i++) {\n sizes[damConfigExtSystem[assetType].mimeTypes[i]] = damConfigExtSystem[assetType].sizeLimit\n }\n return sizes\n }\n\n const uploadSizes = computed(() => {\n if (assetType) {\n return {\n ...createSizesByAssetType(assetType),\n }\n }\n return {\n ...createSizesByAssetType(DamAssetType.Image),\n ...createSizesByAssetType(DamAssetType.Audio),\n ...createSizesByAssetType(DamAssetType.Video),\n ...createSizesByAssetType(DamAssetType.Document),\n }\n })\n\n const uploadAccept = computed(() => {\n return Object.keys(uploadSizes.value).join(',')\n })\n\n return {\n uploadSizes,\n uploadAccept,\n }\n}\n\n","import type { CancelTokenSource } from 'axios'\nimport type { DocId, DocIdNullable, IntegerId } from '@/types/common'\nimport type {\n AssetExternalProviderIdNullable,\n AssetExternalProviderMetadata,\n DamAssetStatus,\n DamAssetType\n} from '@/types/coreDam/Asset'\nimport type { AssetFileFailReason, AssetFileLink } from '@/types/coreDam/AssetFile'\nimport type { ImageAware } from '@/types/ImageAware'\n\nexport type UploadQueueKey = string\n\nexport interface UploadQueue {\n items: UploadQueueItem[]\n totalCount: number\n processedCount: number\n fileInputKey: number // used to reset html input file element\n\n suggestions: {\n newKeywordNames: Set<string>\n newAuthorNames: Set<string>\n }\n}\n\nexport enum UploadQueueItemType {\n File = 'file',\n Asset = 'asset',\n ExternalProviderAsset = 'externalProviderAsset',\n SlotFile = 'slotFile',\n}\n\nexport enum UploadQueueItemStatus {\n Loading = 'loading', // loading additional api data\n Waiting = 'waiting', // waiting to be uploaded\n Uploading = 'uploading', // uploading right now\n Processing = 'processing', // all data sent by FE, server processing, waiting for notification, todo\n Failed = 'failed', // any error\n Uploaded = 'uploaded', // uploaded/ready after loading\n Stop = 'stop', // after hitting stop upload\n}\n\nexport interface UploadQueueItem {\n key: string\n file: File | null\n status: UploadQueueItemStatus\n assetStatus: DamAssetStatus\n isDuplicate: boolean\n type: UploadQueueItemType\n assetType: DamAssetType\n displayTitle: string\n assetId: DocIdNullable\n duplicateAssetId: DocIdNullable\n fileId: DocIdNullable\n externalProviderAssetId: AssetExternalProviderIdNullable\n externalProviderName: string | null\n externalProviderMetadata: AssetExternalProviderMetadata\n latestChunkCancelToken: CancelTokenSource | null\n chunkSize: number\n currentChunkIndex: number\n chunkTotalCount: number\n licenceId: IntegerId\n imagePreview?: AssetFileLink\n canEditMetadata: boolean\n keywords: DocId[]\n authors: DocId[]\n customData: any\n authorConflicts: DocId[]\n progress: {\n remainingTime: null | number\n progressPercent: null | number\n speed: null | number\n }\n error: {\n hasError: boolean\n message: string\n assetFileFailReason: AssetFileFailReason\n }\n notificationFallbackTimer: ReturnType<typeof setTimeout> | undefined\n notificationFallbackTry: number\n slotName: string | null\n image: undefined | ImageAware // todo check\n}\n\nexport interface DamUploadStartResponse {\n id: DocId\n asset: DocId\n}\n","import type { DocId, DocIdNullable } from '@/types/common'\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\n\nexport enum AssetFileProcessStatus {\n Uploading = 'uploading', // file entity created and ready to receive chunks\n Uploaded = 'uploaded', // all chunks were sent\n Stored = 'stored', // File is stored and ready to processing\n Duplicate = 'duplicate', // AssetFile is duplicate of another asset\n Processed = 'processed', // file processed and ready to serve\n Failed = 'failed',\n}\n\nexport enum AssetFileFailReason {\n None = 'none',\n Unknown = 'unknown',\n InvalidChecksum = 'invalid_checksum',\n InvalidMimeType = 'invalid_mime_type',\n DownloadFailed = 'download_failed',\n InvalidSize = 'invalid_size',\n Default = None,\n}\n\ninterface FileAttributes {\n status: AssetFileProcessStatus\n mimeType: string\n size: number\n originFileName: string\n originUrl: string\n failReason: AssetFileFailReason\n}\n\nexport enum AssetFileLinkType {\n Image = 'image',\n Audio = 'audio',\n Default = Image,\n}\n\nexport interface AssetFileLink {\n width: number\n height: number\n requestedWidth: number\n requestedHeight: number\n url: string\n title: string\n type: AssetFileLinkType\n}\n\nexport type AssetFileLinks =\n | Record<'image_list' | 'image_table' | 'image_detail' | 'audio', AssetFileLink>\n | Record<string, never>\n\nexport interface AssetFileImage extends AnzuUserAndTimeTrackingAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n imageAttributes: ImageAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n metadata: Metadata\n _resourceName: 'imageFile'\n}\n\nexport interface AssetFileAudio extends AnzuUserAndTimeTrackingAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n audioAttributes: AudioAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n _resourceName: 'audioFile'\n}\n\nexport interface AssetFileVideo extends AnzuUserAndTimeTrackingAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n videoAttributes: VideoAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n imagePreview: AssetFileImagePreviewNullable\n _resourceName: 'videoFile'\n}\n\nexport interface AssetFileDocument extends AnzuUserAndTimeTrackingAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n documentAttributes: DocumentAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n _resourceName: 'documentFile'\n}\n\nexport interface AssetFileDownloadLink extends AnzuUserAndTimeTrackingAware {\n id: DocId\n link: string\n _system: string\n _resourceName: 'imageFile'\n}\n\nexport type AssetFile = AssetFileImage | AssetFileAudio | AssetFileVideo | AssetFileDocument\n\nexport type AssetFileNullable = AssetFileImage | AssetFileAudio | AssetFileVideo | AssetFileDocument | null\n\nexport const assetFileIsImageFile = (value: any): value is AssetFileImage => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'imageFile'\n}\n\nexport const assetFileIsVideoFile = (value: any): value is AssetFileVideo => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'videoFile'\n}\n\nexport const assetFileIsAudioFile = (value: any): value is AssetFileAudio => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'audioFile'\n}\n\nexport const assetFileIsDocumentFile = (value: any): value is AssetFileDocument => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'documentFile'\n}\n\ninterface ImageAttributes {\n ratioWidth: number\n ratioHeight: number\n width: number\n height: number\n rotation: number\n mostDominantColor: string\n animated: boolean\n}\n\ninterface Metadata {\n exifData: [] // todo check\n id: string\n createdAt: string\n modifiedAt: string\n createdBy: number\n modifiedBy: number\n}\n\ninterface AudioAttributes {\n duration: number\n codecName: string\n bitrate: number\n}\n\ninterface DocumentAttributes {\n pageCount: number\n}\n\ninterface VideoAttributes {\n bitrate: number\n codecName: string\n duration: number\n height: number\n ratioHeight: number\n ratioWidth: number\n rotation: number\n width: number\n}\n\nexport interface AssetFileImagePreview {\n imageFile: DocId\n position: number\n}\n\nexport type AssetFileImagePreviewNullable = AssetFileImagePreview | null\n","import type { UploadQueueItem, UploadQueueItemStatus, UploadQueueItemType } from '@/types/coreDam/UploadQueue'\nimport type { IntegerId } from '@/types/common'\nimport { DamAssetStatus, type DamAssetType } from '@/types/coreDam/Asset'\nimport { AssetFileFailReason } from '@/types/coreDam/AssetFile'\n\nexport function useUploadQueueItemFactory() {\n const createDefault = (\n key: string,\n type: UploadQueueItemType,\n status: UploadQueueItemStatus,\n assetType: DamAssetType,\n chunkSize: number,\n licenceId: IntegerId\n ): UploadQueueItem => {\n return {\n key: key,\n type: type,\n file: null,\n status: status,\n isDuplicate: false,\n duplicateAssetId: null,\n assetType: assetType,\n assetStatus: DamAssetStatus.Default,\n displayTitle: '',\n assetId: null,\n fileId: null,\n externalProviderAssetId: null,\n externalProviderName: null,\n externalProviderMetadata: {},\n keywords: [],\n authors: [],\n authorConflicts: [],\n customData: {},\n latestChunkCancelToken: null,\n chunkSize: chunkSize,\n currentChunkIndex: 0,\n chunkTotalCount: 0,\n licenceId: licenceId,\n imagePreview: undefined,\n progress: {\n remainingTime: null,\n progressPercent: null,\n speed: null,\n },\n canEditMetadata: false,\n error: {\n hasError: false,\n message: '',\n assetFileFailReason: AssetFileFailReason.Default,\n },\n notificationFallbackTimer: undefined,\n notificationFallbackTry: 1,\n slotName: null,\n image: undefined,\n }\n }\n\n return {\n createDefault,\n }\n}\n","import { DamAssetType } from '@/types/coreDam/Asset'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\n\nexport const getAssetTypeByMimeType = (\n mimeType: string,\n damConfigExtSystem: DamExtSystemConfig\n): DamAssetType | null => {\n for (const [key, values] of Object.entries(damConfigExtSystem)) {\n if (!Object.values(DamAssetType).includes(key as DamAssetType)) continue\n for (let i = 0; i < values.mimeTypes.length; i++) {\n if (mimeType === values.mimeTypes[i]) return key as DamAssetType\n }\n }\n return null\n}\n","import { ref } from 'vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { isNull } from '@/utils/common'\n\nconst chunkSize = ref<number | undefined>(undefined)\n\nexport function useDamUploadChunkSize(apiTimeout: number = 30) {\n const { damPrvConfig } = useDamConfigState()\n const lastChunkSize = ref(chunkSize.value || damPrvConfig.value.settings.imageChunkConfig.minSize)\n\n const minUploadTimeThreshold = apiTimeout / 5\n const idealUploadTimeThreshold = apiTimeout / 4\n const maxUploadTimeThreshold = apiTimeout / 2\n\n const updateChunkSize = (speed: number | null) => {\n if (isNull(speed)) {\n return false\n }\n\n const expectedChunkUploadSpeed = lastChunkSize.value / speed\n if (expectedChunkUploadSpeed > maxUploadTimeThreshold) {\n lastChunkSize.value = returnFromRange(maxUploadTimeThreshold * speed)\n chunkSize.value = lastChunkSize.value\n\n return true\n }\n if (expectedChunkUploadSpeed < minUploadTimeThreshold) {\n lastChunkSize.value = returnFromRange(idealUploadTimeThreshold * speed)\n chunkSize.value = lastChunkSize.value\n\n return true\n }\n\n return false\n }\n\n const returnFromRange = (value: number) => {\n if (value > damPrvConfig.value.settings.imageChunkConfig.maxSize) {\n return damPrvConfig.value.settings.imageChunkConfig.maxSize\n }\n if (value < damPrvConfig.value.settings.imageChunkConfig.minSize) {\n return damPrvConfig.value.settings.imageChunkConfig.minSize\n }\n\n return value\n }\n\n return {\n lastChunkSize,\n updateChunkSize,\n }\n}\n","import type { AxiosInstance } from 'axios'\nimport { type UploadQueueItem, UploadQueueItemType } from '@/types/coreDam/UploadQueue'\nimport type { DocId } from '@/types/common'\nimport { HTTP_STATUS_CREATED, HTTP_STATUS_OK } from '@/composables/statusCodes'\nimport { damFileTypeFix } from '@/components/file/composables/fileType'\nimport type { AssetFileImage } from '@/types/coreDam/AssetFile'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\n\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nconst END_POINT = '/adm/v1/image'\nconst CHUNK_UPLOAD_TIMEOUT = 420\n\nexport const fetchImageFile = (client: () => AxiosInstance, id: DocId) =>\n apiFetchOne<AssetFileImage>(client, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, 'asset')\n\nexport const imageUploadStart = (client: () => AxiosInstance, item: UploadQueueItem) => {\n return new Promise((resolve, reject) => {\n let url = END_POINT + '/licence/' + item.licenceId\n if (item.type === UploadQueueItemType.SlotFile && item.slotName && item.assetId) {\n url = END_POINT + '/asset/' + item.assetId + '/slot-name/' + item.slotName\n }\n client()\n .post(\n url,\n JSON.stringify({\n mimeType: damFileTypeFix(item.file),\n size: item.file?.size,\n })\n )\n .then((res) => {\n if (res.status === HTTP_STATUS_CREATED) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nexport const imageUploadChunk = (\n client: (timeout?: number) => AxiosInstance,\n item: UploadQueueItem,\n imageId: DocId,\n buffer: string,\n size: number,\n offset: number,\n onUploadProgressCallback: ((progressEvent: any) => void) | undefined = undefined\n) => {\n return new Promise((resolve, reject) => {\n const formData = new FormData()\n const url = END_POINT + '/' + imageId + '/chunk'\n formData.append('file', buffer)\n formData.append(\n 'chunk',\n JSON.stringify({\n offset: offset,\n size: size,\n })\n )\n\n client(CHUNK_UPLOAD_TIMEOUT)\n .post(url, formData, {\n cancelToken: item.latestChunkCancelToken ? item.latestChunkCancelToken.token : undefined,\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n onUploadProgress: onUploadProgressCallback,\n })\n .then((res) => {\n if (res.status === HTTP_STATUS_CREATED) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nexport const imageUploadFinish = (client: () => AxiosInstance, item: UploadQueueItem, sha: string) => {\n return new Promise((resolve, reject) => {\n const url = END_POINT + '/' + item.fileId + '/uploaded'\n client()\n .patch(\n url,\n JSON.stringify({\n checksum: sha,\n })\n )\n .then((res) => {\n if (res.status === HTTP_STATUS_OK) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nexport const rotateImage = (client: () => AxiosInstance, imageId: DocId, angle: 90 | 270) => {\n return new Promise((resolve, reject) => {\n const url = END_POINT + '/' + imageId + '/rotate/' + angle\n client()\n .patch(url)\n .then((res) => {\n if (res.status === HTTP_STATUS_OK) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n","import { DamAssetType } from '@/types/coreDam/Asset'\nimport { type DamUploadStartResponse, type UploadQueueItem, UploadQueueItemStatus } from '@/types/coreDam/UploadQueue'\nimport {\n imageUploadChunk,\n imageUploadFinish,\n imageUploadStart,\n} from '@/components/damImage/uploadQueue/api/damImageApi'\nimport type { AxiosInstance } from 'axios'\nimport type { DocId } from '@/types/common'\nimport { AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport { fetchAsset } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\n\nconst NOTIFICATION_FALLBACK_TIMER_CHECK_SECONDS = 10\nconst NOTIFICATION_FALLBACK_MAX_TRIES = 3\n\nexport const damUploadStart: (client: () => AxiosInstance, item: UploadQueueItem) => Promise<DamUploadStartResponse> = (\n client: () => AxiosInstance,\n item: UploadQueueItem\n) => {\n return new Promise((resolve, reject) => {\n if (item.assetType !== DamAssetType.Image) {\n reject()\n return\n }\n imageUploadStart(client, item)\n .then((res) => {\n resolve(res as DamUploadStartResponse)\n return\n })\n .catch((err) => reject(err))\n })\n}\n\nexport const damUploadChunk = (\n client: () => AxiosInstance,\n item: UploadQueueItem,\n imageId: DocId,\n buffer: string,\n size: number,\n offset: number,\n onUploadProgressCallback: any\n) => {\n return new Promise((resolve, reject) => {\n if (item.assetType !== DamAssetType.Image) {\n reject()\n return\n }\n imageUploadChunk(client, item, imageId, buffer, size, offset, onUploadProgressCallback)\n .then((res) => {\n resolve(res)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const damUploadFinish = (\n client: () => AxiosInstance,\n item: UploadQueueItem,\n sha: string,\n uploadStatusFallback: boolean\n) => {\n return new Promise((resolve, reject) => {\n if (item.assetType !== DamAssetType.Image) {\n reject()\n return\n }\n imageUploadFinish(client, item, sha)\n .then((res) => {\n item.status = UploadQueueItemStatus.Processing\n if (uploadStatusFallback) {\n item.notificationFallbackTimer = setTimeout(function () {\n notificationFallbackCallback(client, item)\n }, calculateFallbackTime(item))\n }\n resolve(res)\n })\n .catch((err) => reject(err))\n })\n}\n\nfunction calculateFallbackTime(item: UploadQueueItem) {\n return NOTIFICATION_FALLBACK_TIMER_CHECK_SECONDS * 1000 * item.notificationFallbackTry * item.notificationFallbackTry\n}\n\nasync function notificationFallbackCallback(client: () => AxiosInstance, item: UploadQueueItem) {\n clearTimeout(item.notificationFallbackTimer)\n if (item.status === UploadQueueItemStatus.Uploaded) return\n if (item.notificationFallbackTry > NOTIFICATION_FALLBACK_MAX_TRIES) return\n if (!item.assetId) return\n const asset = await fetchAsset(client, item.assetId)\n if (asset && asset.mainFile && asset.mainFile.fileAttributes) {\n const uploadQueuesStore = useUploadQueuesStore()\n if (asset.mainFile.fileAttributes.status === AssetFileProcessStatus.Processed) {\n uploadQueuesStore.queueItemProcessed(asset.id)\n return\n } else if (asset.mainFile.fileAttributes.status === AssetFileProcessStatus.Duplicate) {\n uploadQueuesStore.queueItemDuplicate(asset.id)\n return\n } else if (asset.mainFile.fileAttributes.status === AssetFileProcessStatus.Failed) {\n uploadQueuesStore.queueItemFailed(asset.id, asset.mainFile.fileAttributes.failReason)\n return\n }\n }\n item.notificationFallbackTry++\n item.notificationFallbackTimer = setTimeout(function () {\n notificationFallbackCallback(client, item)\n }, calculateFallbackTime(item))\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Rusha\"] = factory();\n\telse\n\t\troot[\"Rusha\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-env commonjs, browser */\n\nvar RushaCore = __webpack_require__(5);\n\nvar _require = __webpack_require__(1),\n toHex = _require.toHex,\n ceilHeapSize = _require.ceilHeapSize;\n\nvar conv = __webpack_require__(6);\n\n// Calculate the length of buffer that the sha1 routine uses\n// including the padding.\nvar padlen = function (len) {\n for (len += 9; len % 64 > 0; len += 1) {}\n return len;\n};\n\nvar padZeroes = function (bin, len) {\n var h8 = new Uint8Array(bin.buffer);\n var om = len % 4,\n align = len - om;\n switch (om) {\n case 0:\n h8[align + 3] = 0;\n case 1:\n h8[align + 2] = 0;\n case 2:\n h8[align + 1] = 0;\n case 3:\n h8[align + 0] = 0;\n }\n for (var i = (len >> 2) + 1; i < bin.length; i++) {\n bin[i] = 0;\n }\n};\n\nvar padData = function (bin, chunkLen, msgLen) {\n bin[chunkLen >> 2] |= 0x80 << 24 - (chunkLen % 4 << 3);\n // To support msgLen >= 2 GiB, use a float division when computing the\n // high 32-bits of the big-endian message length in bits.\n bin[((chunkLen >> 2) + 2 & ~0x0f) + 14] = msgLen / (1 << 29) | 0;\n bin[((chunkLen >> 2) + 2 & ~0x0f) + 15] = msgLen << 3;\n};\n\nvar getRawDigest = function (heap, padMaxChunkLen) {\n var io = new Int32Array(heap, padMaxChunkLen + 320, 5);\n var out = new Int32Array(5);\n var arr = new DataView(out.buffer);\n arr.setInt32(0, io[0], false);\n arr.setInt32(4, io[1], false);\n arr.setInt32(8, io[2], false);\n arr.setInt32(12, io[3], false);\n arr.setInt32(16, io[4], false);\n return out;\n};\n\nvar Rusha = function () {\n function Rusha(chunkSize) {\n _classCallCheck(this, Rusha);\n\n chunkSize = chunkSize || 64 * 1024;\n if (chunkSize % 64 > 0) {\n throw new Error('Chunk size must be a multiple of 128 bit');\n }\n this._offset = 0;\n this._maxChunkLen = chunkSize;\n this._padMaxChunkLen = padlen(chunkSize);\n // The size of the heap is the sum of:\n // 1. The padded input message size\n // 2. The extended space the algorithm needs (320 byte)\n // 3. The 160 bit state the algoritm uses\n this._heap = new ArrayBuffer(ceilHeapSize(this._padMaxChunkLen + 320 + 20));\n this._h32 = new Int32Array(this._heap);\n this._h8 = new Int8Array(this._heap);\n this._core = new RushaCore({ Int32Array: Int32Array }, {}, this._heap);\n }\n\n Rusha.prototype._initState = function _initState(heap, padMsgLen) {\n this._offset = 0;\n var io = new Int32Array(heap, padMsgLen + 320, 5);\n io[0] = 1732584193;\n io[1] = -271733879;\n io[2] = -1732584194;\n io[3] = 271733878;\n io[4] = -1009589776;\n };\n\n Rusha.prototype._padChunk = function _padChunk(chunkLen, msgLen) {\n var padChunkLen = padlen(chunkLen);\n var view = new Int32Array(this._heap, 0, padChunkLen >> 2);\n padZeroes(view, chunkLen);\n padData(view, chunkLen, msgLen);\n return padChunkLen;\n };\n\n Rusha.prototype._write = function _write(data, chunkOffset, chunkLen, off) {\n conv(data, this._h8, this._h32, chunkOffset, chunkLen, off || 0);\n };\n\n Rusha.prototype._coreCall = function _coreCall(data, chunkOffset, chunkLen, msgLen, finalize) {\n var padChunkLen = chunkLen;\n this._write(data, chunkOffset, chunkLen);\n if (finalize) {\n padChunkLen = this._padChunk(chunkLen, msgLen);\n }\n this._core.hash(padChunkLen, this._padMaxChunkLen);\n };\n\n Rusha.prototype.rawDigest = function rawDigest(str) {\n var msgLen = str.byteLength || str.length || str.size || 0;\n this._initState(this._heap, this._padMaxChunkLen);\n var chunkOffset = 0,\n chunkLen = this._maxChunkLen;\n for (chunkOffset = 0; msgLen > chunkOffset + chunkLen; chunkOffset += chunkLen) {\n this._coreCall(str, chunkOffset, chunkLen, msgLen, false);\n }\n this._coreCall(str, chunkOffset, msgLen - chunkOffset, msgLen, true);\n return getRawDigest(this._heap, this._padMaxChunkLen);\n };\n\n Rusha.prototype.digest = function digest(str) {\n return toHex(this.rawDigest(str).buffer);\n };\n\n Rusha.prototype.digestFromString = function digestFromString(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.digestFromBuffer = function digestFromBuffer(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.digestFromArrayBuffer = function digestFromArrayBuffer(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.resetState = function resetState() {\n this._initState(this._heap, this._padMaxChunkLen);\n return this;\n };\n\n Rusha.prototype.append = function append(chunk) {\n var chunkOffset = 0;\n var chunkLen = chunk.byteLength || chunk.length || chunk.size || 0;\n var turnOffset = this._offset % this._maxChunkLen;\n var inputLen = void 0;\n\n this._offset += chunkLen;\n while (chunkOffset < chunkLen) {\n inputLen = Math.min(chunkLen - chunkOffset, this._maxChunkLen - turnOffset);\n this._write(chunk, chunkOffset, inputLen, turnOffset);\n turnOffset += inputLen;\n chunkOffset += inputLen;\n if (turnOffset === this._maxChunkLen) {\n this._core.hash(this._maxChunkLen, this._padMaxChunkLen);\n turnOffset = 0;\n }\n }\n return this;\n };\n\n Rusha.prototype.getState = function getState() {\n var turnOffset = this._offset % this._maxChunkLen;\n var heap = void 0;\n if (!turnOffset) {\n var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n heap = io.buffer.slice(io.byteOffset, io.byteOffset + io.byteLength);\n } else {\n heap = this._heap.slice(0);\n }\n return {\n offset: this._offset,\n heap: heap\n };\n };\n\n Rusha.prototype.setState = function setState(state) {\n this._offset = state.offset;\n if (state.heap.byteLength === 20) {\n var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n io.set(new Int32Array(state.heap));\n } else {\n this._h32.set(new Int32Array(state.heap));\n }\n return this;\n };\n\n Rusha.prototype.rawEnd = function rawEnd() {\n var msgLen = this._offset;\n var chunkLen = msgLen % this._maxChunkLen;\n var padChunkLen = this._padChunk(chunkLen, msgLen);\n this._core.hash(padChunkLen, this._padMaxChunkLen);\n var result = getRawDigest(this._heap, this._padMaxChunkLen);\n this._initState(this._heap, this._padMaxChunkLen);\n return result;\n };\n\n Rusha.prototype.end = function end() {\n return toHex(this.rawEnd().buffer);\n };\n\n return Rusha;\n}();\n\nmodule.exports = Rusha;\nmodule.exports._core = RushaCore;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\n/* eslint-env commonjs, browser */\n\n//\n// toHex\n//\n\nvar precomputedHex = new Array(256);\nfor (var i = 0; i < 256; i++) {\n precomputedHex[i] = (i < 0x10 ? '0' : '') + i.toString(16);\n}\n\nmodule.exports.toHex = function (arrayBuffer) {\n var binarray = new Uint8Array(arrayBuffer);\n var res = new Array(arrayBuffer.byteLength);\n for (var _i = 0; _i < res.length; _i++) {\n res[_i] = precomputedHex[binarray[_i]];\n }\n return res.join('');\n};\n\n//\n// ceilHeapSize\n//\n\nmodule.exports.ceilHeapSize = function (v) {\n // The asm.js spec says:\n // The heap object's byteLength must be either\n // 2^n for n in [12, 24) or 2^24 * n for n ≥ 1.\n // Also, byteLengths smaller than 2^16 are deprecated.\n var p = 0;\n // If v is smaller than 2^16, the smallest possible solution\n // is 2^16.\n if (v <= 65536) return 65536;\n // If v < 2^24, we round up to 2^n,\n // otherwise we round up to 2^24 * n.\n if (v < 16777216) {\n for (p = 1; p < v; p = p << 1) {}\n } else {\n for (p = 16777216; p < v; p += 16777216) {}\n }\n return p;\n};\n\n//\n// isDedicatedWorkerScope\n//\n\nmodule.exports.isDedicatedWorkerScope = function (self) {\n var isRunningInWorker = 'WorkerGlobalScope' in self && self instanceof self.WorkerGlobalScope;\n var isRunningInSharedWorker = 'SharedWorkerGlobalScope' in self && self instanceof self.SharedWorkerGlobalScope;\n var isRunningInServiceWorker = 'ServiceWorkerGlobalScope' in self && self instanceof self.ServiceWorkerGlobalScope;\n\n // Detects whether we run inside a dedicated worker or not.\n //\n // We can't just check for `DedicatedWorkerGlobalScope`, since IE11\n // has a bug where it only supports `WorkerGlobalScope`.\n //\n // Therefore, we consider us as running inside a dedicated worker\n // when we are running inside a worker, but not in a shared or service worker.\n //\n // When new types of workers are introduced, we will need to adjust this code.\n return isRunningInWorker && !isRunningInSharedWorker && !isRunningInServiceWorker;\n};\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* eslint-env commonjs, worker */\n\nmodule.exports = function () {\n var Rusha = __webpack_require__(0);\n\n var hashData = function (hasher, data, cb) {\n try {\n return cb(null, hasher.digest(data));\n } catch (e) {\n return cb(e);\n }\n };\n\n var hashFile = function (hasher, readTotal, blockSize, file, cb) {\n var reader = new self.FileReader();\n reader.onloadend = function onloadend() {\n if (reader.error) {\n return cb(reader.error);\n }\n var buffer = reader.result;\n readTotal += reader.result.byteLength;\n try {\n hasher.append(buffer);\n } catch (e) {\n cb(e);\n return;\n }\n if (readTotal < file.size) {\n hashFile(hasher, readTotal, blockSize, file, cb);\n } else {\n cb(null, hasher.end());\n }\n };\n reader.readAsArrayBuffer(file.slice(readTotal, readTotal + blockSize));\n };\n\n var workerBehaviourEnabled = true;\n\n self.onmessage = function (event) {\n if (!workerBehaviourEnabled) {\n return;\n }\n\n var data = event.data.data,\n file = event.data.file,\n id = event.data.id;\n if (typeof id === 'undefined') return;\n if (!file && !data) return;\n var blockSize = event.data.blockSize || 4 * 1024 * 1024;\n var hasher = new Rusha(blockSize);\n hasher.resetState();\n var done = function (err, hash) {\n if (!err) {\n self.postMessage({ id: id, hash: hash });\n } else {\n self.postMessage({ id: id, error: err.name });\n }\n };\n if (data) hashData(hasher, data, done);\n if (file) hashFile(hasher, 0, blockSize, file, done);\n };\n\n return function () {\n workerBehaviourEnabled = false;\n };\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* eslint-env commonjs, browser */\n\nvar work = __webpack_require__(4);\nvar Rusha = __webpack_require__(0);\nvar createHash = __webpack_require__(7);\nvar runWorker = __webpack_require__(2);\n\nvar _require = __webpack_require__(1),\n isDedicatedWorkerScope = _require.isDedicatedWorkerScope;\n\nvar isRunningInDedicatedWorker = typeof self !== 'undefined' && isDedicatedWorkerScope(self);\n\nRusha.disableWorkerBehaviour = isRunningInDedicatedWorker ? runWorker() : function () {};\n\nRusha.createWorker = function () {\n var worker = work(/*require.resolve*/(2));\n var terminate = worker.terminate;\n worker.terminate = function () {\n URL.revokeObjectURL(worker.objectURL);\n terminate.call(worker);\n };\n return worker;\n};\n\nRusha.createHash = createHash;\n\nmodule.exports = Rusha;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction webpackBootstrapFunc (modules) {\n/******/ // The module cache\n/******/ var installedModules = {};\n\n/******/ // The require function\n/******/ function __webpack_require__(moduleId) {\n\n/******/ // Check if module is in cache\n/******/ if(installedModules[moduleId])\n/******/ return installedModules[moduleId].exports;\n\n/******/ // Create a new module (and put it into the cache)\n/******/ var module = installedModules[moduleId] = {\n/******/ i: moduleId,\n/******/ l: false,\n/******/ exports: {}\n/******/ };\n\n/******/ // Execute the module function\n/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ // Flag the module as loaded\n/******/ module.l = true;\n\n/******/ // Return the exports of the module\n/******/ return module.exports;\n/******/ }\n\n/******/ // expose the modules object (__webpack_modules__)\n/******/ __webpack_require__.m = modules;\n\n/******/ // expose the module cache\n/******/ __webpack_require__.c = installedModules;\n\n/******/ // identity function for calling harmony imports with the correct context\n/******/ __webpack_require__.i = function(value) { return value; };\n\n/******/ // define getter function for harmony exports\n/******/ __webpack_require__.d = function(exports, name, getter) {\n/******/ if(!__webpack_require__.o(exports, name)) {\n/******/ Object.defineProperty(exports, name, {\n/******/ configurable: false,\n/******/ enumerable: true,\n/******/ get: getter\n/******/ });\n/******/ }\n/******/ };\n\n/******/ // define __esModule on exports\n/******/ __webpack_require__.r = function(exports) {\n/******/ Object.defineProperty(exports, '__esModule', { value: true });\n/******/ };\n\n/******/ // getDefaultExport function for compatibility with non-harmony modules\n/******/ __webpack_require__.n = function(module) {\n/******/ var getter = module && module.__esModule ?\n/******/ function getDefault() { return module['default']; } :\n/******/ function getModuleExports() { return module; };\n/******/ __webpack_require__.d(getter, 'a', getter);\n/******/ return getter;\n/******/ };\n\n/******/ // Object.prototype.hasOwnProperty.call\n/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n/******/ // __webpack_public_path__\n/******/ __webpack_require__.p = \"/\";\n\n/******/ // on error function for async loading\n/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n var f = __webpack_require__(__webpack_require__.s = ENTRY_MODULE)\n return f.default || f // try to call default if defined to also support babel esmodule exports\n}\n\nvar moduleNameReqExp = '[\\\\.|\\\\-|\\\\+|\\\\w|\\/|@]+'\nvar dependencyRegExp = '\\\\((\\/\\\\*.*?\\\\*\\/)?\\s?.*?(' + moduleNameReqExp + ').*?\\\\)' // additional chars when output.pathinfo is true\n\n// http://stackoverflow.com/a/2593661/130442\nfunction quoteRegExp (str) {\n return (str + '').replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&')\n}\n\nfunction getModuleDependencies (sources, module, queueName) {\n var retval = {}\n retval[queueName] = []\n\n var fnString = module.toString()\n var wrapperSignature = fnString.match(/^function\\s?\\(\\w+,\\s*\\w+,\\s*(\\w+)\\)/)\n if (!wrapperSignature) return retval\n var webpackRequireName = wrapperSignature[1]\n\n // main bundle deps\n var re = new RegExp('(\\\\\\\\n|\\\\W)' + quoteRegExp(webpackRequireName) + dependencyRegExp, 'g')\n var match\n while ((match = re.exec(fnString))) {\n if (match[3] === 'dll-reference') continue\n retval[queueName].push(match[3])\n }\n\n // dll deps\n re = new RegExp('\\\\(' + quoteRegExp(webpackRequireName) + '\\\\(\"(dll-reference\\\\s(' + moduleNameReqExp + '))\"\\\\)\\\\)' + dependencyRegExp, 'g')\n while ((match = re.exec(fnString))) {\n if (!sources[match[2]]) {\n retval[queueName].push(match[1])\n sources[match[2]] = __webpack_require__(match[1]).m\n }\n retval[match[2]] = retval[match[2]] || []\n retval[match[2]].push(match[4])\n }\n\n return retval\n}\n\nfunction hasValuesInQueues (queues) {\n var keys = Object.keys(queues)\n return keys.reduce(function (hasValues, key) {\n return hasValues || queues[key].length > 0\n }, false)\n}\n\nfunction getRequiredModules (sources, moduleId) {\n var modulesQueue = {\n main: [moduleId]\n }\n var requiredModules = {\n main: []\n }\n var seenModules = {\n main: {}\n }\n\n while (hasValuesInQueues(modulesQueue)) {\n var queues = Object.keys(modulesQueue)\n for (var i = 0; i < queues.length; i++) {\n var queueName = queues[i]\n var queue = modulesQueue[queueName]\n var moduleToCheck = queue.pop()\n seenModules[queueName] = seenModules[queueName] || {}\n if (seenModules[queueName][moduleToCheck] || !sources[queueName][moduleToCheck]) continue\n seenModules[queueName][moduleToCheck] = true\n requiredModules[queueName] = requiredModules[queueName] || []\n requiredModules[queueName].push(moduleToCheck)\n var newModules = getModuleDependencies(sources, sources[queueName][moduleToCheck], queueName)\n var newModulesKeys = Object.keys(newModules)\n for (var j = 0; j < newModulesKeys.length; j++) {\n modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]] || []\n modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]].concat(newModules[newModulesKeys[j]])\n }\n }\n }\n\n return requiredModules\n}\n\nmodule.exports = function (moduleId, options) {\n options = options || {}\n var sources = {\n main: __webpack_require__.m\n }\n\n var requiredModules = options.all ? { main: Object.keys(sources) } : getRequiredModules(sources, moduleId)\n\n var src = ''\n\n Object.keys(requiredModules).filter(function (m) { return m !== 'main' }).forEach(function (module) {\n var entryModule = 0\n while (requiredModules[module][entryModule]) {\n entryModule++\n }\n requiredModules[module].push(entryModule)\n sources[module][entryModule] = '(function(module, exports, __webpack_require__) { module.exports = __webpack_require__; })'\n src = src + 'var ' + module + ' = (' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(entryModule)) + ')({' + requiredModules[module].map(function (id) { return '' + JSON.stringify(id) + ': ' + sources[module][id].toString() }).join(',') + '});\\n'\n })\n\n src = src + '(' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(moduleId)) + ')({' + requiredModules.main.map(function (id) { return '' + JSON.stringify(id) + ': ' + sources.main[id].toString() }).join(',') + '})(self);'\n\n var blob = new window.Blob([src], { type: 'text/javascript' })\n if (options.bare) { return blob }\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL\n\n var workerUrl = URL.createObjectURL(blob)\n var worker = new window.Worker(workerUrl)\n worker.objectURL = workerUrl\n\n return worker\n}\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n// The low-level RushCore module provides the heart of Rusha,\n// a high-speed sha1 implementation working on an Int32Array heap.\n// At first glance, the implementation seems complicated, however\n// with the SHA1 spec at hand, it is obvious this almost a textbook\n// implementation that has a few functions hand-inlined and a few loops\n// hand-unrolled.\nmodule.exports = function RushaCore(stdlib$840, foreign$841, heap$842) {\n 'use asm';\n var H$843 = new stdlib$840.Int32Array(heap$842);\n function hash$844(k$845, x$846) {\n // k in bytes\n k$845 = k$845 | 0;\n x$846 = x$846 | 0;\n var i$847 = 0, j$848 = 0, y0$849 = 0, z0$850 = 0, y1$851 = 0, z1$852 = 0, y2$853 = 0, z2$854 = 0, y3$855 = 0, z3$856 = 0, y4$857 = 0, z4$858 = 0, t0$859 = 0, t1$860 = 0;\n y0$849 = H$843[x$846 + 320 >> 2] | 0;\n y1$851 = H$843[x$846 + 324 >> 2] | 0;\n y2$853 = H$843[x$846 + 328 >> 2] | 0;\n y3$855 = H$843[x$846 + 332 >> 2] | 0;\n y4$857 = H$843[x$846 + 336 >> 2] | 0;\n for (i$847 = 0; (i$847 | 0) < (k$845 | 0); i$847 = i$847 + 64 | 0) {\n z0$850 = y0$849;\n z1$852 = y1$851;\n z2$854 = y2$853;\n z3$856 = y3$855;\n z4$858 = y4$857;\n for (j$848 = 0; (j$848 | 0) < 64; j$848 = j$848 + 4 | 0) {\n t1$860 = H$843[i$847 + j$848 >> 2] | 0;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 & y2$853 | ~y1$851 & y3$855) | 0) + ((t1$860 + y4$857 | 0) + 1518500249 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[k$845 + j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 64 | 0; (j$848 | 0) < (k$845 + 80 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 & y2$853 | ~y1$851 & y3$855) | 0) + ((t1$860 + y4$857 | 0) + 1518500249 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 80 | 0; (j$848 | 0) < (k$845 + 160 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 ^ y2$853 ^ y3$855) | 0) + ((t1$860 + y4$857 | 0) + 1859775393 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 160 | 0; (j$848 | 0) < (k$845 + 240 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 & y2$853 | y1$851 & y3$855 | y2$853 & y3$855) | 0) + ((t1$860 + y4$857 | 0) - 1894007588 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 240 | 0; (j$848 | 0) < (k$845 + 320 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 ^ y2$853 ^ y3$855) | 0) + ((t1$860 + y4$857 | 0) - 899497514 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n y0$849 = y0$849 + z0$850 | 0;\n y1$851 = y1$851 + z1$852 | 0;\n y2$853 = y2$853 + z2$854 | 0;\n y3$855 = y3$855 + z3$856 | 0;\n y4$857 = y4$857 + z4$858 | 0;\n }\n H$843[x$846 + 320 >> 2] = y0$849;\n H$843[x$846 + 324 >> 2] = y1$851;\n H$843[x$846 + 328 >> 2] = y2$853;\n H$843[x$846 + 332 >> 2] = y3$855;\n H$843[x$846 + 336 >> 2] = y4$857;\n }\n return { hash: hash$844 };\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\nvar _this = this;\n\n/* eslint-env commonjs, browser */\n\nvar reader = void 0;\nif (typeof self !== 'undefined' && typeof self.FileReaderSync !== 'undefined') {\n reader = new self.FileReaderSync();\n}\n\n// Convert a binary string and write it to the heap.\n// A binary string is expected to only contain char codes < 256.\nvar convStr = function (str, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n switch (om) {\n case 0:\n H8[off] = str.charCodeAt(start + 3);\n case 1:\n H8[off + 1 - (om << 1) | 0] = str.charCodeAt(start + 2);\n case 2:\n H8[off + 2 - (om << 1) | 0] = str.charCodeAt(start + 1);\n case 3:\n H8[off + 3 - (om << 1) | 0] = str.charCodeAt(start);\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2] = str.charCodeAt(start + i) << 24 | str.charCodeAt(start + i + 1) << 16 | str.charCodeAt(start + i + 2) << 8 | str.charCodeAt(start + i + 3);\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = str.charCodeAt(start + j + 2);\n case 2:\n H8[off + j + 2 | 0] = str.charCodeAt(start + j + 1);\n case 1:\n H8[off + j + 3 | 0] = str.charCodeAt(start + j);\n }\n};\n\n// Convert a buffer or array and write it to the heap.\n// The buffer or array is expected to only contain elements < 256.\nvar convBuf = function (buf, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n switch (om) {\n case 0:\n H8[off] = buf[start + 3];\n case 1:\n H8[off + 1 - (om << 1) | 0] = buf[start + 2];\n case 2:\n H8[off + 2 - (om << 1) | 0] = buf[start + 1];\n case 3:\n H8[off + 3 - (om << 1) | 0] = buf[start];\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2 | 0] = buf[start + i] << 24 | buf[start + i + 1] << 16 | buf[start + i + 2] << 8 | buf[start + i + 3];\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = buf[start + j + 2];\n case 2:\n H8[off + j + 2 | 0] = buf[start + j + 1];\n case 1:\n H8[off + j + 3 | 0] = buf[start + j];\n }\n};\n\nvar convBlob = function (blob, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n var buf = new Uint8Array(reader.readAsArrayBuffer(blob.slice(start, start + len)));\n switch (om) {\n case 0:\n H8[off] = buf[3];\n case 1:\n H8[off + 1 - (om << 1) | 0] = buf[2];\n case 2:\n H8[off + 2 - (om << 1) | 0] = buf[1];\n case 3:\n H8[off + 3 - (om << 1) | 0] = buf[0];\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2 | 0] = buf[i] << 24 | buf[i + 1] << 16 | buf[i + 2] << 8 | buf[i + 3];\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = buf[j + 2];\n case 2:\n H8[off + j + 2 | 0] = buf[j + 1];\n case 1:\n H8[off + j + 3 | 0] = buf[j];\n }\n};\n\nmodule.exports = function (data, H8, H32, start, len, off) {\n if (typeof data === 'string') {\n return convStr(data, H8, H32, start, len, off);\n }\n if (data instanceof Array) {\n return convBuf(data, H8, H32, start, len, off);\n }\n // Safely doing a Buffer check using \"this\" to avoid Buffer polyfill to be included in the dist\n if (_this && _this.Buffer && _this.Buffer.isBuffer(data)) {\n return convBuf(data, H8, H32, start, len, off);\n }\n if (data instanceof ArrayBuffer) {\n return convBuf(new Uint8Array(data), H8, H32, start, len, off);\n }\n if (data.buffer instanceof ArrayBuffer) {\n return convBuf(new Uint8Array(data.buffer, data.byteOffset, data.byteLength), H8, H32, start, len, off);\n }\n if (data instanceof Blob) {\n return convBlob(data, H8, H32, start, len, off);\n }\n throw new Error('Unsupported data type.');\n};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-env commonjs, browser */\n\nvar Rusha = __webpack_require__(0);\n\nvar _require = __webpack_require__(1),\n toHex = _require.toHex;\n\nvar Hash = function () {\n function Hash() {\n _classCallCheck(this, Hash);\n\n this._rusha = new Rusha();\n this._rusha.resetState();\n }\n\n Hash.prototype.update = function update(data) {\n this._rusha.append(data);\n return this;\n };\n\n Hash.prototype.digest = function digest(encoding) {\n var digest = this._rusha.rawEnd().buffer;\n if (!encoding) {\n return digest;\n }\n if (encoding === 'hex') {\n return toHex(digest);\n }\n throw new Error('unsupported digest encoding');\n };\n\n _createClass(Hash, [{\n key: 'state',\n get: function () {\n return this._rusha.getState();\n },\n set: function (state) {\n this._rusha.setState(state);\n }\n }]);\n\n return Hash;\n}();\n\nmodule.exports = function () {\n return new Hash();\n};\n\n/***/ })\n/******/ ]);\n});","import { ref } from 'vue'\nimport type { CancelTokenSource } from 'axios'\nimport axios from 'axios'\nimport { i18n } from '@/plugins/i18n'\nimport {\n type AnzuApiValidationResponseData,\n axiosErrorResponseHasValidationData,\n} from '@/model/error/AnzuApiValidationError'\nimport { type UploadQueueItem, UploadQueueItemStatus } from '@/types/coreDam/UploadQueue'\nimport { NEW_LINE_MARK } from '@/composables/system/alerts'\nimport { isUndefined } from '@/utils/common'\nimport { useDamUploadChunkSize } from '@/components/damImage/uploadQueue/composables/damUploadChunkSize'\nimport { damUploadChunk, damUploadFinish, damUploadStart } from '@/components/damImage/uploadQueue/api/uploadApi'\nimport {\n useCommonAdminCoreDamOptions,\n useCommonAdminCoreDamOptionsGlobal,\n} from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport rusha from 'rusha'\n\n// const CHUNK_MAX_RETRY = 6\nconst CHUNK_MAX_RETRY = 4\nconst SPEED_CHECK_INTERVAL = 1000\nconst CHUNK_RETRY_INTERVAL = 1000\nconst CHUNK_RETRY_MULTIPLY = 3\n\nconst failUpload = async (queueItem: UploadQueueItem, error: unknown = null) => {\n throw error\n}\n\nconst finishUpload = async (queueItem: UploadQueueItem, sha: string) => {\n const { damClient } = useCommonAdminCoreDamOptions()\n const { uploadStatusFallback } = useCommonAdminCoreDamOptionsGlobal()\n return await damUploadFinish(damClient, queueItem, sha, uploadStatusFallback)\n}\n\nconst handleValidationErrorMessage = (error: Error | any) => {\n const { t } = i18n.global || i18n\n if (!error || !error.response || !error.response.data) {\n // @ts-ignore\n return t('common.damImage.uploadErrors.unknownError')\n }\n const data = error.response.data as AnzuApiValidationResponseData\n const errorMessages: string[] = []\n for (const [key, values] of Object.entries(data.fields)) {\n switch (key) {\n case 'size':\n errorMessages.push(t('common.damImage.uploadErrors.size'))\n break\n case 'offset':\n errorMessages.push(t('common.damImage.uploadErrors.offset'))\n break\n case 'mimeType':\n errorMessages.push(t('common.damImage.uploadErrors.mimeType'))\n break\n default:\n // @ts-ignore\n errorMessages.push(t('common.damImage.uploadErrors.systemError') + ': ' + key + ' - ' + values.join(','))\n }\n }\n return errorMessages.length > 0 ? errorMessages.join(NEW_LINE_MARK) : t('common.damImage.uploadErrors.unknownError')\n}\n\nconst readFile = async (offset: number, size: number, file: File): Promise<{ data: string; offset: number }> => {\n return new Promise((resolve, reject) => {\n const partial = file.slice(offset, offset + size)\n const reader = new FileReader()\n reader.onload = function (e) {\n if (e.target?.readyState === FileReader.DONE) {\n resolve({ data: e.target.result as string, offset: offset })\n }\n }\n reader.onerror = function (e) {\n reject(e)\n }\n reader.readAsArrayBuffer(partial)\n })\n}\n\nconst sleep = (ms: number) => {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport function useUpload(queueItem: UploadQueueItem, uploadCallback: any = undefined) {\n const { damClient } = useCommonAdminCoreDamOptions()\n const fileSize = ref(0)\n\n const progress = ref(0)\n\n let speedStack: any[] = []\n let lastTimestamp = 0\n let endTimestamp = 0\n let lastLoaded = 0\n const sha = rusha.createHash()\n const { updateChunkSize, lastChunkSize } = useDamUploadChunkSize()\n\n const getCurrentTimestamp = () => {\n return Date.now() / 1000\n }\n\n // @ts-ignore\n function progressCallback(progressEvent) {\n const currentStamp = getCurrentTimestamp()\n if (lastTimestamp === 0) {\n lastTimestamp = currentStamp\n\n return\n }\n\n const dataSent = lastLoaded > 0 ? progressEvent.loaded - lastLoaded : progressEvent.loaded\n lastLoaded = progressEvent.total === progressEvent.loaded ? 0 : progressEvent.loaded\n speedStack.push(dataSent / (currentStamp - lastTimestamp))\n\n lastTimestamp = currentStamp\n }\n\n const uploadChunk = async (chunkFile: File, offset: number) => {\n return new Promise((resolve, reject) => {\n if (!queueItem.fileId) {\n reject()\n return\n }\n damUploadChunk(\n damClient,\n queueItem,\n queueItem.fileId,\n chunkFile as unknown as string, // todo check\n chunkFile.size,\n offset,\n progressCallback\n )\n .then((result) => {\n resolve(result)\n })\n .catch((exception) => {\n reject(exception)\n })\n })\n }\n\n const processAndUploadChunk = async (offset: number): Promise<File> => {\n updateChunkSize(queueItem.progress.speed)\n let arrayBuffer: { data: string; offset: number } = await readFile(offset, lastChunkSize.value, queueItem.file!)\n let chunkFile = new File([arrayBuffer.data], queueItem.file!.name)\n\n queueItem.currentChunkIndex = offset\n const cancelToken = axios.CancelToken\n queueItem.latestChunkCancelToken = cancelToken.source()\n\n let sleepTime = CHUNK_RETRY_INTERVAL\n let attempt = 0\n do {\n attempt++\n try {\n await uploadChunk(chunkFile, offset)\n sha.update(arrayBuffer.data)\n\n return chunkFile\n } catch (error) {\n // in error recompute\n if (axiosErrorResponseHasValidationData(error as Error)) {\n attempt = CHUNK_MAX_RETRY\n queueItem.error.message = handleValidationErrorMessage(error)\n return Promise.reject(error)\n }\n\n if (updateChunkSize(queueItem.progress.speed)) {\n arrayBuffer = await readFile(offset, lastChunkSize.value, queueItem.file!)\n chunkFile = new File([arrayBuffer.data], queueItem.file!.name)\n }\n\n await sleep(sleepTime)\n attempt === CHUNK_MAX_RETRY - 1 ? (sleepTime = 1) : (sleepTime *= CHUNK_RETRY_MULTIPLY)\n }\n } while (attempt < CHUNK_MAX_RETRY)\n return Promise.reject('Unable to upload chunk, max tries exceeded')\n }\n\n function speedCheck() {\n function speedCheckRun() {\n speedStack = speedStack.slice(-15)\n if (speedStack.length > 0) {\n const avgSpeed = Math.ceil(speedStack.reduce((sum, current) => sum + current) / speedStack.length)\n const remainingBytes = Math.ceil(fileSize.value * ((100 - progress.value) / 100))\n\n uploadCallback(progress.value, avgSpeed, Math.ceil(remainingBytes / avgSpeed))\n }\n\n if (endTimestamp === 0) {\n setTimeout(function () {\n speedCheckRun()\n }, SPEED_CHECK_INTERVAL)\n }\n }\n\n speedCheckRun()\n }\n\n const uploadInit = async () => {\n return new Promise((resolve, reject) => {\n if (!queueItem.file || queueItem.file.size < 1) {\n failUpload(queueItem)\n return\n }\n fileSize.value = queueItem.file.size\n queueItem.status = UploadQueueItemStatus.Uploading\n damUploadStart(damClient, queueItem)\n .then((res) => {\n queueItem.assetId = res.asset\n queueItem.fileId = res.id\n resolve(queueItem)\n })\n .catch((err) => {\n reject(err)\n })\n })\n }\n\n const upload = async () => {\n if (uploadCallback) {\n speedCheck()\n }\n\n const filesize = queueItem.file?.size\n if (isUndefined(filesize)) return Promise.reject()\n\n let i = 0\n while (i < filesize) {\n const uploadedChunk = await processAndUploadChunk(i)\n i += uploadedChunk.size\n progress.value = (i / filesize) * 100\n }\n\n endTimestamp = Date.now() / 1000\n return await finishUpload(queueItem, sha.digest('hex'))\n }\n\n return {\n uploadInit,\n upload,\n }\n}\n\nexport const uploadStop = (cancelTokenSource: CancelTokenSource) => {\n // todo stop speed check\n cancelTokenSource.cancel('axios request cancelled')\n}\n","import { type EventBusKey, useEventBus } from '@vueuse/core'\nimport type { DocId } from '@/types/common'\nimport type { AssetFileFailReason, AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport type { DamAssetType, DamDistributionServiceName } from '@/types/coreDam/Asset'\nimport type { DamDistributionStatus } from '@/types/coreDam/DamConfig'\n\nexport const damNotificationsEventBusKey: EventBusKey<DamNotification> = Symbol('anzu:damNotificationsEventBusKey')\n\nexport function useDamNotificationsEventBus() {\n return useEventBus<DamNotification>(damNotificationsEventBusKey)\n}\n\nexport const DamNotificationName = {\n AssetFileProcessed: 'asset_file_processed',\n AssetFileFailed: 'asset_file_failed',\n AssetFileDuplicate: 'asset_file_duplicate',\n AssetFileUploaded: 'asset_file_uploaded',\n AssetFileDeleted: 'asset_file_deleted',\n AssetMetadataProcessed: 'asset_metadata_processed',\n AssetDeleted: 'asset_deleted',\n DistributionDistributing: 'distribution_distributing',\n DistributionRemoteProcessing: 'distribution_remote_processing',\n DistributionDistributed: 'distribution_distributed',\n DistributionFailed: 'distribution_failed',\n DistributionAuthorized: 'distribution_authorized',\n UserUpdated: 'user_updated',\n} as const\n\nexport type DamNotificationNameType = (typeof DamNotificationName)[keyof typeof DamNotificationName]\n\ntype DamNotificationEvent<T extends DamNotificationNameType, P> = {\n name: T\n data: P\n}\n\ninterface DamNotificationAssetFileData {\n id: DocId\n asset: DocId\n}\n\ninterface DamNotificationAssetFileStatusData {\n id: DocId\n asset: DocId\n status: AssetFileProcessStatus\n failReason: AssetFileFailReason\n assetType: DamAssetType\n originAssetFile: DocId\n}\n\ninterface DamNotificationDistributionData {\n id: DocId\n asset: DocId\n assetFile: DocId\n status: DamDistributionStatus\n}\n\ninterface DamNotificationAssetData {\n asset: DocId\n}\n\ntype DamNotificationAssetFileProcessed = DamNotificationEvent<\n typeof DamNotificationName.AssetFileProcessed,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileFailed = DamNotificationEvent<\n typeof DamNotificationName.AssetFileFailed,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileDuplicate = DamNotificationEvent<\n typeof DamNotificationName.AssetFileDuplicate,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileUploaded = DamNotificationEvent<\n typeof DamNotificationName.AssetFileUploaded,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileDeleted = DamNotificationEvent<\n typeof DamNotificationName.AssetFileDeleted,\n DamNotificationAssetFileData\n>\n\ntype DamNotificationAssetMetadataProcessed = DamNotificationEvent<\n typeof DamNotificationName.AssetMetadataProcessed,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetDeleted = DamNotificationEvent<\n typeof DamNotificationName.AssetDeleted,\n DamNotificationAssetData\n>\n\ntype DamNotificationDistributionDistributing = DamNotificationEvent<\n typeof DamNotificationName.DistributionDistributing,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionRemoteProcessing = DamNotificationEvent<\n typeof DamNotificationName.DistributionRemoteProcessing,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionDistributed = DamNotificationEvent<\n typeof DamNotificationName.DistributionDistributed,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionFailed = DamNotificationEvent<\n typeof DamNotificationName.DistributionFailed,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionAuthorized = DamNotificationEvent<\n typeof DamNotificationName.DistributionAuthorized,\n {\n distributionService: DamDistributionServiceName\n success: boolean\n }\n>\n\ntype DamNotificationUserUpdated = DamNotificationEvent<typeof DamNotificationName.UserUpdated, undefined>\n\nexport type DamNotification =\n | DamNotificationAssetFileProcessed\n | DamNotificationAssetFileFailed\n | DamNotificationAssetFileDuplicate\n | DamNotificationAssetFileUploaded\n | DamNotificationAssetFileDeleted\n | DamNotificationAssetMetadataProcessed\n | DamNotificationAssetDeleted\n | DamNotificationDistributionDistributing\n | DamNotificationDistributionRemoteProcessing\n | DamNotificationDistributionDistributed\n | DamNotificationDistributionFailed\n | DamNotificationDistributionAuthorized\n | DamNotificationUserUpdated\n\n","import { useWebSocket } from '@vueuse/core'\nimport { ref } from 'vue'\nimport { i18n } from '@/plugins/i18n'\nimport { useAlerts } from '@/composables/system/alerts'\nimport {\n type DamNotification,\n useDamNotificationsEventBus,\n} from '@/components/damImage/uploadQueue/composables/damNotificationsEventBus'\nimport { useCommonAdminCoreDamOptionsGlobal } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\n\nconst { t } = i18n.global || i18n\n\nconst damNotificationsInitialized = ref(false)\n\nexport function initDamNotifications() {\n const { notification } = useCommonAdminCoreDamOptionsGlobal()\n\n const enabled = notification.enabled && notification.webSocketUrl.length > 0\n\n const { open, ws } = useWebSocket(notification.webSocketUrl, {\n immediate: false,\n autoReconnect: {\n retries: 10,\n delay: 5000,\n },\n heartbeat: {\n interval: 4000,\n },\n })\n\n const openConnection = () => {\n console.log('openConnection', enabled)\n damNotificationsInitialized.value = true\n if (!enabled) return\n const eventBus = useDamNotificationsEventBus()\n open()\n if (!ws.value) return\n ws.value.onopen = function (this: WebSocket, event: Event) {\n console.log('ws dam notification-server open', event)\n }\n ws.value.onerror = function (this: WebSocket, event: Event) {\n const { showWarning } = useAlerts()\n setTimeout(() => {\n showWarning(t('common.damImage.notificationsNotConnected'), -1)\n }, 3000)\n console.log('ws dam notification-server error', event)\n }\n ws.value.onmessage = function (this: WebSocket, event: MessageEvent) {\n const message = JSON.parse(event.data as string)\n const data = message.data.length ? JSON.parse(message.data) : undefined\n console.log(message.eventName, data)\n eventBus.emit({ name: message.eventName, data })\n }\n }\n\n return {\n openConnection,\n damNotificationsInitialized,\n }\n}\n\nexport function useDamNotifications() {\n const eventBus = useDamNotificationsEventBus()\n\n const addDamNotificationListener = (callback: (event: DamNotification) => void) => {\n return eventBus.on(callback)\n }\n\n return {\n addDamNotificationListener,\n }\n}\n","import type { AssetMetadataSuggestions } from '@/types/coreDam/Asset'\nimport { isArray, isEmptyObject } from '@/utils/common'\nimport type { DocId } from '@/types/common'\n\nexport function useAssetSuggestions() {\n const updateNewNames = (suggestions: AssetMetadataSuggestions, newNames: Set<string>) => {\n for (const [key, value] of Object.entries(suggestions)) {\n if (isEmptyObject(value)) {\n newNames.add(key)\n }\n }\n }\n\n const getAuthorConflicts = (suggestions: AssetMetadataSuggestions) => {\n const conflicts: Array<DocId> = []\n for (const value of Object.values(suggestions)) {\n if (isArray(value) && value.length > 1) {\n value.forEach((id) => {\n conflicts.push(id)\n })\n }\n }\n return conflicts\n }\n\n return {\n updateNewNames,\n getAuthorConflicts,\n }\n}\n\n","import { type Ref, ref } from 'vue'\nimport { useDebounceFn } from '@vueuse/core'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { isArray, isNull, isUndefined } from '@/utils/common'\n\nexport type CachedItem<T extends object> = T & { _loaded: boolean }\n\nexport type AddToCachedArgs<T extends DocId | IntegerId> =\n | Array<T | null | undefined>\n | Array<Array<T | null | undefined> | T | null | undefined>\n\n/**\n * @template I Identifier type\n * @template T Source type\n * @template M Minimal type\n */\nexport function defineCached<\n I extends DocId | IntegerId,\n T extends Record<DocId | IntegerId, any>,\n M extends Record<DocId | IntegerId, any>,\n>(\n mapFullToMinimal: (source: T) => M,\n mapIdToMinimal: (id: I) => M,\n fetchCallback: (ids: I[]) => Promise<T[]>,\n idProp = 'id'\n) {\n const cache: Ref<Map<I, CachedItem<M>>> = ref(new Map()) // todo check\n const toFetch = ref(new Set()) as Ref<Set<I>> // todo check\n\n const add = (...args: AddToCachedArgs<I>) => {\n const toAdd = <Set<I>>new Set()\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]\n if (isNull(arg) || isUndefined(arg)) continue\n if (isArray(arg)) {\n for (let j = 0; j < arg.length; j++) {\n const item = arg[j]\n if (isNull(item) || isUndefined(item)) continue\n if (!cache.value.has(item)) toAdd.add(item)\n }\n continue\n }\n if (!cache.value.has(arg)) toAdd.add(arg)\n }\n toAdd.forEach((id) => {\n cache.value.set(id, { ...mapIdToMinimal(id), ...{ _loaded: false } })\n toFetch.value.add(id)\n })\n }\n\n const addManual = (data: T) => {\n if (data[idProp]) {\n cache.value.set(data[idProp] as I, { ...mapFullToMinimal(data), ...{ _loaded: true } })\n }\n }\n\n const addManualMinimal = (data: M) => {\n if (data[idProp]) {\n cache.value.set(data[idProp] as I, { ...data, ...{ _loaded: true } })\n }\n }\n\n const updateMap = (data: T[]) => {\n for (let i = 0; i < data.length; i += 1) {\n cache.value.set(data[i][idProp] as I, { ...mapFullToMinimal(data[i]), ...{ _loaded: true } })\n }\n }\n\n const updateToFetch = (ids: Array<I>) => {\n for (let i = 0; i < ids.length; i += 1) {\n toFetch.value.delete(ids[i])\n }\n }\n\n async function apiFetch() {\n if (toFetch.value.size > 0) {\n const ids = Array.from(toFetch.value)\n const res = await fetchCallback(ids)\n updateToFetch(ids)\n updateMap(res)\n return res\n }\n return []\n }\n\n const debouncedFetch = useDebounceFn(\n async () => {\n return await apiFetch()\n },\n 1500,\n { maxWait: 5000 }\n )\n\n /**\n * Debounced fetch for best performance.\n * For general usage.\n */\n const fetch = () => {\n return debouncedFetch()\n }\n\n /**\n * Immediate fetch with no debounce and with result in promise.\n * Use for special cases.\n */\n const immediateFetch = () => {\n return apiFetch()\n }\n\n const get = (id: I | null | undefined) => {\n if (!id) return undefined\n return cache.value.get(id)\n }\n\n const has = (id: I | null | undefined): boolean => {\n if (!id) return false\n return cache.value.has(id)\n }\n\n const isLoaded = (id: I | null | undefined): boolean => {\n if (!id) return false\n const item = cache.value.get(id)\n if (!item) return false\n return item._loaded\n }\n\n return {\n cache,\n toFetch,\n fetch,\n immediateFetch,\n add,\n addManual,\n addManualMinimal,\n has,\n get,\n isLoaded,\n }\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { useApiQueryBuilder } from '@/services/api/queryBuilder'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nconst generateByIdsApiQuery = (ids: number[] | string[], isSearchApi: boolean): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, queryAddFilter, queryAdd } = useApiQueryBuilder()\n const limit = ids.length\n querySetLimit(limit)\n querySetOffset(1, limit)\n querySetOrder('id', false)\n if (isSearchApi) queryAdd('id', ids.join(','))\n else queryAddFilter('in', 'id', ids.join(','))\n\n return queryBuild()\n}\n\nexport const apiFetchByIds = <T, R = T>(\n client: () => AxiosInstance,\n ids: string[] | number[],\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {},\n isSearchApi = false\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .get(replaceUrlParameters(urlTemplate, urlParams) + generateByIdsApiQuery(ids, isSearchApi), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data?.data) {\n return resolve(res.data.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiCreateOne = <T, R = T>(\n client: () => AxiosInstance,\n object: T | Record<string, never> = {},\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .post(replaceUrlParameters(urlTemplate, urlParams), JSON.stringify(object), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import type { AxiosInstance } from 'axios'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\n\nconst END_POINT = '/adm/v1/keyword'\nconst END_POINT_LIST = END_POINT + '/ext-system/:extSystemId'\nexport const ENTITY = 'keyword'\n\nexport const fetchKeywordListByIds = (client: () => AxiosInstance, extSystemId: number, ids: string[]) =>\n apiFetchByIds<DamKeyword[]>(\n client,\n ids,\n END_POINT_LIST + '/search',\n { extSystemId },\n SYSTEM_CORE_DAM,\n ENTITY,\n {},\n true\n )\n\nexport const fetchKeywordList = (\n client: () => AxiosInstance,\n extSystemId: number,\n pagination: Pagination,\n filterBag: FilterBag\n) => apiFetchList<DamKeyword[]>(client, END_POINT_LIST, { extSystemId }, pagination, filterBag, SYSTEM_CORE_DAM, ENTITY)\n\nexport const createKeyword = (client: () => AxiosInstance, data: DamKeyword) =>\n apiCreateOne<DamKeyword>(client, data, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\n","import type { DocId } from '@/types/common'\nimport { defineCached } from '@/composables/system/defineCached'\nimport type { DamKeyword, DamKeywordMinimal } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { fetchKeywordListByIds } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { isNull } from '@/utils/common'\n\nconst mapFullToMinimal = (keyword: DamKeyword): DamKeywordMinimal => ({\n id: keyword.id,\n name: keyword.name,\n})\n\nconst mapIdToMinimal = (id: DocId): DamKeywordMinimal => {\n return { id: id, name: '' }\n}\n\nconst { cache, toFetch, fetch, add, addManual, addManualMinimal, has, get, isLoaded } = defineCached<\n DocId,\n DamKeyword,\n DamKeywordMinimal\n>(mapFullToMinimal, mapIdToMinimal, (ids) => {\n const { initialized } = useDamConfigState()\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n const { damClient } = useCommonAdminCoreDamOptions()\n return fetchKeywordListByIds(damClient, initialized.damConfigExtSystem, ids)\n})\n\nexport const useDamCachedKeywords = () => {\n return {\n addManualToCachedKeywords: addManual,\n addManualMinimalToCachedKeywords: addManualMinimal,\n addToCachedKeywords: add,\n fetchCachedKeywords: fetch,\n toFetchCachedKeywords: toFetch,\n cachedKeywords: cache,\n hasCachedKeyword: has,\n getCachedKeyword: get,\n isLoadedCachedKeyword: isLoaded,\n }\n}\n\nexport const useCachedKeywordsForRemoteAutocomplete = () => {\n return {\n fetch,\n add,\n addManualMinimal,\n }\n}\n","import type { AxiosInstance } from 'axios'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\n\nconst END_POINT = '/adm/v1/author'\nconst END_POINT_LIST = END_POINT + '/ext-system/:extSystemId'\nexport const ENTITY = 'author'\n\nexport const fetchAuthorListByIds = (client: () => AxiosInstance, extSystemId: number, ids: string[]) =>\n apiFetchByIds<DamAuthor[]>(\n client,\n ids,\n END_POINT_LIST + '/search',\n {\n extSystemId,\n },\n SYSTEM_CORE_DAM,\n ENTITY,\n {},\n true\n )\n\nexport const fetchAuthorList = (\n client: () => AxiosInstance,\n extSystemId: number,\n pagination: Pagination,\n filterBag: FilterBag\n) =>\n apiFetchList<DamAuthor[]>(\n client,\n END_POINT_LIST,\n {\n extSystemId,\n },\n pagination,\n filterBag,\n SYSTEM_CORE_DAM,\n ENTITY\n )\n\nexport const createAuthor = (client: () => AxiosInstance, data: DamAuthor) =>\n apiCreateOne<DamAuthor>(client, data, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\n","import type { DocId } from '@/types/common'\nimport { defineCached } from '@/composables/system/defineCached'\nimport type { DamAuthor, DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { isNull } from '@/utils/common'\n\nconst mapFullToMinimal = (author: DamAuthor): DamAuthorMinimal => ({\n id: author.id,\n name: author.name,\n identifier: author.identifier,\n})\n\nconst mapIdToMinimal = (id: DocId): DamAuthorMinimal => {\n return { id: id, name: '', identifier: '' }\n}\n\nconst { cache, toFetch, fetch, add, addManual, addManualMinimal, has, get, isLoaded } = defineCached<\n DocId,\n DamAuthor,\n DamAuthorMinimal\n>(mapFullToMinimal, mapIdToMinimal, (ids) => {\n const { initialized } = useDamConfigState()\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n const { damClient } = useCommonAdminCoreDamOptions()\n return fetchAuthorListByIds(damClient, initialized.damConfigExtSystem, ids)\n})\n\nexport const useDamCachedAuthors = () => {\n return {\n addManualToCachedAuthors: addManual,\n addManualMinimalToCachedAuthors: addManualMinimal,\n addToCachedAuthors: add,\n fetchCachedAuthors: fetch,\n toFetchCachedAuthors: toFetch,\n cachedAuthors: cache,\n hasCachedAuthor: has,\n getCachedAuthor: get,\n isLoadedCachedAuthor: isLoaded,\n }\n}\n\nexport const useDamCachedAuthorsForRemoteAutocomplete = () => {\n return {\n fetch,\n add,\n addManualMinimal,\n }\n}\n","import { defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport type { DocId, DocIdNullable, IntegerId } from '@/types/common'\nimport { damFileTypeFix } from '@/components/file/composables/fileType'\nimport {\n type UploadQueue,\n type UploadQueueItem,\n UploadQueueItemStatus,\n UploadQueueItemType,\n type UploadQueueKey,\n} from '@/types/coreDam/UploadQueue'\nimport { useUploadQueueItemFactory } from '@/components/damImage/uploadQueue/composables/UploadQueueItemFactory'\nimport { getAssetTypeByMimeType } from '@/components/damImage/uploadQueue/composables/mimeTypeHelper'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { uploadStop, useUpload } from '@/components/damImage/uploadQueue/composables/uploadService'\nimport { type AssetDetailItemDto, DamAssetType } from '@/types/coreDam/Asset'\nimport type { AssetFileFailReason } from '@/types/coreDam/AssetFile'\nimport { DamNotificationName } from '@/components/damImage/uploadQueue/composables/damNotificationsEventBus'\nimport { useDamNotifications } from '@/components/damImage/uploadQueue/composables/damNotifications'\nimport { fetchAsset, fetchAssetByFileId } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useAssetSuggestions } from '@/components/damImage/uploadQueue/composables/assetSuggestions'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport { isNull } from '@/utils/common'\n\nconst QUEUE_MAX_PARALLEL_UPLOADS = 2\nconst QUEUE_CHUNK_SIZE = 10485760\n\nexport const useUploadQueuesStore = defineStore('commonUploadQueuesStore', () => {\n const { addToCachedKeywords, fetchCachedKeywords } = useDamCachedKeywords()\n const { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors()\n\n const queues = ref<Map<UploadQueueKey, UploadQueue>>(new Map())\n\n const { createDefault } = useUploadQueueItemFactory()\n\n const { damClient } = useCommonAdminCoreDamOptions()\n const { addDamNotificationListener } = useDamNotifications()\n addDamNotificationListener((event) => {\n switch (event.name) {\n case DamNotificationName.AssetFileProcessed:\n queueItemProcessed(event.data.asset)\n break\n case DamNotificationName.AssetFileFailed:\n queueItemFailed(event.data.asset, event.data.failReason)\n break\n case DamNotificationName.AssetFileDuplicate:\n queueItemDuplicate(event.data.asset, event.data.originAssetFile, event.data.assetType)\n break\n case DamNotificationName.AssetMetadataProcessed:\n queueItemMetadataProcessed(event.data.asset)\n break\n }\n })\n\n function getQueue(queueKey: UploadQueueKey) {\n if (queues.value.has(queueKey)) {\n return queues.value.get(queueKey)\n }\n return null\n }\n\n function getQueueItems(queueKey: UploadQueueKey) {\n if (queues.value.has(queueKey)) {\n return queues.value.get(queueKey)?.items || []\n }\n return []\n }\n\n async function addByFiles(queueKey: UploadQueueKey, assetLicence: IntegerId, files: File[]) {\n const { damConfigExtSystem } = useDamConfigState()\n for await (const file of files) {\n const type = getAssetTypeByMimeType(damFileTypeFix(file), damConfigExtSystem.value)\n if (!type || type !== DamAssetType.Image) continue // only image now\n const queueItem = createDefault(\n 'file_' + file.name,\n UploadQueueItemType.File,\n UploadQueueItemStatus.Waiting,\n type,\n QUEUE_CHUNK_SIZE,\n assetLicence\n )\n queueItem.file = file\n queueItem.displayTitle = file.name\n createQueue(queueKey)\n addQueueItem(queueKey, queueItem)\n recalculateQueueCounts(queueKey)\n processUpload(queueKey)\n }\n }\n\n function addQueueItem(queueKey: UploadQueueKey, item: UploadQueueItem) {\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queue.items.push(item)\n }\n\n function createQueue(queueKey: UploadQueueKey) {\n if (!queues.value.has(queueKey)) {\n queues.value.set(queueKey, {\n items: [],\n totalCount: 0,\n processedCount: 0,\n fileInputKey: 0,\n suggestions: { newKeywordNames: new Set<string>(), newAuthorNames: new Set<string>() },\n })\n }\n }\n\n function recalculateQueueCounts(queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queue.totalCount = queue.items.length\n queue.processedCount =\n getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Uploaded).length +\n getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Failed).length\n }\n\n function getQueueItemsByStatus(queueKey: UploadQueueKey, status: UploadQueueItemStatus) {\n const queue = queues.value.get(queueKey)\n if (!queue) return []\n return queue.items.filter((item) => item.status === status)\n }\n\n function processUpload(queueKey: UploadQueueKey) {\n const waitingItems = getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Waiting)\n if (waitingItems.length === 0) {\n // upload finished\n return\n }\n const uploadingCount = getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Uploading).length\n if (uploadingCount === QUEUE_MAX_PARALLEL_UPLOADS) {\n // wait for empty upload slot\n return\n }\n for (let i = 0; i < QUEUE_MAX_PARALLEL_UPLOADS; i++) {\n if (waitingItems[i]) queueItemUploadStart(waitingItems[i], queueKey)\n }\n }\n\n async function queueItemUploadStart(item: UploadQueueItem, queueKey: UploadQueueKey) {\n const { upload, uploadInit } = useUpload(item, (progress: number, speed: number, estimate: number) => {\n setUploadSpeed(item, progress, speed, estimate)\n })\n try {\n await uploadInit()\n await upload()\n processUpload(queueKey)\n } catch (e) {\n item.error.hasError = true\n item.status = UploadQueueItemStatus.Failed\n recalculateQueueCounts(queueKey)\n processUpload(queueKey)\n }\n }\n\n function setUploadSpeed(item: UploadQueueItem, progress: number, speed: number, estimate: number) {\n item.progress.progressPercent = progress\n item.progress.remainingTime = estimate\n item.progress.speed = speed\n }\n\n async function queueItemProcessed(assetId: DocId) {\n try {\n const asset = await fetchAsset(damClient, assetId)\n if (!asset) return\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === asset.id && asset.mainFile) {\n clearTimeout(item.notificationFallbackTimer)\n item.status = UploadQueueItemStatus.Uploaded\n item.assetStatus = asset.attributes.assetStatus\n if (asset.mainFile.links?.image_detail) {\n item.imagePreview = asset.mainFile.links.image_detail\n }\n processUpload(queueKey)\n }\n })\n recalculateQueueCounts(queueKey)\n })\n } catch (e) {\n //\n }\n }\n\n async function queueItemDuplicate(\n assetId: DocId,\n originAssetFile: DocIdNullable = null,\n assetType: DamAssetType | null = null\n ) {\n const { updateNewNames, getAuthorConflicts } = useAssetSuggestions()\n if (!originAssetFile || !assetType || assetType !== DamAssetType.Image) return\n let assetRes: null | AssetDetailItemDto = null\n try {\n assetRes = await fetchAssetByFileId(damClient, originAssetFile)\n } catch (e) {\n throw new Error('Fatal error')\n }\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (isNull(assetRes)) return\n if (item.assetId === assetId) {\n clearTimeout(item.notificationFallbackTimer)\n item.isDuplicate = true\n item.status = UploadQueueItemStatus.Uploaded\n item.fileId = originAssetFile\n item.duplicateAssetId = assetRes.id\n item.assetStatus = assetRes.attributes.assetStatus\n if (assetRes.mainFile?.links?.image_detail) {\n item.imagePreview = assetRes.mainFile.links.image_detail\n }\n item.keywords = assetRes.keywords\n item.authors = assetRes.authors\n item.customData = assetRes.metadata.customData\n updateNewNames(assetRes.metadata.authorSuggestions, queue.suggestions.newAuthorNames)\n updateNewNames(assetRes.metadata.keywordSuggestions, queue.suggestions.newKeywordNames)\n item.authorConflicts = getAuthorConflicts(assetRes!.metadata.authorSuggestions)\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n addToCachedAuthors(item.authorConflicts)\n item.assetId = assetRes.id\n item.canEditMetadata = true\n processUpload(queueKey)\n }\n })\n recalculateQueueCounts(queueKey)\n fetchCachedAuthors()\n fetchCachedKeywords()\n })\n }\n\n async function queueItemFailed(assetId: DocId, failReason: AssetFileFailReason) {\n try {\n const asset = await fetchAsset(damClient, assetId)\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === asset.id) {\n clearTimeout(item.notificationFallbackTimer)\n item.error.hasError = true\n item.status = UploadQueueItemStatus.Failed\n item.error.assetFileFailReason = failReason\n item.canEditMetadata = false\n processUpload(queueKey)\n }\n })\n recalculateQueueCounts(queueKey)\n })\n } catch (e) {\n //\n }\n }\n\n async function queueItemMetadataProcessed(assetId: DocId) {\n const { updateNewNames, getAuthorConflicts } = useAssetSuggestions()\n try {\n const asset = await fetchAsset(damClient, assetId)\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === asset.id && item.type) {\n clearTimeout(item.notificationFallbackTimer)\n item.keywords = asset.keywords\n item.authors = asset.authors\n item.customData = asset.metadata.customData\n updateNewNames(asset.metadata.authorSuggestions, queue.suggestions.newAuthorNames)\n updateNewNames(asset.metadata.keywordSuggestions, queue.suggestions.newKeywordNames)\n item.authorConflicts = getAuthorConflicts(asset.metadata.authorSuggestions)\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n addToCachedAuthors(item.authorConflicts)\n item.canEditMetadata = true\n }\n })\n recalculateQueueCounts(queueKey)\n fetchCachedAuthors()\n fetchCachedKeywords()\n })\n } catch (e) {\n //\n }\n }\n\n function removeByIndex (queueKey: UploadQueueKey, index: number) {\n const queue = queues.value.get(queueKey)\n if (!queue || !queue.items[index]) return\n queue.items.splice(index, 1)\n recalculateQueueCounts(queueKey)\n }\n\n async function stopItemUpload(queueKey: UploadQueueKey, queueItem: UploadQueueItem, index: number) {\n const queue = queues.value.get(queueKey)\n if (!queue || queue.items.length === 0) return\n queueItem.status = UploadQueueItemStatus.Stop\n if (queueItem.latestChunkCancelToken) {\n uploadStop(queueItem.latestChunkCancelToken)\n }\n removeByIndex(queueKey, index)\n processUpload(queueKey)\n }\n\n async function updateFromDetail(asset: AssetDetailItemDto) {\n const { updateNewNames, getAuthorConflicts } = useAssetSuggestions()\n try {\n const assetRes = await fetchAsset(damClient, asset.id)\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === assetRes.id && item.type) {\n clearTimeout(item.notificationFallbackTimer)\n item.keywords = assetRes.keywords\n item.authors = assetRes.authors\n item.customData = assetRes.metadata.customData\n updateNewNames(assetRes.metadata.authorSuggestions, queue.suggestions.newAuthorNames)\n updateNewNames(assetRes.metadata.keywordSuggestions, queue.suggestions.newKeywordNames)\n item.authorConflicts = getAuthorConflicts(assetRes.metadata.authorSuggestions)\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n addToCachedAuthors(item.authorConflicts)\n }\n })\n recalculateQueueCounts(queueKey)\n fetchCachedAuthors()\n fetchCachedKeywords()\n })\n } catch (e) {\n //\n }\n }\n\n function getQueueTotalCount (queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return 0\n return queue.totalCount\n }\n\n function getQueueProcessedCount (queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return 0\n return queue.processedCount\n }\n\n function stopUpload (queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue || queue.items.length === 0) return\n const currentItems = getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Uploading)\n queue.items.forEach((item) => {\n item.status = UploadQueueItemStatus.Stop\n })\n if (currentItems.length > 0) {\n currentItems.forEach((item) => {\n if (item.latestChunkCancelToken) {\n uploadStop(item.latestChunkCancelToken)\n }\n })\n }\n clearQueue(queueKey)\n forceReloadFileInput(queueKey)\n }\n\n function forceReloadFileInput (queueKey: UploadQueueKey) {\n createQueue(queueKey)\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queue.fileInputKey++\n }\n\n function getQueueFileInputKey (queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return -1\n return queue.fileInputKey\n }\n\n function clearQueue(queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queues.value.set(queueKey, {\n items: [],\n totalCount: 0,\n processedCount: 0,\n fileInputKey: getQueueFileInputKey(queueKey) + 1,\n suggestions: { newKeywordNames: new Set<string>(), newAuthorNames: new Set<string>() },\n })\n }\n\n function getQueueItemsTypes(queueKey: UploadQueueKey) {\n const types: Array<DamAssetType> = []\n const queue = queues.value.get(queueKey)\n if (!queue) return types\n if (queue.items.length > 0) {\n for (let i = 0; i < queue.items.length; i++) {\n if (types.includes(queue.items[i].assetType)) {\n continue\n }\n types.push(queue.items[i].assetType)\n }\n }\n return types\n }\n\n return {\n getQueue,\n getQueueItems,\n addByFiles,\n queueItemProcessed,\n queueItemDuplicate,\n queueItemFailed,\n removeByIndex,\n stopItemUpload,\n getQueueTotalCount,\n getQueueProcessedCount,\n stopUpload,\n getQueueItemsTypes,\n updateFromDetail,\n }\n})\n","<script setup lang=\"ts\">\nimport { ref, watch, withModifiers } from 'vue'\nimport { isBoolean, isUndefined } from '@/utils/common'\nimport AFileDropzone from '@/components/file/AFileDropzone.vue'\nimport type { InputFileChangeEvent } from '@/types/ChangeEvent'\nimport { useFormatAndSizeCheck } from '@/components/file/composables/formatAndSizeCheck'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nconst props = withDefaults(\n defineProps<{\n fileInputKey?: number | undefined\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n multiple?: boolean\n useDropzone?: boolean\n dropzoneVariant?: 'fill' | 'default' | 'fullscreen'\n onDropzoneClickCallback?: (() => void) | undefined | false // false for disable, undefined for browse files, otherwise custom callback is used\n }>(),\n {\n fileInputKey: undefined,\n accept: undefined,\n maxSizes: undefined,\n multiple: true,\n useDropzone: false,\n dropzoneVariant: 'default',\n onDropzoneClickCallback: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'change', event: InputFileChangeEvent): void\n (e: 'filesInput', files: File[]): void\n}>()\n\nconst BLOCK_DOUBLE_CLICK_MS = 200\n\nconst inputRef = ref<undefined | HTMLInputElement>(undefined)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst fileInputKeyLocal = ref(props.fileInputKey || 0)\nconst blockDoubleClick = ref(false)\n\nconst clickInput = () => {\n if (blockDoubleClick.value === true) {\n return\n }\n blockDoubleClick.value = true\n inputRef.value?.click()\n setTimeout(() => {\n blockDoubleClick.value = false\n }, BLOCK_DOUBLE_CLICK_MS)\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { checkFormatsAndSizes } = useFormatAndSizeCheck(props.accept, props.maxSizes)\n\nconst validateData = (files: File[]) => {\n if (!props.multiple && files.length > 0) {\n const checked = checkFormatsAndSizes([files[0]])\n emit('filesInput', checked)\n return\n }\n const checked = checkFormatsAndSizes(files)\n emit('filesInput', checked)\n}\n\nconst onDropzoneDrop = (files: File[]) => {\n validateData(files)\n}\n\nconst onInputFileChange = (payload: Event) => {\n const event = payload as InputFileChangeEvent\n emit('change', event)\n validateData(Array.from(event.target?.files ?? []))\n}\n\nconst onFileDropzoneClick = () => {\n if (isBoolean(props.onDropzoneClickCallback)) {\n return\n }\n if (isUndefined(props.onDropzoneClickCallback)) {\n clickInput()\n return\n }\n props.onDropzoneClickCallback()\n}\n\nwatch(\n () => props.fileInputKey,\n (newValue, oldValue) => {\n if (newValue === oldValue || isUndefined(newValue)) {\n return\n }\n fileInputKeyLocal.value = newValue\n }\n)\n\ndefineExpose({\n activate: clickInput,\n})\n</script>\n\n<template>\n <AFileDropzone\n v-if=\"useDropzone\"\n :variant=\"dropzoneVariant\"\n @on-click=\"onFileDropzoneClick\"\n @on-drop=\"onDropzoneDrop\"\n />\n <slot\n v-else\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => clickInput(), ['stop']) }\"\n />\n <input\n ref=\"inputRef\"\n :key=\"fileInputKeyLocal\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n hidden\n tabindex=\"-1\"\n type=\"file\"\n @change=\"onInputFileChange\"\n >\n</template>\n","import type { InjectionKey, ShallowRef } from 'vue'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\n\nexport const ImageWidgetExtSystemConfig: InjectionKey<ShallowRef<DamExtSystemConfig>> = Symbol.for(\n 'anzu:ImageWidgetExtSystemConfig'\n)\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiUpdateOne = <T, R = T>(\n client: () => AxiosInstance,\n object: T | Record<string, never> = {},\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .put(replaceUrlParameters(urlTemplate, urlParams), JSON.stringify(object), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiDeleteOne = <T, R = T>(\n client: () => AxiosInstance,\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .delete(replaceUrlParameters(urlTemplate, urlParams), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import type { AxiosInstance, AxiosResponse } from 'axios'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiUpdateOne } from '@/services/api/apiUpdateOne'\nimport { apiDeleteOne } from '@/services/api/apiDeleteOne'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { IntegerId } from '@/types/common'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport { HTTP_STATUS_OK } from '@/composables/statusCodes'\n\nconst END_POINT = '/adm/v1/image'\nexport const ENTITY = 'image'\nexport const SYSTEM_CMS = 'cms'\n\nconst BULK_METADATA_LIMIT = 20\n\nexport const fetchImageListByIds = (client: () => AxiosInstance, ids: IntegerId[]) =>\n apiFetchByIds<ImageAware[]>(client, ids, END_POINT, {}, SYSTEM_CMS, ENTITY)\n\nexport const fetchImage = (client: () => AxiosInstance, id: IntegerId) =>\n apiFetchOne<ImageAware>(client, END_POINT + '/:id', { id }, SYSTEM_CMS, ENTITY)\n\nexport const createImage = (client: () => AxiosInstance, data: ImageCreateUpdateAware) =>\n apiCreateOne<ImageCreateUpdateAware, ImageAware>(client, data, END_POINT, {}, SYSTEM_CMS, ENTITY)\n\nexport const updateImage = (client: () => AxiosInstance, id: IntegerId, data: ImageCreateUpdateAware) =>\n apiUpdateOne<ImageCreateUpdateAware, ImageAware>(client, data, END_POINT + '/:id', { id }, SYSTEM_CMS, ENTITY)\n\nexport const deleteImage = (client: () => AxiosInstance, id: IntegerId) =>\n apiDeleteOne<ImageAware>(client, END_POINT + '/:id', { id }, SYSTEM_CMS, ENTITY)\n\nexport const bulkUpdateImages = (client: () => AxiosInstance, items: ImageCreateUpdateAware[]) => {\n return new Promise<ImageAware[]>((resolve, reject) => {\n updateImagesSequence(client, items)\n .then((responses) => {\n if (items.length === 0) {\n return resolve([])\n } else if (responses.length === 0) {\n return reject(responses)\n } else if (\n responses.every((res) => {\n return res.status === HTTP_STATUS_OK\n })\n ) {\n const images: ImageAware[] = responses.flatMap(response => response.data.images)\n return resolve(images)\n } else {\n return reject(responses)\n }\n })\n .catch((err) => {\n //\n return reject(err)\n })\n })\n}\n\nasync function updateImagesSequence(client: () => AxiosInstance, items: ImageCreateUpdateAware[]) {\n const totalCalls = Math.ceil(items.length / BULK_METADATA_LIMIT)\n const responses: AxiosResponse[] = []\n if (items.length === 0) return Promise.resolve([])\n\n for (let i = 0; i < totalCalls; i++) {\n const offset = i * BULK_METADATA_LIMIT\n const reduced = items.slice(offset, offset + BULK_METADATA_LIMIT)\n const reqData = { images: reduced }\n const res = await client().put(END_POINT, JSON.stringify(reqData))\n responses.push(res)\n }\n return responses\n}\n","<script lang=\"ts\" setup>\nimport { ref, toRefs, watch } from 'vue'\nimport imagePlaceholderPath from '@/assets/image/placeholder16x9.jpg'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { cloneDeep } from '@/utils/common'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useImageActions } from '@/components/damImage/composables/imageActions'\nimport type { IntegerIdNullable } from '@/types/common'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { fetchImage } from '@/components/damImage/uploadQueue/api/imageApi'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerIdNullable | undefined\n image?: ImageAware | ImageCreateUpdateAware | undefined | null // optional, if available, no need to fetch image data\n configName?: string\n label?: string | undefined\n width?: number | undefined\n disableAspectRatio?: boolean\n aspectRatio?: number | string\n showDescription?: boolean\n showSource?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n width: undefined,\n disableAspectRatio: false,\n aspectRatio: 1.777, // 16/9\n showDescription: false,\n showSource: false,\n }\n)\n\nconst { showErrorsDefault } = useAlerts()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\nconst { widgetImageToDamImageUrl } = useImageActions(imageOptions)\n\nconst resImage = ref<null | ImageAware | ImageCreateUpdateAware>(null)\n\nconst { image, modelValue } = toRefs(props)\n\nconst resolvedSrc = ref('')\n\nconst { t } = useI18n()\n\nwatch(\n [image, modelValue],\n async ([newImage, newImageId]) => {\n resImage.value = null\n resolvedSrc.value = imagePlaceholderPath\n if (newImage) {\n resImage.value = cloneDeep(newImage)\n if (resImage.value) {\n resolvedSrc.value = widgetImageToDamImageUrl(resImage.value)\n }\n return\n }\n if (newImageId) {\n try {\n resImage.value = await fetchImage(imageClient, newImageId)\n } catch (error) {\n showErrorsDefault(error)\n }\n if (resImage.value) {\n resolvedSrc.value = widgetImageToDamImageUrl(resImage.value)\n }\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-subtitle-2\"\n >\n {{ label }}\n </h4>\n <VImg\n :lazy-src=\"imagePlaceholderPath\"\n :src=\"resolvedSrc\"\n :width=\"width\"\n cover\n max-width=\"100%\"\n class=\"disable-radius\"\n :aspect-ratio=\"disableAspectRatio ? undefined : aspectRatio\"\n >\n <template #placeholder>\n <div class=\"d-flex align-center justify-center h-100\">\n <VProgressCircular\n indeterminate\n color=\"grey-lighten-4\"\n />\n </div>\n </template>\n </VImg>\n <div class=\"pa-2\">\n <VRow\n v-if=\"showDescription && resImage\"\n dense\n >\n <VCol>\n <span class=\"text-caption text-medium-emphasis\">{{ t('common.damImage.image.model.texts.description') }}:</span>\n <br>{{ resImage.texts.description }}\n </VCol>\n </VRow>\n <VRow\n v-if=\"showSource && resImage\"\n dense\n >\n <VCol>\n <span class=\"text-caption text-medium-emphasis\"> {{ t('common.damImage.image.model.texts.source') }}:</span>\n <br>{{ resImage.texts.source }}\n </VCol>\n </VRow>\n </div>\n <slot\n name=\"append\"\n :image=\"resImage\"\n />\n</template>\n\n<style lang=\"scss\">\n.v-img.disable-radius .v-img__img {\n border-radius: 0;\n}\n</style>\n","import { defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport type { ImageCreateUpdateAware, ImageCreateUpdateAwareKeyed } from '@/types/ImageAware'\nimport { cloneDeep, isNull } from '@/utils/common'\n\nexport const useImageStore = defineStore('commonImageStore', () => {\n const images = ref<ImageCreateUpdateAwareKeyed[]>([])\n const imageDetail = ref<ImageCreateUpdateAware | null>(null)\n const maxPosition = ref(0)\n\n function setImageDetail(data: ImageCreateUpdateAware | null) {\n if (isNull(data)) imageDetail.value = null\n imageDetail.value = cloneDeep(data)\n }\n\n function setImages(data: ImageCreateUpdateAwareKeyed[]) {\n images.value = data\n }\n\n function addImages(data: ImageCreateUpdateAwareKeyed[]) {\n images.value.push(...data)\n }\n\n function updateMaxPositionIfGreater(newPosition: number) {\n if (newPosition > maxPosition.value) {\n maxPosition.value = newPosition\n }\n }\n\n function removeImageByIndex(index: number) {\n images.value.splice(index, 1)\n }\n\n function reset() {\n images.value = []\n imageDetail.value = null\n }\n\n return {\n images,\n imageDetail,\n maxPosition,\n setImages,\n addImages,\n setImageDetail,\n updateMaxPositionIfGreater,\n removeImageByIndex,\n reset,\n }\n})\n","import type { Ref } from 'vue'\nimport { computed } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport type { ValidationScope } from '@/types/Validation'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\n\nexport const ADamAssetMetadataValidationScopeSymbol = Symbol.for('anzu:common:asset-metadata-validation-scope')\n\nexport const AImageMetadataValidationScopeSymbol = Symbol.for('anzu:common:image-validation-scope')\n\nexport const ADamKeywordCreateValidationScopeSymbol = Symbol.for('anzu:common:keyword-create-validation-scope')\n\nexport const ADamAuthorCreateValidationScopeSymbol = Symbol.for('anzu:common:author-create-validation-scope')\n\nconst { required, maxLength } = useValidate()\n\nexport function useImageValidation(\n image: Ref<ImageCreateUpdateAware | null>,\n validationScope: ValidationScope = undefined\n) {\n const rules = computed(() => ({\n image: {\n texts: {\n source: {\n required,\n minLength: maxLength(255),\n },\n },\n },\n }))\n const v$ = useVuelidate(rules, { image }, { $scope: validationScope })\n\n return {\n v$,\n }\n}\n","<script lang=\"ts\" setup>\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport AImageWidgetSimple from '@/components/damImage/AImageWidgetSimple.vue'\nimport AFormTextarea from '@/components/form/AFormTextarea.vue'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport { storeToRefs } from 'pinia'\nimport type { DocId } from '@/types/common'\nimport { isNull } from '@/utils/common'\nimport {\n AImageMetadataValidationScopeSymbol,\n useImageValidation,\n} from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { useAlerts } from '@/composables/system/alerts'\n\nwithDefaults(\n defineProps<{\n modelValue: boolean\n saving: boolean\n loading: boolean\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'editAsset', data: DocId): void\n (e: 'onConfirm'): void\n (e: 'onClose'): void\n}>()\n\nconst { t } = useI18n()\nconst imageStore = useImageStore()\nconst { imageDetail } = storeToRefs(imageStore)\n\nconst { v$ } = useImageValidation(imageDetail, AImageMetadataValidationScopeSymbol)\n\nconst { showValidationError } = useAlerts()\n\nconst onConfirm = () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n emit('onConfirm')\n}\n\nconst onDialogModelUpdate = (newValue: boolean) => {\n if (newValue) return\n emit('onClose')\n}\n\nconst onEditAsset = () => {\n if (isNull(imageDetail.value)) return\n emit('editAsset', imageDetail.value.dam.damId)\n}\n</script>\n\n<template>\n <VDialog\n :model-value=\"modelValue\"\n :max-width=\"500\"\n @update:model-value=\"onDialogModelUpdate\"\n >\n <VCard v-if=\"modelValue\">\n <ADialogToolbar @on-cancel=\"onDialogModelUpdate(false)\">\n {{ t('common.damImage.image.meta.edit') }}\n </ADialogToolbar>\n <VCardText>\n <div\n v-if=\"loading\"\n class=\"d-flex align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n <div\n v-else-if=\"imageDetail\"\n class=\"position-relative\"\n >\n <div class=\"my-4\">\n <AImageWidgetSimple\n :model-value=\"imageDetail.id\"\n :image=\"imageDetail\"\n />\n </div>\n <VRow>\n <VCol>\n <VBtn @click.stop=\"onEditAsset\">\n {{ t('common.damImage.image.button.editAsset') }}\n </VBtn>\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <AFormTextarea\n v-model=\"imageDetail.texts.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <AFormTextarea\n v-model=\"imageDetail.texts.source\"\n :label=\"t('common.damImage.image.model.texts.source')\"\n :v=\"v$.image.texts.source\"\n />\n </VCol>\n </VRow>\n </div>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnPrimary\n :loading=\"saving\"\n :disabled=\"loading\"\n @click.stop=\"onConfirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","import { defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport type { AssetDetailItemDto } from '@/types/coreDam/Asset'\nimport type { DocId } from '@/types/common'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nexport enum AssetDetailTabImageWithRoi {\n Info = 'meta',\n ROI = 'roi',\n Default = Info,\n}\n\nexport const useAssetDetailStore = defineStore('commonAssetDetailStore', () => {\n const asset = ref<AssetDetailItemDto | null>(null)\n const authorConflicts = ref<DocId[]>([])\n const dialog = ref<null | UploadQueueKey>(null)\n const loading = ref(false)\n const metadataAreTouched = ref(false)\n const activeTab = ref<AssetDetailTabImageWithRoi>(AssetDetailTabImageWithRoi.Default)\n const updateUploadStore = ref(false)\n\n function setAsset(data: AssetDetailItemDto | null) {\n asset.value = data\n }\n\n function reset() {\n asset.value = null\n }\n\n return {\n metadataAreTouched,\n authorConflicts,\n asset,\n loading,\n dialog,\n activeTab,\n updateUploadStore,\n setAsset,\n reset,\n }\n})\n","<script setup lang=\"ts\">\nimport { useTheme } from '@/composables/themeSettings'\n\nconst emit = defineEmits<{\n (e: 'closeDialog'): void\n}>()\n\nconst { toolbarColor } = useTheme()\n\nconst closeDialog = () => {\n emit('closeDialog')\n}\n</script>\n\n<template>\n <VCard class=\"dam-image-detail\">\n <div class=\"d-flex flex-column w-100 h-100\">\n <VToolbar\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n class=\"system-border-b\"\n >\n <div class=\"text-subtitle-2 d-flex\" />\n <VSpacer />\n <div>\n <VBtn\n icon\n variant=\"text\"\n :width=\"36\"\n :height=\"36\"\n class=\"mr-1\"\n @click.stop=\"closeDialog\"\n >\n <VIcon icon=\"mdi-close\" />\n </VBtn>\n </div>\n </VToolbar>\n <div class=\"d-flex w-100 h-100 justify-center align-center\">\n <VProgressCircular\n indeterminate\n color=\"primary\"\n />\n </div>\n </div>\n </VCard>\n</template>\n","import { useI18n } from 'vue-i18n'\n\nconst MINUTE_IN_SECONDS = 60\nconst HOUR_IN_SECONDS = 3600\nconst DAY_IN_SECONDS = 86400\n\nexport function useRemainingTime() {\n const { t } = useI18n()\n\n const remainingTime = (seconds: number, short: boolean): string => {\n const prefix = short ? 'common.time.short.' : 'common.time.long.'\n if (seconds > DAY_IN_SECONDS) {\n return t(prefix + 'remainingDays', { value: Math.floor(seconds / DAY_IN_SECONDS) })\n }\n if (seconds > HOUR_IN_SECONDS) {\n return t(prefix + 'remainingHours', { value: Math.floor(seconds / HOUR_IN_SECONDS) })\n }\n if (seconds > MINUTE_IN_SECONDS) {\n return t(prefix + 'remainingMinutes', { value: Math.floor(seconds / MINUTE_IN_SECONDS) })\n }\n return t(prefix + 'remainingSeconds', { value: seconds })\n }\n\n const remainingTimeShort = (seconds: number): string => {\n return remainingTime(seconds, true)\n }\n\n const remainingTimeLong = (seconds: number): string => {\n return remainingTime(seconds, false)\n }\n\n return {\n remainingTimeShort,\n remainingTimeLong,\n }\n}\n","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='_2K'%20data-name='2K'%20transform='translate(-10480%20-9321)'%3e%3cg%20id='Group_2714'%20data-name='Group%202714'%20transform='translate(4751%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7179'%20data-name='Path%207179'%20d='M-13.982,7.587a11.158,11.158,0,0,1,1.1-4.668q1-2.375,4.717-5.028A34.591,34.591,0,0,0-3.991-5.417,4.889,4.889,0,0,0-2.534-8.824a3.774,3.774,0,0,0-.835-2.506,2.942,2.942,0,0,0-2.391-1,2.916,2.916,0,0,0-2.9,1.589,7.879,7.879,0,0,0-.524,2.915H-13.72a11.461,11.461,0,0,1,1.1-4.9q1.869-3.554,6.64-3.554a8.425,8.425,0,0,1,6,2.088A7.216,7.216,0,0,1,2.249-8.66,7.473,7.473,0,0,1,.673-3.976a15.678,15.678,0,0,1-3.4,3.03L-4.594.381Q-6.35,1.625-7,2.182A5.279,5.279,0,0,0-8.086,3.476H2.282V7.587ZM6.261-16.554h4.963v9.946l9.327-9.946H27.07L17.163-6.625,27.578,7.587H21.092L13.654-2.951,11.224-.487V7.587H6.261Z'%20transform='translate(10522.981%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='_4K'%20data-name='4K'%20transform='translate(-10580%20-9321)'%3e%3cg%20id='Group_2715'%20data-name='Group%202715'%20transform='translate(4851%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7180'%20data-name='Path%207180'%20d='M2.562,2.477H-.124v5.11H-4.693V2.477h-9.4V-1.6l8.73-14.412H-.124V-1.175H2.562ZM-4.693-1.175V-11.4L-10.621-1.175ZM6.313-16.554h4.963v9.946L20.6-16.554h6.518L17.214-6.625,27.629,7.587H21.143L13.705-2.951,11.275-.487V7.587H6.313Z'%20transform='translate(10623.095%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='_8K'%20data-name='8K'%20transform='translate(-10680%20-9321)'%3e%3cg%20id='Group_2716'%20data-name='Group%202716'%20transform='translate(4951%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7181'%20data-name='Path%207181'%20d='M-9.246.692A3.814,3.814,0,0,0-8.337,3.41a3.284,3.284,0,0,0,2.514.966A3.284,3.284,0,0,0-3.309,3.41,3.814,3.814,0,0,0-2.4.692a3.78,3.78,0,0,0-.925-2.76,3.342,3.342,0,0,0-2.5-.942,3.342,3.342,0,0,0-2.5.942A3.78,3.78,0,0,0-9.246.692ZM-14.094,1a7.31,7.31,0,0,1,.9-3.619,5.734,5.734,0,0,1,2.645-2.44A5.548,5.548,0,0,1-12.79-7.538a6.929,6.929,0,0,1-.518-2.5,5.823,5.823,0,0,1,1.953-4.414A7.769,7.769,0,0,1-5.84-16.275,7.769,7.769,0,0,1-.324-14.449a5.823,5.823,0,0,1,1.953,4.414,6.952,6.952,0,0,1-.516,2.5A4.77,4.77,0,0,1-1.123-5.221a6.6,6.6,0,0,1,2.649,2.6A7.406,7.406,0,0,1,2.415,1,6.768,6.768,0,0,1,.193,6.1a8.664,8.664,0,0,1-6.205,2.1q-3.984,0-6.033-2.1A7.043,7.043,0,0,1-14.094,1ZM-8.837-9.511A2.9,2.9,0,0,0-8.04-7.4a2.939,2.939,0,0,0,2.209.819A2.906,2.906,0,0,0-3.623-7.4a2.937,2.937,0,0,0,.78-2.113,3.009,3.009,0,0,0-.78-2.2,2.956,2.956,0,0,0-2.209-.794,2.99,2.99,0,0,0-2.209.794A2.972,2.972,0,0,0-8.837-9.511Zm15.15-7.042h4.963v9.946L20.6-16.554h6.518L17.214-6.625,27.629,7.587H21.143L13.705-2.951,11.275-.487V7.587H6.313Z'%20transform='translate(10723.095%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='QHD'%20transform='translate(-10380%20-9321)'%3e%3cg%20id='Group_2713'%20data-name='Group%202713'%20transform='translate(4651%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7178'%20data-name='Path%207178'%20d='M-12.888,4.215A6.477,6.477,0,0,0-11.217,4a8.316,8.316,0,0,0,1.131-.41L-12.53,1.267l2.592-2.706L-7.485.872a11.391,11.391,0,0,0,.8-2.063,11.878,11.878,0,0,0,.36-3.095,10.307,10.307,0,0,0-1.662-6.28,5.692,5.692,0,0,0-4.856-2.219,5.922,5.922,0,0,0-4.782,2.129q-1.785,2.129-1.785,6.371,0,4.962,2.556,7.108A5.958,5.958,0,0,0-12.888,4.215Zm11.61-8.86A16.059,16.059,0,0,1-2.065.76,8.992,8.992,0,0,1-3.942,4.209l2.772,2.61L-3.8,9.564-6.7,6.813A12.165,12.165,0,0,1-9,7.947a12.314,12.314,0,0,1-3.885.543,11.121,11.121,0,0,1-7.8-2.817q-3.738-3.39-3.738-9.957,0-6.616,3.832-10.007a11.313,11.313,0,0,1,7.78-2.768,11.157,11.157,0,0,1,7.861,2.932Q-1.278-10.737-1.278-4.645ZM2.538,7.818v-24.14H7.549v9.2h9.385v-9.2h5.012V7.818H16.934V-2.958H7.549V7.818ZM31.691-12.129V3.626H36.35A5.031,5.031,0,0,0,41.336.1a12.4,12.4,0,0,0,.771-4.6,11.315,11.315,0,0,0-1.156-5.658q-1.156-1.973-4.6-1.973ZM37.2-16.322a12.707,12.707,0,0,1,3.737.524,7.976,7.976,0,0,1,4.114,3.063,10.738,10.738,0,0,1,1.721,3.9,18.7,18.7,0,0,1,.459,4A16.034,16.034,0,0,1,45.3,3.314a8.728,8.728,0,0,1-8.1,4.5H26.794v-24.14Z'%20transform='translate(10418.421%209375.059)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='Full_HD'%20data-name='Full%20HD'%20transform='translate(-10280%20-9321)'%3e%3cg%20id='Group_2712'%20data-name='Group%202712'%20transform='translate(4551%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7177'%20data-name='Path%207177'%20d='M-21.883-16.521H-4.669v4.242h-12.2v5.552H-6.176v4.193H-16.871V7.587h-5.012ZM-1.426,7.587v-24.14H3.585v9.2H12.97v-9.2h5.012V7.587H12.97V-3.19H3.585V7.587ZM27.727-12.361V3.394h4.659A5.031,5.031,0,0,0,37.372-.127a12.4,12.4,0,0,0,.771-4.6,11.315,11.315,0,0,0-1.156-5.658q-1.156-1.973-4.6-1.973Zm5.511-4.193a12.707,12.707,0,0,1,3.737.524,7.976,7.976,0,0,1,4.114,3.063,10.738,10.738,0,0,1,1.721,3.9,18.7,18.7,0,0,1,.459,4,16.034,16.034,0,0,1-1.934,8.156,8.728,8.728,0,0,1-8.1,4.5H22.83v-24.14Z'%20transform='translate(10318.883%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='Slot'%20transform='translate(-10080%20-9321)'%3e%3cg%20id='Group_2710'%20data-name='Group%202710'%20transform='translate(10080%209321)'%3e%3cg%20id='Group_2668'%20data-name='Group%202668'%20transform='translate(0%200)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20opacity='0.5'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Group_2711'%20data-name='Group%202711'%20transform='translate(10108.517%209349.516)'%3e%3cg%20id='Layer_2'%20data-name='Layer%202'%20transform='translate(0%200)'%3e%3cpath%20id='Path_7172'%20data-name='Path%207172'%20d='M18.322,17H9.371A5.371,5.371,0,0,0,4,22.371v8.951a5.371,5.371,0,0,0,5.371,5.371h8.951a5.371,5.371,0,0,0,5.371-5.371V22.371A5.371,5.371,0,0,0,18.322,17Zm1.79,14.322a1.79,1.79,0,0,1-1.79,1.79H9.371a1.79,1.79,0,0,1-1.79-1.79V22.371a1.79,1.79,0,0,1,1.79-1.79h8.951a1.79,1.79,0,0,1,1.79,1.79Z'%20transform='translate(-4%206.273)'%20fill='%23fff'/%3e%3cpath%20id='Path_7173'%20data-name='Path%207173'%20d='M31.322,17H22.371A5.371,5.371,0,0,0,17,22.371v8.951a5.371,5.371,0,0,0,5.371,5.371h8.951a5.371,5.371,0,0,0,5.371-5.371V22.371A5.371,5.371,0,0,0,31.322,17Zm1.79,14.322a1.79,1.79,0,0,1-1.79,1.79H22.371a1.79,1.79,0,0,1-1.79-1.79V22.371a1.79,1.79,0,0,1,1.79-1.79h8.951a1.79,1.79,0,0,1,1.79,1.79Z'%20transform='translate(6.273%206.273)'%20fill='%23fff'/%3e%3cpath%20id='Path_7174'%20data-name='Path%207174'%20d='M18.322,4H9.371A5.371,5.371,0,0,0,4,9.371v8.951a5.371,5.371,0,0,0,5.371,5.371h8.951a5.371,5.371,0,0,0,5.371-5.371V9.371A5.371,5.371,0,0,0,18.322,4Zm1.79,14.322a1.79,1.79,0,0,1-1.79,1.79H9.371a1.79,1.79,0,0,1-1.79-1.79V9.371a1.79,1.79,0,0,1,1.79-1.79h8.951a1.79,1.79,0,0,1,1.79,1.79Z'%20transform='translate(-4%20-4)'%20fill='%23fff'/%3e%3cpath%20id='Path_7175'%20data-name='Path%207175'%20d='M18.79,15.637h6.266V21.9a1.79,1.79,0,1,0,3.581,0V15.637H34.9a1.79,1.79,0,1,0,0-3.581H28.637V5.79a1.79,1.79,0,0,0-3.581,0v6.266H18.79a1.79,1.79,0,0,0,0,3.581Z'%20transform='translate(6.273%20-4)'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='Low'%20transform='translate(-10180%20-9321)'%3e%3cg%20id='Group_2709'%20data-name='Group%202709'%20transform='translate(4451%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7176'%20data-name='Path%207176'%20d='M-14.218-16.322h5.044v19.8H2.881v4.34h-17.1ZM16.9,4.215A6.477,6.477,0,0,0,18.574,4a8.316,8.316,0,0,0,1.131-.41L17.261,1.267l2.592-2.706L22.306.872a11.391,11.391,0,0,0,.8-2.063,11.878,11.878,0,0,0,.36-3.095,10.307,10.307,0,0,0-1.662-6.28,5.692,5.692,0,0,0-4.856-2.219,5.922,5.922,0,0,0-4.782,2.129q-1.785,2.129-1.785,6.371,0,4.962,2.556,7.108A5.958,5.958,0,0,0,16.9,4.215Zm11.61-8.86a16.059,16.059,0,0,1-.786,5.4,8.992,8.992,0,0,1-1.877,3.449l2.772,2.61L25.99,9.564l-2.9-2.751A12.165,12.165,0,0,1,20.8,7.947a12.314,12.314,0,0,1-3.885.543,11.121,11.121,0,0,1-7.8-2.817Q5.37,2.283,5.37-4.285,5.37-10.9,9.2-14.291a11.313,11.313,0,0,1,7.78-2.768,11.157,11.157,0,0,1,7.861,2.932Q28.513-10.737,28.513-4.645Z'%20transform='translate(10222.799%209374.746)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cdefs%3e%3cclipPath%20id='clip-path'%3e%3cpath%20id='Path_7158'%20data-name='Path%207158'%20d='M0,349.208A5.911,5.911,0,1,0,5.911,343.3,5.911,5.911,0,0,0,0,349.208'%20transform='translate(0%20-343.297)'%20fill='%23fff'/%3e%3c/clipPath%3e%3cclipPath%20id='clip-path-2'%3e%3cpath%20id='Path_7159'%20data-name='Path%207159'%20d='M0,167.86a20.2,20.2,0,0,1,20.2,20.2h8.375A28.572,28.572,0,0,0,0,159.485Z'%20transform='translate(-0.001%20-159.485)'%20fill='%23fff'/%3e%3c/clipPath%3e%3cclipPath%20id='clip-path-3'%3e%3cpath%20id='Path_7160'%20data-name='Path%207160'%20d='M0,0V8.621A34.483,34.483,0,0,1,34.484,43.1h8.621A43.1,43.1,0,0,0,0,0Z'%20transform='translate(-0.001%200)'%20fill='%23fff'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20id='RSS'%20transform='translate(-5652%20-7415)'%3e%3ccircle%20id='Ellipse_16'%20data-name='Ellipse%2016'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5652%207415)'%20opacity='0.5'/%3e%3cg%20id='Group_2625'%20data-name='Group%202625'%20transform='translate(5683.674%207441.939)'%3e%3cg%20id='Group_2624'%20data-name='Group%202624'%20transform='translate(0)'%3e%3cg%20id='Group_2619'%20data-name='Group%202619'%20transform='translate(0%2031.281)'%3e%3cg%20id='Group_2618'%20data-name='Group%202618'%20clip-path='url(%23clip-path)'%3e%3crect%20id='Rectangle_2677'%20data-name='Rectangle%202677'%20width='11.823'%20height='11.823'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Group_2621'%20data-name='Group%202621'%20transform='translate(0%2014.532)'%3e%3cg%20id='Group_2620'%20data-name='Group%202620'%20clip-path='url(%23clip-path-2)'%3e%3crect%20id='Rectangle_2678'%20data-name='Rectangle%202678'%20width='28.572'%20height='28.572'%20transform='translate(0%200)'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Group_2623'%20data-name='Group%202623'%20transform='translate(0)'%3e%3cg%20id='Group_2622'%20data-name='Group%202622'%20clip-path='url(%23clip-path-3)'%3e%3crect%20id='Rectangle_2679'%20data-name='Rectangle%202679'%20width='43.104'%20height='43.104'%20transform='translate(0)'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","import svg2k from '@/assets/dam-meta-icons/2k.svg'\nimport svg4k from '@/assets/dam-meta-icons/4k.svg'\nimport svg8k from '@/assets/dam-meta-icons/8k.svg'\nimport svgqhd from '@/assets/dam-meta-icons/qhd.svg'\nimport svgfhd from '@/assets/dam-meta-icons/fhd.svg'\nimport svgslot from '@/assets/dam-meta-icons/slot.svg'\nimport svglow from '@/assets/dam-meta-icons/low.svg'\nimport svgrss from '@/assets/dam-meta-icons/rss.svg'\n\nexport const DIMENSIONS_CONFIG = [\n {\n titleT: 'common.damImage.asset.metaIcons.fullHd',\n width: 1920,\n height: 1080,\n svgSrc: svgfhd,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.2k',\n width: 2048,\n height: 1080,\n svgSrc: svg2k,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.qhd',\n width: 2560,\n height: 1440,\n svgSrc: svgqhd,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.4k',\n width: 3840,\n height: 2160,\n svgSrc: svg4k,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.8k',\n width: 7680,\n height: 4320,\n svgSrc: svg8k,\n },\n]\nexport const ICON_SLOTS = svgslot\nexport const ICON_RSS = svgrss\nexport const ICON_LOW = svglow\nexport const LOW_DIMENSION = 600\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetFileProperties, DamAssetType } from '@/types/coreDam/Asset'\nimport {\n DIMENSIONS_CONFIG,\n ICON_LOW,\n ICON_RSS,\n ICON_SLOTS,\n LOW_DIMENSION,\n} from '@/components/damImage/uploadQueue/composables/assetImageIconsConfig'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetType\n assetFileProperties: AssetFileProperties\n disableAbsolute?: boolean\n }>(),\n {\n disableAbsolute: false,\n }\n)\n\nconst { t } = useI18n()\n\nconst checkDimensions = (icons: string[], titles: string[]) => {\n if (props.assetFileProperties.width === 0 || props.assetFileProperties.height === 0) {\n return\n }\n if (props.assetFileProperties.width < LOW_DIMENSION || props.assetFileProperties.height < LOW_DIMENSION) {\n icons.push(ICON_LOW)\n titles.push(t('common.damImage.asset.metaIcons.low'))\n return\n }\n if (props.assetType !== DamAssetType.Video) return\n for (let i = 0; i < DIMENSIONS_CONFIG.length; i++) {\n if (\n props.assetFileProperties.width === DIMENSIONS_CONFIG[i].width &&\n props.assetFileProperties.height === DIMENSIONS_CONFIG[i].height\n ) {\n icons.push(DIMENSIONS_CONFIG[i].svgSrc)\n titles.push(t(DIMENSIONS_CONFIG[i].titleT))\n break\n }\n }\n}\n\nconst checkDistributions = (icons: string[], titles: string[]) => {\n const { damPrvConfig } = useDamConfigState()\n for (let i = 0; i < props.assetFileProperties.distributesInServices.length; i++) {\n const iconPath =\n damPrvConfig.value.distributionServices[props.assetFileProperties.distributesInServices[i]]?.iconPath\n if (iconPath.length > 0 && !icons.includes(iconPath)) {\n icons.push(iconPath)\n titles.push(damPrvConfig.value.distributionServices[props.assetFileProperties.distributesInServices[i]].title)\n }\n }\n}\n\nconst data = computed(() => {\n const icons: string[] = []\n const titles: string[] = []\n\n if (props.assetFileProperties.slotNames.length > 1) {\n icons.push(ICON_SLOTS)\n titles.push(t('common.damImage.asset.metaIcons.slots'))\n }\n if (props.assetFileProperties.fromRss) {\n icons.push(ICON_RSS)\n titles.push(t('common.damImage.asset.metaIcons.rss'))\n }\n checkDimensions(icons, titles)\n checkDistributions(icons, titles)\n\n return { icons, titles }\n})\n</script>\n\n<template>\n <div\n v-show=\"data.icons.length > 0\"\n class=\"asset-image__meta-icons\"\n :class=\"{ 'asset-image__meta-icons-absolute': !disableAbsolute }\"\n >\n <img\n v-for=\"(item, index) in data.icons\"\n :key=\"item\"\n class=\"img-svg\"\n :src=\"item\"\n alt=\"\"\n :title=\"data.titles[index] || ''\"\n >\n </div>\n</template>\n\n<style lang=\"scss\">\n.asset-image__meta-icons-absolute {\n position: absolute;\n left: 6px;\n top: 163px;\n}\n\n.asset-image__meta-icons {\n display: flex;\n\n img.img-svg {\n height: 30px;\n padding: 2px;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport placeholder16x9 from '@/assets/image/placeholder16x9.jpg'\nimport { type AssetFileProperties, DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport { isUndefined } from '@/utils/common'\nimport { useRemainingTime } from '@/composables/datetime/remainingTime'\nimport AssetImageMetaIcons from '@/components/damImage/uploadQueue/components/AssetImageMetaIcons.vue'\n\nconst props = withDefaults(\n defineProps<{\n src?: string\n assetType?: DamAssetType\n assetStatus?: DamAssetStatus\n backgroundColor?: string\n width?: number\n height?: number\n fallbackHeight?: number\n iconSize?: number\n useComponent?: boolean\n cover?: boolean\n aspectRatio?: number\n showUploading?: boolean\n showProcessing?: boolean\n showWaiting?: boolean\n showDone?: boolean\n uploadingColor?: string\n processingColor?: string\n disableProcessingText?: boolean\n uploadingProgress?: number | null\n remainingTime?: number | null\n hideIcon?: boolean\n showMetaIcons?: boolean\n assetFileProperties?: AssetFileProperties\n }>(),\n {\n assetType: DamAssetType.Image,\n assetStatus: DamAssetStatus.WithFile,\n src: undefined,\n backgroundColor: '#ccc',\n width: undefined,\n height: undefined,\n fallbackHeight: 200,\n iconSize: 80,\n useComponent: false,\n cover: false,\n aspectRatio: undefined,\n showUploading: false,\n showProcessing: false,\n showWaiting: false,\n showDone: false,\n uploadingColor: 'primary',\n processingColor: 'primary',\n disableProcessingText: false,\n uploadingProgress: null,\n remainingTime: null,\n hideIcon: false,\n showMetaIcons: false,\n assetFileProperties: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'load'): void\n (e: 'error'): void\n}>()\n\nconst { t } = useI18n()\n\nconst onLoad = () => {\n emit('load')\n}\nconst onError = () => {\n emit('error')\n}\n\nconst icon = computed(() => {\n if (props.assetStatus === DamAssetStatus.Deleting) return 'mdi-trash-can'\n switch (props.assetType) {\n case DamAssetType.Audio:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-music' : 'mdi-music-off'\n case DamAssetType.Document:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-note' : 'mdi-note-off'\n case DamAssetType.Video:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-video' : 'mdi-video-off'\n case DamAssetType.Image:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-image' : 'mdi-image-off'\n default:\n return ''\n }\n})\n\nconst uploadingPercentage = computed(() => {\n if (!props.uploadingProgress) return '0%'\n const value = Math.ceil(props.uploadingProgress)\n return value > 100 ? '100%' : value + '%'\n})\n\nconst backgroundColorComputed = computed(() => {\n return [DamAssetStatus.Deleting, DamAssetStatus.Draft].includes(props.assetStatus) ? '#ccc' : props.backgroundColor\n})\n\nconst iconColor = computed(() => {\n return props.assetStatus === DamAssetStatus.WithFile ? '#505050' : '#8f8f8f'\n})\n\nconst srcComputed = computed(() => {\n return isUndefined(props.src) ? placeholder16x9 : props.src\n})\n\nconst showIconComputed = computed(() => {\n if (props.hideIcon) return false\n else if (props.assetType === DamAssetType.Image && props.src) return false\n return true\n})\n\nconst { remainingTimeShort } = useRemainingTime()\n</script>\n\n<template>\n <VImg\n v-if=\"showUploading || showProcessing || showWaiting\"\n :aspect-ratio=\"aspectRatio\"\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n :cover=\"cover\"\n class=\"asset-image asset-image--loading-bg\"\n @error=\"onError\"\n @load=\"onLoad\"\n >\n <template #placeholder />\n <template #default>\n <div\n v-if=\"showWaiting\"\n class=\"asset-image__progress\"\n >\n <VProgressCircular\n indeterminate\n :size=\"iconSize\"\n :width=\"iconSize / 10\"\n />\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.waiting') }}\n </div>\n </div>\n <div\n v-if=\"showProcessing\"\n class=\"asset-image__progress\"\n >\n <VProgressCircular\n :color=\"processingColor\"\n indeterminate\n :size=\"iconSize\"\n :width=\"iconSize / 10\"\n class=\"ml-auto mr-auto\"\n />\n <div\n v-if=\"!disableProcessingText\"\n class=\"text-caption text-center\"\n >\n {{ t('common.damImage.upload.processing') }}\n </div>\n </div>\n <div\n v-else-if=\"showUploading\"\n class=\"asset-image__progress\"\n >\n <VProgressCircular\n :color=\"uploadingColor\"\n :size=\"iconSize\"\n :width=\"iconSize / 10\"\n class=\"ml-auto mr-auto\"\n :model-value=\"uploadingProgress === null ? undefined : uploadingProgress\"\n >\n {{ uploadingPercentage }}\n </VProgressCircular>\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.uploading') }}\n <span\n v-if=\"remainingTime\"\n class=\"font-weight-bold\"\n >\n {{ remainingTimeShort(remainingTime) }}\n </span>\n </div>\n </div>\n </template>\n </VImg>\n <VImg\n v-else-if=\"assetStatus === DamAssetStatus.WithFile && src && useComponent\"\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n class=\"asset-image asset-image--component position-relative\"\n :cover=\"cover\"\n :aspect-ratio=\"aspectRatio\"\n @load=\"onLoad\"\n @error=\"onError\"\n >\n <template #placeholder />\n <template #default>\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n />\n </div>\n </div>\n <div\n v-if=\"showDone\"\n class=\"asset-image__progress asset-image__progress--animate-done\"\n >\n <VIcon\n icon=\"mdi-check-circle\"\n color=\"success\"\n :size=\"iconSize\"\n />\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.done') }}\n </div>\n </div>\n <AssetImageMetaIcons\n v-if=\"showMetaIcons && assetFileProperties\"\n :asset-file-properties=\"assetFileProperties\"\n :asset-type=\"assetType\"\n />\n </template>\n </VImg>\n <div\n v-else-if=\"assetStatus === DamAssetStatus.WithFile && src\"\n class=\"asset-image asset-image--img position-relative\"\n >\n <img\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n alt=\"\"\n :style=\"'background-color:' + backgroundColorComputed\"\n @onerror=\"onError\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"asset-image__icon\"\n />\n </div>\n </div>\n <AssetImageMetaIcons\n v-if=\"showMetaIcons && assetFileProperties\"\n :asset-file-properties=\"assetFileProperties\"\n :asset-type=\"assetType\"\n />\n </div>\n <div\n v-else\n :style=\"{ height: fallbackHeight + 'px', backgroundColor: backgroundColorComputed, width: width + 'px' }\"\n class=\"asset-image asset-image--placeholder d-flex align-center justify-center\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"asset-image__icon\"\n />\n </div>\n </div>\n <div\n v-if=\"showDone\"\n class=\"asset-image__progress asset-image__progress--animate-done\"\n >\n <VIcon\n icon=\"mdi-check-circle\"\n color=\"success\"\n :size=\"iconSize\"\n />\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.done') }}\n </div>\n </div>\n <AssetImageMetaIcons\n v-if=\"showMetaIcons && assetFileProperties\"\n :asset-file-properties=\"assetFileProperties\"\n :asset-type=\"assetType\"\n />\n </div>\n</template>\n","import { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { AssetFileFailReason } from '@/types/coreDam/AssetFile'\n\nexport function useAssetFileFailReason() {\n const { t } = useI18n()\n\n const assetFileFailReasonOptions = ref<ValueObjectOption<AssetFileFailReason>[]>([\n {\n value: AssetFileFailReason.None,\n title: t('common.damImage.asset.assetFileFailReason.none'),\n },\n {\n value: AssetFileFailReason.Unknown,\n title: t('common.damImage.asset.assetFileFailReason.unknown'),\n },\n {\n value: AssetFileFailReason.InvalidChecksum,\n title: t('common.damImage.asset.assetFileFailReason.invalidChecksum'),\n },\n {\n value: AssetFileFailReason.InvalidMimeType,\n title: t('common.damImage.asset.assetFileFailReason.invalidMimeType'),\n },\n {\n value: AssetFileFailReason.DownloadFailed,\n title: t('common.damImage.asset.assetFileFailReason.downloadFailed'),\n },\n {\n value: AssetFileFailReason.InvalidSize,\n title: t('common.damImage.asset.assetFileFailReason.invalidSize'),\n },\n ])\n\n const getAssetFileFailReasonOption = (value: AssetFileFailReason) => {\n return assetFileFailReasonOptions.value.find((item) => item.value === value)\n }\n\n return {\n assetFileFailReasonOptions,\n getAssetFileFailReasonOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport type { AssetFileFailReason } from '@/types/coreDam/AssetFile'\nimport { useAssetFileFailReason } from '@/components/damImage/uploadQueue/composables/assetFileFailReason'\nimport AChipNoLink from '@/components/AChipNoLink.vue'\n\nconst props = withDefaults(\n defineProps<{\n reason: AssetFileFailReason\n }>(),\n {}\n)\n\nconst { getAssetFileFailReasonOption } = useAssetFileFailReason()\nconst reasonOption = computed(() => {\n return getAssetFileFailReasonOption(props.reason)\n})\n</script>\n\n<template>\n <AChipNoLink v-if=\"reasonOption\">\n {{ reasonOption.title }}\n </AChipNoLink>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { AssetFileFailReason, AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport { DamAssetStatus } from '@/types/coreDam/Asset'\nimport AssetFileFailReasonChip from '@/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue'\n\nwithDefaults(\n defineProps<{\n assetStatus: DamAssetStatus\n assetMainFileStatus?: AssetFileProcessStatus | undefined\n assetMainFileFailReason?: AssetFileFailReason | undefined\n }>(),\n {\n assetMainFileStatus: undefined,\n assetMainFileFailReason: undefined,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n v-if=\"assetMainFileStatus && assetMainFileStatus === AssetFileProcessStatus.Duplicate\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"warning\"\n >\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VAlert>\n </div>\n <div\n v-if=\"assetMainFileStatus && assetMainFileStatus === AssetFileProcessStatus.Failed\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"error\"\n >\n {{ t('common.damImage.asset.detail.info.status.failed') }}\n <div v-if=\"assetMainFileFailReason\">\n <br>\n <AssetFileFailReasonChip :reason=\"assetMainFileFailReason\" />\n </div>\n </VAlert>\n </div>\n <div\n v-else-if=\"assetStatus === DamAssetStatus.Deleting\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"error\"\n >\n {{ t('common.damImage.asset.detail.info.status.deleting') }}\n </VAlert>\n </div>\n <div\n v-else-if=\"assetStatus === DamAssetStatus.Draft\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"warning\"\n >\n {{ t('common.damImage.asset.detail.info.status.draft') }}\n </VAlert>\n </div>\n</template>\n","import { computed, ref } from 'vue'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nexport const CLASS_PREFIX = 'teleport-target-'\n\nconst mountedDivClasses = ref(new Set<string>())\n\nexport function useAssetDetailSidebarActionbar(uploadKey: UploadQueueKey) {\n const mounted = () => {\n mountedDivClasses.value.add(CLASS_PREFIX + uploadKey)\n }\n\n const unMounted = () => {\n mountedDivClasses.value.delete(CLASS_PREFIX + uploadKey)\n }\n\n const canTeleport = computed(() => {\n return mountedDivClasses.value.has(CLASS_PREFIX + uploadKey)\n })\n\n const divClassName = computed(() => {\n return CLASS_PREFIX + uploadKey\n })\n\n return {\n divClassName,\n canTeleport,\n mounted,\n unMounted,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useAssetDetailSidebarActionbar } from '@/components/damImage/uploadQueue/composables/assetDetailSidebarActionbar'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n }>(),\n {\n }\n)\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { canTeleport, divClassName } = useAssetDetailSidebarActionbar(props.queueKey)\n</script>\n\n<template>\n <Teleport\n v-if=\"canTeleport\"\n :to=\"'.' + divClassName\"\n >\n <div class=\"w-100 text-right\">\n <slot />\n </div>\n </Teleport>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport ACustomDataForm from '@/components/customDataForm/ACustomDataForm.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetType\n modelValue: { [key: string]: any }\n dataCy?: string\n }>(),\n {\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'anyChange'): void\n}>()\n\nconst { damConfigAssetCustomFormElements } = useDamConfigState()\n\nconst elements = computed(() => {\n return damConfigAssetCustomFormElements.value[props.assetType]\n})\n\nconst { damConfigExtSystem } = useDamConfigState()\n\nconst pinnedCount = computed(() => {\n return damConfigExtSystem.value[props.assetType].customMetadataPinnedAmount\n})\n</script>\n\n<template>\n <ACustomDataForm\n :model-value=\"modelValue\"\n :pinned-count=\"pinnedCount\"\n :elements=\"elements\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @any-change=\"emit('anyChange')\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <template #after-pinned>\n <slot name=\"after-pinned\" />\n </template>\n <template #before-pinned>\n <slot name=\"before-pinned\" />\n </template>\n </ACustomDataForm>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n color?: string | null\n width?: number\n height?: number\n }>(),\n {\n color: null,\n width: 20,\n height: 20,\n }\n)\n\nconst style = computed(() => {\n return `background-color: ${props.color ? props.color : 'transparent'}; width: ${props.width}px; height: ${\n props.height\n }px;`\n})\n</script>\n\n<template>\n <div :style=\"style\">\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ color }}\n </VTooltip>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport AColorBox from '@/components/dam/AColorBox.vue'\nimport type { AssetFileImage } from '@/types/coreDam/AssetFile'\nimport ABooleanValue from '@/components/ABooleanValue.vue'\n\nwithDefaults(\n defineProps<{\n file: AssetFileImage\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.dominantColor') }}</VCol>\n <VCol cols=\"9\">\n <AColorBox :color=\"file.imageAttributes.mostDominantColor\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.width') }}</VCol>\n <VCol cols=\"9\">\n {{ file.imageAttributes.width }} px\n </VCol>\n </VRow>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.height') }}</VCol>\n <VCol cols=\"9\">\n {{ file.imageAttributes.height }} px\n </VCol>\n </VRow>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.ratio') }}</VCol>\n <VCol cols=\"9\">\n {{ file.imageAttributes.ratioWidth }} / {{ file.imageAttributes.ratioHeight }}\n </VCol>\n </VRow>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.animated') }}</VCol>\n <VCol cols=\"9\">\n <ABooleanValue :value=\"file.imageAttributes.animated\" />\n </VCol>\n </VRow>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { CachedItem } from '@/composables/system/defineCached'\nimport type { DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { isNull, isUndefined } from '@/utils/common'\nimport type { DocId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n id: null | DocId | undefined\n title?: string\n queueId?: string | undefined\n forceRounded?: boolean\n textOnly?: boolean\n size?: string\n containerClass?: undefined | string\n }>(),\n {\n queueId: undefined,\n title: '',\n forceRounded: false,\n textOnly: false,\n size: 'small',\n containerClass: 'd-inline-flex',\n }\n)\n\nconst { getCachedAuthor } = useDamCachedAuthors()\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst cached = shallowRef<undefined | CachedItem<DamAuthorMinimal>>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return getCachedAuthor(props.id)\n})\n\nconst displayNewIcon = computed(() => {\n if (!props.queueId) return undefined\n const queue = uploadQueuesStore.getQueue(props.queueId)\n if (!queue || !cached.value) return undefined\n if (queue.suggestions.newAuthorNames.has(cached.value.name)) return 'mdi-new-box'\n return undefined\n})\n\nconst displayTitle = computed(() => {\n if (props.title.length > 0) return props.title\n if (cached.value) {\n return cached.value.name + (cached.value.identifier?.length > 0 ? ` (${cached.value.identifier})` : '')\n }\n return ''\n})\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div :class=\"containerClass\">\n <template v-if=\"isNull(id) || isUndefined(id)\">\n <slot name=\"empty\">\n -\n </slot>\n </template>\n <div v-else-if=\"textOnly\">\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </div>\n <VChip\n v-else\n :size=\"size\"\n :append-icon=\"displayNewIcon\"\n :label=\"forceRounded ? undefined : true\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport type { DocId } from '@/types/common'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport type { CachedItem } from '@/composables/system/defineCached'\nimport type { DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n id: null | DocId | undefined\n queueId?: string | undefined\n }>(),\n {\n queueId: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'addAuthor', data: DocId | null | undefined): void\n}>()\n\nconst clickClose = () => {\n emit('addAuthor', props.id)\n}\n\nconst { getCachedAuthor } = useDamCachedAuthors()\n\nconst cached = shallowRef<undefined | CachedItem<DamAuthorMinimal>>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return getCachedAuthor(props.id)\n})\n\nconst displayTitle = computed(() => {\n if (cached.value) {\n return cached.value.name + (cached.value.identifier?.length > 0 ? ` (${cached.value.identifier})` : '')\n }\n return ''\n})\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VChip\n size=\"small\"\n closable\n close-icon=\"mdi-plus\"\n @click:close=\"clickClose\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n</template>\n","import { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { isNull } from '@/utils/common'\nimport type { DamAuthor, DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { fetchAuthorList, fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport const useAuthorSelectActions = () => {\n const { damClient } = useCommonAdminCoreDamOptions()\n const { initialized } = useDamConfigState()\n\n const mapToMinimal = (author: DamAuthor): DamAuthorMinimal => ({\n id: author.id,\n name: author.name,\n identifier: author.identifier,\n })\n\n const mapToValueObject = (author: DamAuthor): ValueObjectOption<string> => ({\n title: author.name + (author.identifier ? ` (${author.identifier})` : ''),\n value: author.id,\n })\n\n const mapToValueObjects = (authors: DamAuthor[]): ValueObjectOption<string>[] => {\n return authors.map((author: DamAuthor) => mapToValueObject(author))\n }\n\n const mapToMinimals = (authors: DamAuthor[]): DamAuthorMinimal[] => {\n return authors.map((author: DamAuthor) => mapToMinimal(author))\n }\n\n const fetchItems = async (pagination: Pagination, filterBag: FilterBag) => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n return mapToValueObjects(await fetchAuthorList(damClient, initialized.damConfigExtSystem, pagination, filterBag))\n }\n\n const fetchItemsMinimal = async (pagination: Pagination, filterBag: FilterBag) => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n return mapToMinimals(await fetchAuthorList(damClient, initialized.damConfigExtSystem, pagination, filterBag))\n }\n\n const fetchItemsByIds = async (ids: string[]) => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n return mapToValueObjects(await fetchAuthorListByIds(damClient, initialized.damConfigExtSystem, ids))\n }\n\n return {\n mapToValueObject,\n fetchItems,\n fetchItemsByIds,\n fetchItemsMinimal,\n }\n}\n","import { reactive } from 'vue'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { makeFilterHelper } from '@/composables/filter/filterHelpers'\n\nconst makeFilter = makeFilterHelper(SYSTEM_CORE_DAM, 'author')\n\nexport function useAuthorFilter() {\n return reactive({\n _elastic: {\n ...makeFilter({ exclude: true }),\n },\n text: {\n ...makeFilter({ name: 'text' }),\n },\n })\n}\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport enum DamAuthorType {\n None = 'none',\n Internal = 'internal',\n External = 'external',\n Agency = 'agency',\n Default = None,\n}\n\nexport function useDamAuthorType() {\n const { t } = useI18n()\n\n const authorTypeOptions = ref<ValueObjectOption<DamAuthorType>[]>([\n {\n value: DamAuthorType.None,\n title: t('common.damImage.author.authorType.none'),\n },\n {\n value: DamAuthorType.Internal,\n title: t('common.damImage.author.authorType.internal'),\n },\n {\n value: DamAuthorType.External,\n title: t('common.damImage.author.authorType.external'),\n },\n {\n value: DamAuthorType.Agency,\n title: t('common.damImage.author.authorType.agency'),\n },\n ])\n\n const getAuthorTypeOption = (value: DamAuthorType) => {\n return authorTypeOptions.value.find((item) => item.value === value)\n }\n\n return {\n authorTypeOptions,\n getAuthorTypeOption,\n }\n}\n","import type { Ref } from 'vue'\nimport { computed } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport type { ValidationScope } from '@/types/Validation'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\n\nconst { required, minLength } = useValidate()\n\nexport function useAuthorValidation(author: Ref<DamAuthor>, validationScope: ValidationScope = undefined) {\n const rules = computed(() => ({\n author: {\n name: {\n required,\n minLength: minLength(3),\n },\n identifier: {\n minLength: minLength(3),\n },\n },\n }))\n const v$ = useVuelidate(rules, { author }, { $scope: validationScope })\n\n return {\n v$,\n }\n}\n","import type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { DamAuthorType } from '@/components/damImage/uploadQueue/author/DamAuthorType'\nimport { dateTimeNow } from '@/utils/datetime'\nimport { ENTITY } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nexport function useDamAuthorFactory() {\n const createDefault = (extSystemId: number, reviewed?: boolean): DamAuthor => {\n return {\n id: '',\n name: '',\n identifier: '',\n extSystem: extSystemId,\n flags: {\n reviewed: reviewed ?? false,\n },\n type: DamAuthorType.Default,\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: 0,\n modifiedBy: 0,\n _resourceName: ENTITY,\n _system: SYSTEM_CORE_DAM,\n }\n }\n\n return {\n createDefault,\n }\n}\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValidationScope } from '@/types/Validation'\nimport { ADamAuthorCreateValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { useDamAuthorType } from '@/components/damImage/uploadQueue/author/DamAuthorType'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { useAuthorValidation } from '@/components/damImage/uploadQueue/author/authorValidation'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { createAuthor } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useDamAuthorFactory } from '@/components/damImage/uploadQueue/author/AuthorFactory'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport ARow from '@/components/ARow.vue'\nimport AFormTextField from '@/components/form/AFormTextField.vue'\nimport AFormValueObjectOptionsSelect from '@/components/form/AFormValueObjectOptionsSelect.vue'\n\nconst props = withDefaults(\n defineProps<{\n initialValue?: string\n disableRedirect?: boolean\n variant?: 'button' | 'icon'\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n disabled?: boolean | undefined\n validationScope?: ValidationScope\n }>(),\n {\n initialValue: '',\n disableRedirect: false,\n variant: 'button',\n buttonT: 'common.button.create',\n buttonClass: 'ml-2',\n dataCy: undefined,\n disabled: undefined,\n validationScope: ADamAuthorCreateValidationScopeSymbol,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSuccess', data: DamAuthor): void\n}>()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\nconst { initialized } = useDamConfigState()\nif (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n}\n\nconst { createDefault } = useDamAuthorFactory()\nconst author = ref<DamAuthor>(createDefault(initialized.damConfigExtSystem))\nconst dialog = ref(false)\nconst buttonLoading = ref(false)\n\nconst onClick = () => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n author.value = createDefault(initialized.damConfigExtSystem, true)\n author.value.name = props.initialValue\n dialog.value = true\n}\n\nconst onCancel = () => {\n dialog.value = false\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { v$ } = useAuthorValidation(author, props.validationScope)\nconst { t } = useI18n()\nconst { showValidationError, showRecordWas, showErrorsDefault } = useAlerts()\n\nconst onConfirm = async () => {\n if (buttonLoading.value) return\n try {\n buttonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n buttonLoading.value = false\n return\n }\n const res = await createAuthor(damClient, author.value)\n emit('onSuccess', res)\n showRecordWas('created')\n dialog.value = false\n if (!isUndefined(res.id) && !props.disableRedirect) {\n // router.push({ name: ROUTE.DAM.AUTHOR.DETAIL, params: { id: res.id } })\n }\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n buttonLoading.value = false\n }\n}\n\nconst { authorTypeOptions } = useDamAuthorType()\n</script>\n\n<template>\n <ABtnPrimary\n v-if=\"variant === 'button'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :disabled=\"disabled\"\n rounded=\"pill\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </ABtnPrimary>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n :disabled=\"disabled\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.author.button.add') }}\n </VTooltip>\n </VBtn>\n <VDialog v-model=\"dialog\">\n <VCard\n v-if=\"dialog\"\n width=\"500\"\n class=\"mt-0 mr-auto ml-auto\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t('common.damImage.author.meta.create') }}\n </ADialogToolbar>\n <VCardText>\n <ASystemEntityScope\n :system=\"SYSTEM_CORE_DAM\"\n subject=\"author\"\n >\n <ARow>\n <AFormTextField\n v-model=\"author.name\"\n :label=\"t('common.damImage.author.model.name')\"\n :v=\"v$.author.name\"\n required\n data-cy=\"author-name\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n <ARow>\n <AFormTextField\n v-model=\"author.identifier\"\n :label=\"t('common.damImage.author.model.identifier')\"\n :v=\"v$.author.identifier\"\n data-cy=\"author-identifier\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n <ARow>\n <AFormValueObjectOptionsSelect\n v-model=\"author.type\"\n :label=\"t('common.damImage.author.model.type')\"\n :items=\"authorTypeOptions\"\n data-cy=\"author-type\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n </ASystemEntityScope>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n :loading=\"buttonLoading\"\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n {{ t(buttonT) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport type { DocId } from '@/types/common'\nimport type { ValidationScope } from '@/types/Validation'\nimport { computed, onMounted, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport useVuelidate from '@vuelidate/core'\nimport {\n useDamCachedAuthors,\n useDamCachedAuthorsForRemoteAutocomplete,\n} from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { isArray } from '@/utils/common'\nimport AFormRemoteAutocompleteWithCached from '@/components/form/AFormRemoteAutocompleteWithCached.vue'\nimport AuthorRemoteAutocompleteCachedAuthorChip from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChip.vue'\nimport AuthorRemoteAutocompleteCachedAuthorChipConflicts from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue'\nimport { useAuthorSelectActions } from '@/components/damImage/uploadQueue/author/authorActions'\nimport { useAuthorFilter } from '@/components/damImage/uploadQueue/author/AuthorFilter'\nimport AuthorCreateButton from '@/components/damImage/uploadQueue/author/AuthorCreateButton.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DocId | null | DocId[] | any\n queueId?: string | undefined\n label?: string | undefined\n required?: boolean | null\n disabled?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n authorConflicts?: DocId[]\n dataCy?: string\n validationScope?: ValidationScope\n }>(),\n {\n label: undefined,\n queueId: undefined,\n required: null,\n disabled: undefined,\n multiple: false,\n clearable: false,\n authorConflicts: undefined,\n dataCy: undefined,\n validationScope: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | null | DocId[]): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue) {\n emit('update:modelValue', [...newValue])\n },\n})\n\nconst { t } = useI18n()\n\nconst requiredComputed = computed(() => !!props.required)\n\nconst { requiredIf } = useValidate()\n\nconst rules = {\n modelValueComputed: {\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n required: requiredIf(requiredComputed.value),\n },\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate(rules, { modelValueComputed }, { $scope: props.validationScope })\n\nconst { fetchItemsMinimal } = useAuthorSelectActions()\n\nconst innerFilter = useAuthorFilter()\n\nconst addAuthor = async (id: null | DocId | undefined) => {\n if (!id) return\n if (!modelValueComputed.value.includes(id)) {\n modelValueComputed.value = [...modelValueComputed.value, ...[id]]\n }\n}\n\nconst addNewAuthorText = ref('')\n\nconst searchChange = (newValue: string) => {\n if (newValue.length > 0) addNewAuthorText.value = newValue\n}\n\nconst { addManualToCachedAuthors } = useDamCachedAuthors()\n\nconst afterCreate = (author: DamAuthor) => {\n addManualToCachedAuthors(author)\n if (isArray(modelValueComputed.value)) {\n modelValueComputed.value = [...modelValueComputed.value, author.id]\n return\n }\n modelValueComputed.value = author.id\n}\n\nconst itemSlotIsSelected = (item: DocId) => {\n if (isArray(modelValueComputed.value)) {\n return modelValueComputed.value.includes(item)\n } else if (modelValueComputed.value) {\n return modelValueComputed.value === item\n }\n return false\n}\n\nonMounted(() => {\n //\n})\n</script>\n\n<template>\n <div class=\"d-flex\">\n <AFormRemoteAutocompleteWithCached\n v-model=\"modelValueComputed\"\n :use-cached=\"useDamCachedAuthorsForRemoteAutocomplete\"\n :v=\"v$\"\n :required=\"requiredComputed\"\n :label=\"label\"\n :fetch-items-minimal=\"fetchItemsMinimal\"\n :inner-filter=\"innerFilter\"\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n filter-by-field=\"text\"\n :filter-sort-by=\"null\"\n :data-cy=\"dataCy\"\n item-title=\"name\"\n item-value=\"id\"\n @search-change=\"searchChange\"\n >\n <template #item=\"{ props: itemSlotProps, item: itemSlotItem }\">\n <VListItem\n v-bind=\"itemSlotProps\"\n @click.prevent=\"\"\n >\n <template\n v-if=\"multiple\"\n #prepend\n >\n <VCheckboxBtn\n :model-value=\"itemSlotIsSelected(itemSlotItem.value)\"\n :ripple=\"false\"\n />\n </template>\n <template #title>\n <AuthorRemoteAutocompleteCachedAuthorChip\n :id=\"itemSlotItem.value\"\n :key=\"itemSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"itemSlotItem.title\"\n text-only\n />\n </template>\n </VListItem>\n </template>\n <template #chip=\"{ item: chipSlotItem }\">\n <AuthorRemoteAutocompleteCachedAuthorChip\n :id=\"chipSlotItem.value\"\n :key=\"chipSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"chipSlotItem.title\"\n force-rounded\n />\n </template>\n </AFormRemoteAutocompleteWithCached>\n <div>\n <AuthorCreateButton\n variant=\"icon\"\n data-cy=\"add-author\"\n :initial-value=\"addNewAuthorText\"\n disable-redirect\n :disabled=\"disabled\"\n @on-success=\"afterCreate\"\n />\n </div>\n </div>\n <div\n v-if=\"!disabled && authorConflicts && authorConflicts.length > 0\"\n class=\"d-flex flex-column\"\n >\n <div>\n <span class=\"text-caption\">{{ t('common.damImage.author.conflicts') }}</span>\n </div>\n <div>\n <AuthorRemoteAutocompleteCachedAuthorChipConflicts\n v-for=\"authorId in authorConflicts\"\n :id=\"authorId\"\n :key=\"authorId\"\n class=\"mr-1 mt-1\"\n @add-author=\"addAuthor(authorId)\"\n />\n </div>\n </div>\n</template>\n","import { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { isNull } from '@/utils/common'\nimport type { DamKeyword, DamKeywordMinimal } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { fetchKeywordList, fetchKeywordListByIds } from '@/components/damImage/uploadQueue/api/keywordApi'\n\nexport const useKeywordSelectActions = () => {\n const { damClient } = useCommonAdminCoreDamOptions()\n const { initialized } = useDamConfigState()\n\n const mapToValueObject = (keyword: DamKeyword): ValueObjectOption<string> => ({\n title: keyword.name,\n value: keyword.id,\n })\n\n const mapToMinimal = (keyword: DamKeyword): DamKeywordMinimal => ({\n id: keyword.id,\n name: keyword.name,\n })\n\n const mapToValueObjects = (keywords: DamKeyword[]): ValueObjectOption<string>[] => {\n return keywords.map((keyword: DamKeyword) => mapToValueObject(keyword))\n }\n\n const mapToMinimals = (keywords: DamKeyword[]): DamKeywordMinimal[] => {\n return keywords.map((keyword: DamKeyword) => mapToMinimal(keyword))\n }\n\n const fetchItems = async (pagination: Pagination, filterBag: FilterBag) => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n return mapToValueObjects(await fetchKeywordList(damClient, initialized.damConfigExtSystem, pagination, filterBag))\n }\n\n const fetchItemsMinimal = async (pagination: Pagination, filterBag: FilterBag) => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n return mapToMinimals(await fetchKeywordList(damClient, initialized.damConfigExtSystem, pagination, filterBag))\n }\n\n const fetchItemsByIds = async (ids: string[]) => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n return mapToValueObjects(await fetchKeywordListByIds(damClient, initialized.damConfigExtSystem, ids))\n }\n\n return {\n mapToValueObject,\n fetchItems,\n fetchItemsByIds,\n fetchItemsMinimal,\n }\n}\n","import { reactive } from 'vue'\nimport { makeFilterHelper } from '@/composables/filter/filterHelpers'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { ENTITY } from '@/components/damImage/uploadQueue/api/keywordApi'\n\nconst makeFilter = makeFilterHelper(SYSTEM_CORE_DAM, ENTITY)\n\nconst filter = reactive({\n _elastic: {\n ...makeFilter({ exclude: true }),\n },\n id: {\n ...makeFilter({ name: 'id' }),\n },\n text: {\n ...makeFilter({ name: 'text' }),\n },\n reviewed: {\n ...makeFilter({ name: 'reviewed' }),\n },\n})\n\nexport function useKeywordListFilter() {\n return filter\n}\n\nexport function useKeywordFilter() {\n return reactive({\n _elastic: {\n ...makeFilter({ exclude: true }),\n },\n text: {\n ...makeFilter({ name: 'text' }),\n },\n })\n}\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport type { DocId } from '@/types/common'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { CachedItem } from '@/composables/system/defineCached'\nimport type { DamKeywordMinimal } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { isNull, isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n id: null | DocId | undefined\n title?: string\n queueId?: string | undefined\n forceRounded?: boolean\n textOnly?: boolean\n size?: string\n containerClass?: undefined | string\n }>(),\n {\n queueId: undefined,\n title: '',\n forceRounded: false,\n textOnly: false,\n size: 'small',\n containerClass: 'd-inline-flex',\n }\n)\n\nconst { getCachedKeyword } = useDamCachedKeywords()\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst cached = shallowRef<undefined | CachedItem<DamKeywordMinimal>>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return getCachedKeyword(props.id)\n})\n\nconst displayNewIcon = computed(() => {\n if (!props.queueId) return undefined\n const queue = uploadQueuesStore.getQueue(props.queueId)\n if (!queue || !cached.value) return undefined\n if (queue.suggestions.newKeywordNames.has(cached.value.name)) return 'mdi-new-box'\n return undefined\n})\n\nconst displayTitle = computed(() => {\n if (props.title.length > 0) return props.title\n if (cached.value) {\n return cached.value.name\n }\n return ''\n})\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div :class=\"containerClass\">\n <template v-if=\"isNull(id) || isUndefined(id)\">\n <slot name=\"empty\">\n -\n </slot>\n </template>\n <div v-else-if=\"textOnly\">\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </div>\n <VChip\n v-else\n :size=\"size\"\n :append-icon=\"displayNewIcon\"\n :label=\"forceRounded ? undefined : true\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n </div>\n</template>\n","import type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { dateTimeNow } from '@/utils/datetime'\nimport { ENTITY } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nexport function useDamKeywordFactory() {\n const createDefault = (extSystemId: number, reviewed?: boolean): DamKeyword => {\n return {\n id: '',\n name: '',\n extSystem: extSystemId,\n flags: {\n reviewed: reviewed ?? false,\n },\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: 1,\n modifiedBy: 1,\n _resourceName: ENTITY,\n _system: SYSTEM_CORE_DAM,\n }\n }\n\n return {\n createDefault,\n }\n}\n","import type { Ref } from 'vue'\nimport { computed } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport type { ValidationScope } from '@/types/Validation'\n\nconst { required, minLength } = useValidate()\n\nexport function useKeywordValidation(keyword: Ref<DamKeyword>, validationScope: ValidationScope = undefined) {\n const rules = computed(() => ({\n keyword: {\n name: {\n required,\n minLength: minLength(3),\n },\n },\n }))\n const v$ = useVuelidate(rules, { keyword }, { $scope: validationScope })\n\n return {\n v$,\n }\n}\n","<script lang=\"ts\" setup>\nimport type { ValidationScope } from '@/types/Validation'\nimport { ADamKeywordCreateValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { useDamKeywordFactory } from '@/components/damImage/uploadQueue/keyword/KeywordFactory'\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useKeywordValidation } from '@/components/damImage/uploadQueue/keyword/keywordValidation'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { createKeyword, ENTITY } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport ARow from '@/components/ARow.vue'\nimport AFormTextField from '@/components/form/AFormTextField.vue'\n\nconst props = withDefaults(\n defineProps<{\n initialValue?: string\n disableRedirect?: boolean\n variant?: 'button' | 'icon'\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n disabled?: boolean | undefined\n validationScope?: ValidationScope\n }>(),\n {\n initialValue: '',\n disableRedirect: false,\n variant: 'button',\n buttonT: 'common.button.create',\n buttonClass: 'ml-2',\n dataCy: undefined,\n disabled: undefined,\n validationScope: ADamKeywordCreateValidationScopeSymbol,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSuccess', data: DamKeyword): void\n}>()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\nconst { initialized } = useDamConfigState()\nif (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n}\n\nconst { createDefault } = useDamKeywordFactory()\nconst keyword = ref<DamKeyword>(createDefault(initialized.damConfigExtSystem))\nconst dialog = ref(false)\nconst buttonLoading = ref(false)\n\nconst onClick = () => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n keyword.value = createDefault(initialized.damConfigExtSystem, true)\n keyword.value.name = props.initialValue\n dialog.value = true\n}\n\nconst onCancel = () => {\n dialog.value = false\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { v$ } = useKeywordValidation(keyword, props.validationScope)\nconst { t } = useI18n()\nconst { showValidationError, showRecordWas, showErrorsDefault } = useAlerts()\n\nconst onConfirm = async () => {\n if (buttonLoading.value) return\n try {\n buttonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n buttonLoading.value = false\n return\n }\n const res = await createKeyword(damClient, keyword.value)\n emit('onSuccess', res)\n showRecordWas('created')\n dialog.value = false\n if (!isUndefined(res.id) && !props.disableRedirect) {\n // router.push({ name: ROUTE.DAM.KEYWORD.DETAIL, params: { id: res.id } })\n }\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n buttonLoading.value = false\n }\n}\n</script>\n\n<template>\n <ABtnPrimary\n v-if=\"variant === 'button'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :disabled=\"disabled\"\n rounded=\"pill\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </ABtnPrimary>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n :disabled=\"disabled\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.keyword.button.add') }}\n </VTooltip>\n </VBtn>\n <VDialog v-model=\"dialog\">\n <VCard\n v-if=\"dialog\"\n width=\"500\"\n class=\"mt-0 mr-auto ml-auto\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t('common.damImage.keyword.meta.create') }}\n </ADialogToolbar>\n <VCardText>\n <ASystemEntityScope\n :system=\"SYSTEM_CORE_DAM\"\n :subject=\"ENTITY\"\n >\n <ARow>\n <AFormTextField\n v-model=\"keyword.name\"\n :label=\"t('common.damImage.keyword.model.name')\"\n :v=\"v$.keyword.name\"\n required\n data-cy=\"keyword-name\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n </ASystemEntityScope>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n :loading=\"buttonLoading\"\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n {{ t(buttonT) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport type { DocId } from '@/types/common'\nimport type { ValidationScope } from '@/types/Validation'\nimport { computed, ref } from 'vue'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport useVuelidate from '@vuelidate/core'\nimport { useKeywordSelectActions } from '@/components/damImage/uploadQueue/keyword/keywordActions'\nimport { useKeywordFilter } from '@/components/damImage/uploadQueue/keyword/KeywordFilter'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { isArray } from '@/utils/common'\nimport AFormRemoteAutocompleteWithCached from '@/components/form/AFormRemoteAutocompleteWithCached.vue'\nimport { useDamCachedAuthorsForRemoteAutocomplete } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport KeywordRemoteAutocompleteCachedKeywordChip from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteCachedKeywordChip.vue'\nimport KeywordCreateButton from '@/components/damImage/uploadQueue/keyword/KeywordCreateButton.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DocId | null | DocId[] | any\n queueId?: string | undefined\n label?: string | undefined\n required?: boolean | null\n disabled?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n dataCy?: string\n validationScope?: ValidationScope\n }>(),\n {\n label: undefined,\n queueId: undefined,\n required: null,\n disabled: undefined,\n multiple: false,\n clearable: false,\n dataCy: undefined,\n validationScope: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | null | DocId[]): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue) {\n emit('update:modelValue', [...newValue])\n },\n})\n\nconst requiredComputed = computed(() => !!props.required)\n\nconst { requiredIf } = useValidate()\n\nconst rules = {\n modelValueComputed: {\n required: requiredIf(requiredComputed),\n },\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate(rules, { modelValueComputed }, { $scope: props.validationScope })\n\nconst { fetchItemsMinimal } = useKeywordSelectActions()\n\nconst innerFilter = useKeywordFilter()\n\nconst addNewKeywordText = ref('')\n\nconst searchChange = (newValue: string) => {\n if (newValue.length > 0) addNewKeywordText.value = newValue\n}\n\nconst { addManualToCachedKeywords } = useDamCachedKeywords()\n\nconst afterCreate = (keyword: DamKeyword) => {\n addManualToCachedKeywords(keyword)\n if (isArray(modelValueComputed.value)) {\n modelValueComputed.value = [...modelValueComputed.value, keyword.id]\n return\n }\n modelValueComputed.value = keyword.id\n}\n\nconst itemSlotIsSelected = (item: DocId) => {\n if (isArray(modelValueComputed.value)) {\n return modelValueComputed.value.includes(item)\n } else if (modelValueComputed.value) {\n return modelValueComputed.value === item\n }\n return false\n}\n</script>\n\n<template>\n <div class=\"d-flex\">\n <AFormRemoteAutocompleteWithCached\n v-model=\"modelValueComputed\"\n :use-cached=\"useDamCachedAuthorsForRemoteAutocomplete\"\n :v=\"v$\"\n :required=\"requiredComputed\"\n :label=\"label\"\n :fetch-items-minimal=\"fetchItemsMinimal\"\n :inner-filter=\"innerFilter\"\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n filter-by-field=\"text\"\n :filter-sort-by=\"null\"\n item-title=\"name\"\n item-value=\"id\"\n :data-cy=\"dataCy\"\n @search-change=\"searchChange\"\n >\n <template #item=\"{ props: itemSlotProps, item: itemSlotItem }\">\n <VListItem\n v-bind=\"itemSlotProps\"\n @click.prevent=\"\"\n >\n <template\n v-if=\"multiple\"\n #prepend\n >\n <VCheckboxBtn\n :model-value=\"itemSlotIsSelected(itemSlotItem.value)\"\n :ripple=\"false\"\n />\n </template>\n <template #title>\n <KeywordRemoteAutocompleteCachedKeywordChip\n :id=\"itemSlotItem.value\"\n :key=\"itemSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"itemSlotItem.title\"\n text-only\n />\n </template>\n </VListItem>\n </template>\n <template #chip=\"{ item: chipSlotItem }\">\n <KeywordRemoteAutocompleteCachedKeywordChip\n :id=\"chipSlotItem.value\"\n :key=\"chipSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"chipSlotItem.title\"\n force-rounded\n />\n </template>\n </AFormRemoteAutocompleteWithCached>\n <div>\n <KeywordCreateButton\n variant=\"icon\"\n data-cy=\"add-keyword\"\n :initial-value=\"addNewKeywordText\"\n disable-redirect\n :disabled=\"disabled\"\n @on-success=\"afterCreate\"\n />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed, ref } from 'vue'\nimport { DamAssetType } from '@/types/coreDam/Asset'\nimport { type AssetFile, assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetCustomMetadataForm from '@/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue'\nimport ACopyText from '@/components/ACopyText.vue'\nimport { prettyBytes } from '@/utils/file'\nimport AssetMetadataImageAttributes from '@/components/damImage/uploadQueue/components/AssetMetadataImageAttributes.vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport { dateTimePretty } from '@/utils/datetime'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\n\nconst { t } = useI18n()\n\nconst panels = ref(['metadata', 'file'])\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, authorConflicts, metadataAreTouched } = storeToRefs(assetDetailStore)\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetType.Default\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\n\nconst assetMainFile = computed<null | AssetFile>(() => {\n return asset.value && asset.value.mainFile ? (asset.value.mainFile as AssetFile) : null\n})\n\nconst { damConfigExtSystem } = useDamConfigState()\n\nconst onAnyMetadataChange = () => {\n metadataAreTouched.value = true\n}\n</script>\n\n<template>\n <VExpansionPanels\n v-if=\"asset\"\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.metadata')\"\n value=\"metadata\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataForm\n v-if=\"asset\"\n v-model=\"asset.metadata.customData\"\n :asset-type=\"assetType\"\n @any-change=\"onAnyMetadataChange\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"damConfigExtSystem[assetType].keywords.enabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"asset.keywords\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n data-cy=\"custom-field-keywords\"\n clearable\n multiple\n :required=\"damConfigExtSystem[assetType].keywords.required\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"damConfigExtSystem[assetType].authors.enabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"asset.authors\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n clearable\n multiple\n :required=\"damConfigExtSystem[assetType].authors.required\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.file')\"\n value=\"file\"\n >\n <VExpansionPanelText class=\"text-caption\">\n <!-- all types -->\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.id') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"asset.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.type') }}\n </VCol>\n <VCol cols=\"9\">\n {{ asset.attributes.assetType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.created') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.createdAt) }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.modified') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.modifiedAt) }}\n </VCol>\n </VRow>\n <div v-if=\"assetMainFile\">\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mainFileId') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"assetMainFile.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mimeType') }}\n </VCol>\n <VCol cols=\"9\">\n {{ assetMainFile.fileAttributes.mimeType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.size') }}\n </VCol>\n <VCol cols=\"9\">\n {{ prettyBytes(assetMainFile.fileAttributes.size) }}\n </VCol>\n </VRow>\n <AssetMetadataImageAttributes\n v-if=\"isTypeImage && assetFileIsImageFile(assetMainFile)\"\n :file=\"assetMainFile\"\n />\n </div>\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n</template>\n","<script lang=\"ts\" setup>\nimport AssetDetailSidebarActionsWrapper from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue'\nimport { isNull } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport useVuelidate from '@vuelidate/core'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetMetadata from '@/components/damImage/uploadQueue/components/AssetMetadata.vue'\nimport { updateAssetMetadata } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nwithDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n isActive: boolean\n dataCy?: string\n assetType: DamAssetType\n }>(),\n {\n dataCy: undefined,\n }\n)\n\nconst { t } = useI18n()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, updateUploadStore } = storeToRefs(assetDetailStore)\nconst uploadQueueStore = useUploadQueuesStore()\n\nconst saveButtonLoading = ref(false)\n\nconst { showRecordWas, showValidationError, showErrorsDefault } = useAlerts()\n\nconst v$ = useVuelidate({}, {}, { $scope: ADamAssetMetadataValidationScopeSymbol })\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onSave = async () => {\n if (isNull(asset.value)) return\n saveButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveButtonLoading.value = false\n return\n }\n try {\n await updateAssetMetadata(damClient, asset.value)\n if (updateUploadStore.value && !isNull(asset.value)) {\n await uploadQueueStore.updateFromDetail(asset.value)\n }\n showRecordWas('updated')\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n saveButtonLoading.value = false\n }\n}\n</script>\n\n<template>\n <AssetDetailSidebarActionsWrapper\n v-if=\"isActive\"\n :queue-key=\"queueKey\"\n >\n <ABtnPrimary\n type=\"submit\"\n class=\"ml-2\"\n data-cy=\"button-save\"\n :loading=\"saveButtonLoading\"\n @click.stop=\"onSave\"\n >\n {{ t('common.button.save') }}\n </ABtnPrimary>\n </AssetDetailSidebarActionsWrapper>\n <AssetMetadata />\n</template>\n","import { acceptHMRUpdate, defineStore } from 'pinia'\nimport type { AssetFileImage } from '@/types/coreDam/AssetFile'\nimport type { RegionOfInterest } from '@/types/coreDam/Roi'\n\ninterface State {\n imageFile: null | AssetFileImage\n loader: boolean\n roi: null | RegionOfInterest\n timestampCropper: number\n timestampRoiPreviews: number\n}\n\nexport const useImageRoiStore = defineStore('damImageRoiStore', {\n state: (): State => ({\n imageFile: null,\n loader: false,\n roi: null,\n timestampCropper: Date.now(),\n timestampRoiPreviews: Date.now(),\n }),\n actions: {\n setImageFile(file: AssetFileImage | null) {\n this.imageFile = file\n },\n setRoi(roi: RegionOfInterest | null) {\n this.roi = roi\n },\n showLoader() {\n this.loader = true\n },\n hideLoader() {\n this.loader = false\n },\n forceReloadRoiPreviews() {\n this.timestampRoiPreviews = Date.now()\n },\n forceReloadCropper() {\n this.timestampCropper = Date.now()\n },\n reset() {\n this.imageFile = null\n this.loader = false\n this.roi = null\n this.timestampCropper = Date.now()\n this.timestampRoiPreviews = Date.now()\n },\n },\n})\n\nif (import.meta.hot) {\n import.meta.hot.accept(acceptHMRUpdate(useImageRoiStore, import.meta.hot))\n}\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId } from '@/types/common'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { rotateImage } from '@/components/damImage/uploadQueue/api/damImageApi'\n\nconst props = withDefaults(\n defineProps<{\n imageId: DocId\n dataCy?: string\n }>(),\n {\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'afterRotate'): void\n}>()\n\nconst { showRecordWas, showErrorsDefault } = useAlerts()\n\nconst loading = ref(false)\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst rotate = async (angle: 90 | 270) => {\n try {\n loading.value = true\n await rotateImage(damClient, props.imageId, angle)\n showRecordWas('updated')\n emit('afterRotate')\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n}\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <div class=\"text-caption\">\n {{ t('common.damImage.asset.detail.roi.rotate.rotateMainFileImage') }}\n </div>\n <div\n v-if=\"loading\"\n class=\"w-100 d-flex align-center justify-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n />\n </div>\n <div v-else>\n <ABtnTertiary\n prepend-icon=\"mdi-rotate-right\"\n class=\"mr-2\"\n data-cy=\"button-rotate-right\"\n @click.stop=\"rotate(90)\"\n >\n {{ t('common.damImage.asset.detail.roi.rotate.rotateClockwise') }}\n </ABtnTertiary>\n <ABtnTertiary\n prepend-icon=\"mdi-rotate-left\"\n data-cy=\"button-rotate-left\"\n @click.stop=\"rotate(270)\"\n >\n {{ t('common.damImage.asset.detail.roi.rotate.rotateCounterclockwise') }}\n </ABtnTertiary>\n </div>\n </div>\n</template>\n","import type { RegionOfInterest } from '@/types/coreDam/Roi'\nimport type { AxiosInstance } from 'axios'\nimport type { DocId } from '@/types/common'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport { apiUpdateOne } from '@/services/api/apiUpdateOne'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\n\n// export interface AssetMetadataBulkItem {\n// id: DocId\n// title: string\n// description: string\n// described: boolean\n// }\n\nconst END_POINT = '/adm/v1/roi'\nconst END_POINT_IMAGE_ROI = '/adm/v1/image/:id/roi'\nexport const ENTITY = 'asset'\n\nexport const fetchRoi = (client: () => AxiosInstance, id: DocId) =>\n apiFetchOne<RegionOfInterest>(client, END_POINT + '/:id', { id }, 'coreDam', ENTITY)\n\nexport const updateRoi = (client: () => AxiosInstance, id: DocId, data: RegionOfInterest) =>\n apiUpdateOne<RegionOfInterest>(client, data, END_POINT + '/:id', { id }, 'coreDam', ENTITY)\n\nexport const fetchImageRoiList = (\n client: () => AxiosInstance,\n imageId: DocId,\n pagination: Pagination,\n filterBag: FilterBag\n) => apiFetchList<any[]>(client, END_POINT_IMAGE_ROI, { id: imageId }, pagination, filterBag, 'coreDam', ENTITY)\n","<script lang=\"ts\" setup>\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { useImageRoiStore } from '@/components/damImage/uploadQueue/composables/imageRoiStore'\nimport { useI18n } from 'vue-i18n'\nimport { usePagination } from '@/composables/system/pagination'\nimport { assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport { cloneDeep } from '@/utils/common'\nimport { onMounted } from 'vue'\nimport AssetDetailSidebarActionsWrapper from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue'\nimport AssetFileRotate from '@/components/damImage/uploadQueue/components/AssetFileRotate.vue'\nimport { fetchImageRoiList, fetchRoi } from '@/components/damImage/uploadQueue/api/damImageRoiApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nwithDefaults(\n defineProps<{\n isActive: boolean\n queueKey: UploadQueueKey\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n\nconst imageRoiStore = useImageRoiStore()\nconst assetDetailStore = useAssetDetailStore()\n\nconst pagination = usePagination()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst loadRois = async () => {\n if (imageRoiStore.imageFile) {\n imageRoiStore.showLoader()\n const res = await fetchImageRoiList(damClient, imageRoiStore.imageFile.id, pagination, {})\n if (res.length > 0 && res[0].id) {\n const roi = await fetchRoi(damClient, res[0].id)\n imageRoiStore.setRoi(roi)\n imageRoiStore.hideLoader()\n return\n }\n imageRoiStore.setRoi(null)\n imageRoiStore.hideLoader()\n return\n }\n imageRoiStore.setRoi(null)\n imageRoiStore.hideLoader()\n}\n\nconst afterRotate = async () => {\n await loadRois()\n imageRoiStore.forceReloadRoiPreviews()\n imageRoiStore.forceReloadCropper()\n}\n\n// const activeSlotChange = async (slot: null | AssetSlot) => {\n// imageRoiStore.setRoi(null)\n// if (!slot || !assetFileIsImageFile(slot.assetFile)) return\n// imageRoiStore.showLoader()\n// const imageFileDetail = await fetchImageFile(slot.assetFile.id)\n// imageRoiStore.setImageFile(cloneDeep(imageFileDetail))\n// await loadRois()\n// imageRoiStore.forceReloadRoiPreviews()\n// imageRoiStore.forceReloadCropper()\n// }\n\nonMounted(async () => {\n imageRoiStore.reset()\n imageRoiStore.showLoader()\n if (\n assetDetailStore.asset &&\n assetDetailStore.asset.mainFile &&\n assetFileIsImageFile(assetDetailStore.asset.mainFile)\n ) {\n imageRoiStore.setImageFile(cloneDeep(assetDetailStore.asset.mainFile))\n await loadRois()\n }\n imageRoiStore.hideLoader()\n})\n</script>\n\n<template>\n <AssetDetailSidebarActionsWrapper\n v-if=\"isActive\"\n :queue-key=\"queueKey\"\n >\n <ABtnTertiary\n v-if=\"!imageRoiStore.loader\"\n @click.stop=\"imageRoiStore.forceReloadRoiPreviews()\"\n >\n {{ t('common.damImage.asset.detail.roi.refresh') }}\n </ABtnTertiary>\n </AssetDetailSidebarActionsWrapper>\n <div class=\"px-3\">\n <!-- <AssetDetailSlotSelect-->\n <!-- class=\"mt-4\"-->\n <!-- @active-slot-change=\"activeSlotChange\"-->\n <!-- />-->\n <div class=\"v-expansion-panel-title px-0\">\n {{ t('common.damImage.asset.detail.roi.title') }}\n </div>\n <div class=\"text-caption\">\n {{ t('common.damImage.asset.detail.roi.description') }}\n </div>\n </div>\n <div\n v-if=\"imageRoiStore.loader\"\n class=\"w-100 h-100 d-flex align-center justify-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n />\n </div>\n <div\n v-else-if=\"imageRoiStore.roi\"\n class=\"crop-preview pa-2\"\n >\n <div\n v-for=\"item in imageRoiStore.roi?.links.image_roi_example\"\n :key=\"item.url\"\n class=\"pb-2\"\n >\n <div class=\"text-subtitle-2\">\n {{ item.title }}\n </div>\n <img\n :src=\"item.url + '?timestamp=' + imageRoiStore.timestampRoiPreviews\"\n :width=\"item.width\"\n :height=\"item.height\"\n alt=\"\"\n >\n </div>\n </div>\n <AssetFileRotate\n v-if=\"imageRoiStore.imageFile\"\n :image-id=\"imageRoiStore.imageFile.id\"\n class=\"mx-2\"\n @after-rotate=\"afterRotate\"\n />\n</template>\n\n<style lang=\"scss\">\n.crop-preview {\n width: 100%;\n\n img {\n max-width: 100%;\n height: auto;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { nextTick, onBeforeUnmount, onMounted } from 'vue'\nimport { useAssetDetailSidebarActionbar } from '@/components/damImage/uploadQueue/composables/assetDetailSidebarActionbar'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n }>(),\n {\n }\n)\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { mounted, unMounted, divClassName } = useAssetDetailSidebarActionbar(props.queueKey)\n\nonMounted(async () => {\n await nextTick()\n mounted()\n})\n\nonBeforeUnmount(() => {\n unMounted()\n})\n</script>\n\n<template>\n <div :class=\"divClassName\" />\n</template>\n","<script setup lang=\"ts\">\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport type { DocId } from '@/types/common'\nimport type { DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport type { AssetFileFailReason, AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport { useI18n } from 'vue-i18n'\nimport AssetInfobox from '@/components/damImage/uploadQueue/components/AssetInfobox.vue'\nimport AssetDetailSidebarMetadata from '@/components/damImage/uploadQueue/components/AssetDetailSidebarMetadata.vue'\nimport AssetDetailSidebarROI from '@/components/damImage/uploadQueue/components/AssetDetailSidebarROI.vue'\nimport AssetDetailSidebarActionsTeleportTarget from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsTeleportTarget.vue'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nwithDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n assetId: DocId\n isVideo: boolean\n isAudio: boolean\n isImage: boolean\n isDocument: boolean\n dataCy?: string\n assetStatus: DamAssetStatus\n assetType: DamAssetType\n assetMainFileStatus?: AssetFileProcessStatus | undefined\n assetMainFileFailReason?: AssetFileFailReason | undefined\n }>(),\n {\n assetMainFileStatus: undefined,\n assetMainFileFailReason: undefined,\n dataCy: undefined,\n }\n)\n\nconst { t } = useI18n()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { activeTab } = storeToRefs(assetDetailStore)\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs\n v-model=\"activeTab\"\n show-arrows\n class=\"sidebar-info__tabs\"\n >\n <VTab\n :value=\"AssetDetailTabImageWithRoi.Info\"\n data-cy=\"button-meta\"\n >\n {{ t('common.damImage.asset.detail.tabs.info') }}\n </VTab>\n <VTab\n v-if=\"isImage\"\n :value=\"AssetDetailTabImageWithRoi.ROI\"\n data-cy=\"button-focus\"\n >\n {{ t('common.damImage.asset.detail.tabs.roi') }}\n </VTab>\n </VTabs>\n\n <div class=\"sidebar-info__content\">\n <AssetInfobox\n :asset-status=\"assetStatus\"\n :asset-main-file-status=\"assetMainFileStatus\"\n :asset-main-file-fail-reason=\"assetMainFileFailReason\"\n />\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n class=\"py-2\"\n >\n <AssetDetailSidebarMetadata\n :queue-key=\"queueKey\"\n :is-active=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n :asset-type=\"assetType\"\n />\n </div>\n <div\n v-if=\"isImage && activeTab === AssetDetailTabImageWithRoi.ROI\"\n class=\"py-2\"\n >\n <AssetDetailSidebarROI\n :is-active=\"activeTab === AssetDetailTabImageWithRoi.ROI\"\n :queue-key=\"queueKey\"\n />\n </div>\n </div>\n <div class=\"sidebar-info__actions px-2\">\n <AssetDetailSidebarActionsTeleportTarget :queue-key=\"queueKey\" />\n </div>\n </div>\n </div>\n</template>\n","import type { RegionOfInterest } from '@/types/coreDam/Roi'\nimport type Cropper from 'cropperjs'\nimport { stringToFloat, stringToInt } from '@/utils/string'\n\nconst PRECISION = 3\n\nexport const regionToCrop = function (\n cropper: Cropper,\n regionOfInterest: RegionOfInterest,\n originalImageWidth: number,\n originalImageHeight: number\n) {\n const imageData = cropper.getImageData()\n const ratio = imageData.naturalHeight / originalImageHeight\n\n return {\n x: regionOfInterest.pointX * ratio,\n y: regionOfInterest.pointY * ratio,\n width: regionOfInterest.percentageWidth * imageData.naturalWidth,\n height: regionOfInterest.percentageHeight * imageData.naturalHeight,\n rotate: 0,\n scaleX: 1,\n scaleY: 1,\n }\n}\n\nexport const cropToRegion = function (\n cropper: Cropper,\n regionOfInterest: RegionOfInterest,\n originalImageWidth: number,\n originalImageHeight: number\n) {\n const imageData = cropper.getImageData()\n const data = cropper.getData()\n const ratio = imageData.naturalHeight / originalImageHeight\n\n let pointX = stringToInt((data.x / ratio).toFixed(PRECISION))\n if (pointX < 0) pointX = 0\n\n let pointY = stringToInt((data.y / ratio).toFixed(PRECISION))\n if (pointY < 0) pointY = 0\n\n let percentageWidth = stringToFloat((data.width / imageData.naturalWidth).toFixed(PRECISION))\n const validateWidth = percentageWidth * originalImageWidth + pointX\n if (validateWidth > originalImageWidth) {\n percentageWidth = percentageWidth - ((validateWidth - originalImageWidth) * 100) / originalImageWidth\n }\n\n let percentageHeight = stringToFloat((data.height / imageData.naturalHeight).toFixed(PRECISION))\n const validateHeight = percentageHeight * originalImageHeight + pointY\n if (validateHeight > originalImageHeight) {\n percentageHeight = percentageHeight - ((validateHeight - originalImageHeight) * 100) / originalImageHeight\n }\n\n regionOfInterest.pointX = pointX\n regionOfInterest.pointY = pointY\n regionOfInterest.percentageWidth = percentageWidth\n regionOfInterest.percentageHeight = percentageHeight\n\n return regionOfInterest\n}\n","/*!\n * Cropper.js v1.6.1\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2023-09-17T03:44:19.860Z\n */\n\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nvar WINDOW = IS_BROWSER ? window : {};\nvar IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\nvar HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\nvar NAMESPACE = 'cropper';\n\n// Actions\nvar ACTION_ALL = 'all';\nvar ACTION_CROP = 'crop';\nvar ACTION_MOVE = 'move';\nvar ACTION_ZOOM = 'zoom';\nvar ACTION_EAST = 'e';\nvar ACTION_WEST = 'w';\nvar ACTION_SOUTH = 's';\nvar ACTION_NORTH = 'n';\nvar ACTION_NORTH_EAST = 'ne';\nvar ACTION_NORTH_WEST = 'nw';\nvar ACTION_SOUTH_EAST = 'se';\nvar ACTION_SOUTH_WEST = 'sw';\n\n// Classes\nvar CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\nvar CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\nvar CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\nvar CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\nvar CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\nvar CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\nvar CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n// Data keys\nvar DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\nvar DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n// Drag modes\nvar DRAG_MODE_CROP = 'crop';\nvar DRAG_MODE_MOVE = 'move';\nvar DRAG_MODE_NONE = 'none';\n\n// Events\nvar EVENT_CROP = 'crop';\nvar EVENT_CROP_END = 'cropend';\nvar EVENT_CROP_MOVE = 'cropmove';\nvar EVENT_CROP_START = 'cropstart';\nvar EVENT_DBLCLICK = 'dblclick';\nvar EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\nvar EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\nvar EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\nvar EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\nvar EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\nvar EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\nvar EVENT_READY = 'ready';\nvar EVENT_RESIZE = 'resize';\nvar EVENT_WHEEL = 'wheel';\nvar EVENT_ZOOM = 'zoom';\n\n// Mime types\nvar MIME_TYPE_JPEG = 'image/jpeg';\n\n// RegExps\nvar REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\nvar REGEXP_DATA_URL = /^data:/;\nvar REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\nvar REGEXP_TAG_NAME = /^img|canvas$/i;\n\n// Misc\n// Inspired by the default width and height of a canvas element.\nvar MIN_CONTAINER_WIDTH = 200;\nvar MIN_CONTAINER_HEIGHT = 100;\n\nvar DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: MIN_CONTAINER_WIDTH,\n minContainerHeight: MIN_CONTAINER_HEIGHT,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n};\n\nvar TEMPLATE = '<div class=\"cropper-container\" touch-action=\"none\">' + '<div class=\"cropper-wrap-box\">' + '<div class=\"cropper-canvas\"></div>' + '</div>' + '<div class=\"cropper-drag-box\"></div>' + '<div class=\"cropper-crop-box\">' + '<span class=\"cropper-view-box\"></span>' + '<span class=\"cropper-dashed dashed-h\"></span>' + '<span class=\"cropper-dashed dashed-v\"></span>' + '<span class=\"cropper-center\"></span>' + '<span class=\"cropper-face\"></span>' + '<span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span>' + '<span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span>' + '<span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span>' + '<span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span>' + '</div>' + '</div>';\n\n/**\n * Check if the given value is not a number.\n */\nvar isNaN = Number.isNaN || WINDOW.isNaN;\n\n/**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\nfunction isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n}\n\n/**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\nvar isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n};\n\n/**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n\n/**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\nfunction isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\nfunction isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n}\n\n/**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\nfunction isFunction(value) {\n return typeof value === 'function';\n}\nvar slice = Array.prototype.slice;\n\n/**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\nfunction toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n}\n\n/**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\nfunction forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n toArray(data).forEach(function (value, key) {\n callback.call(data, value, key, data);\n });\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n return data;\n}\n\n/**\n * Extend the given object.\n * @param {*} target - The target object to extend.\n * @param {*} args - The rest objects for merging to the target object.\n * @returns {Object} The extended object.\n */\nvar assign = Object.assign || function assign(target) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (isObject(target) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n target[key] = arg[key];\n });\n }\n });\n }\n return target;\n};\nvar REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n/**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\nfunction normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n}\nvar REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n/**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\nfunction setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value = \"\".concat(value, \"px\");\n }\n style[property] = value;\n });\n}\n\n/**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\nfunction hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n}\n\n/**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\nfunction addClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n var className = element.className.trim();\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n}\n\n/**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\nfunction removeClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n}\n\n/**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\nfunction toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n }\n\n // IE10-11 doesn't support the second parameter of `classList.toggle`\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n}\nvar REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n/**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\nfunction toParamCase(value) {\n return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n}\n\n/**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\nfunction getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n if (element.dataset) {\n return element.dataset[name];\n }\n return element.getAttribute(\"data-\".concat(toParamCase(name)));\n}\n\n/**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\nfunction setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n }\n}\n\n/**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\nfunction removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (error) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (error) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(toParamCase(name)));\n }\n}\nvar REGEXP_SPACES = /\\s\\s*/;\nvar onceSupported = function () {\n var supported = false;\n if (IS_BROWSER) {\n var once = false;\n var listener = function listener() {};\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n return supported;\n}();\n\n/**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\nfunction removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n element.removeEventListener(event, handler, options);\n });\n}\n\n/**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\nfunction addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n listener.apply(element, args);\n };\n if (!listeners[event]) {\n listeners[event] = {};\n }\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n element.addEventListener(event, _handler, options);\n });\n}\n\n/**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\nfunction dispatchEvent(element, type, data) {\n var event;\n\n // Event and CustomEvent on IE9-11 are global objects, not constructors\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n return element.dispatchEvent(event);\n}\n\n/**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\nfunction getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n}\nvar location = WINDOW.location;\nvar REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n/**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\nfunction isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n}\n\n/**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\nfunction addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n}\n\n/**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\nfunction getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n }\n\n // Rotate should come first before scale to match orientation transform\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n}\n\n/**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\nfunction getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n var maxRatio = 0;\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n if (Math.abs(ratio) > Math.abs(maxRatio)) {\n maxRatio = ratio;\n }\n });\n });\n return maxRatio;\n}\n\n/**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\nfunction getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n startX: pageX,\n startY: pageY\n }, end);\n}\n\n/**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\nfunction getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n}\n\n/**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\nfunction getAdjustedSizes(_ref4) {\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width: width,\n height: height\n };\n}\n\n/**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\nfunction getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n}\n\n/**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\nfunction getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n}\nvar fromCharCode = String.fromCharCode;\n\n/**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\nfunction getStringFromCharCode(dataView, start, length) {\n var str = '';\n length += start;\n for (var i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n}\nvar REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n/**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\nfunction dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n}\n\n/**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\nfunction arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n\n // Chunk Typed Array for better performance (#435)\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n}\n\n/**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\nfunction resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (error) {\n orientation = 1;\n }\n return orientation;\n}\n\n/**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\nfunction parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180°\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90°\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90°\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90°\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90°\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n\nvar render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n var minWidth = Number(options.minContainerWidth);\n var minHeight = Number(options.minContainerHeight);\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n canvasData.left = (containerData.width - canvasData.width) / 2;\n canvasData.top = (containerData.height - canvasData.height) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true);\n\n // Initialize auto crop area\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n // The width/height of auto crop area must large than \"minWidth/Height\"\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n // The min/maxCropBoxWidth/Height must be less than container's width/height\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n }\n\n // The minWidth/Height must be less than maxWidth/Height\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n};\n\nvar preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n if (!preview) {\n return;\n }\n var previews = preview;\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img');\n\n // Save the original size for recover\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.src = url;\n img.alt = alt;\n\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n if (!this.cropped || this.disabled) {\n return;\n }\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n};\n\nvar events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n};\n\nvar handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\n }\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var ratioX = container.offsetWidth / containerData.width;\n var ratioY = container.offsetHeight / containerData.height;\n var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n // Resize when width changed or height changed\n if (ratio !== 1) {\n var canvasData;\n var cropBoxData;\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n this.render();\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n if (this.disabled) {\n return;\n }\n event.preventDefault();\n\n // Limit wheel speed to prevent zoom too fast (#21)\n if (this.wheeling) {\n return;\n }\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n if (this.disabled\n\n // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n // Open context menu\n || event.ctrlKey)) {\n return;\n }\n var options = this.options,\n pointers = this.pointers;\n var action;\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n // This line is required for preventing page zooming in iOS browsers\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n if (this.disabled || !action) {\n return;\n }\n var pointers = this.pointers;\n event.preventDefault();\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n var action = this.action,\n pointers = this.pointers;\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n if (!action) {\n return;\n }\n event.preventDefault();\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n};\n\nvar change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset;\n\n // Locking aspect ratio in \"free mode\" by holding shift key\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n break;\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n break;\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n break;\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n break;\n }\n };\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n\n // Resize crop box\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_SOUTH);\n height += range.y;\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n\n // Move canvas\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n\n // Zoom canvas\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n\n // Create crop box\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n if (range.y < 0) {\n top -= height;\n }\n\n // Show the crop box if is hidden\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n break;\n }\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n }\n\n // Override\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n};\n\nvar methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true);\n\n // Render canvas after crop box rendered\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n return this;\n },\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n if (!element[NAMESPACE]) {\n return this;\n }\n element[NAMESPACE] = undefined;\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n this.uncreate();\n return this;\n },\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n if (changed) {\n this.renderCanvas(true);\n }\n }\n return this;\n },\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n };\n\n // Zoom from the triggering point of the event\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n return this;\n },\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n return this;\n },\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n return data;\n },\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n var ratio = imageData.width / imageData.naturalWidth;\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n this.setCropBoxData(cropBoxData);\n }\n return this;\n },\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n return data;\n },\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n return data || {};\n },\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.renderCropBox();\n }\n return this;\n },\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n // Returns the source canvas if it is not cropped.\n if (!this.cropped) {\n return source;\n }\n var _this$getData = this.getData(options.rounded),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n var sourceWidth = source.width;\n var sourceHeight = source.height;\n\n // Source canvas parameters\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight;\n\n // Destination canvas parameters\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n var params = [srcX, srcY, srcWidth, srcHeight];\n\n // Avoid \"IndexSizeError\"\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n }\n\n // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n if (this.ready) {\n this.initCropBox();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n return this;\n },\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n return this;\n }\n};\n\nvar AnotherCropper = WINDOW.Cropper;\nvar Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Cropper);\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an <img> or <canvas> element.');\n }\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n if (element[NAMESPACE]) {\n return;\n }\n element[NAMESPACE] = this;\n if (tagName === 'img') {\n this.isImg = true;\n\n // e.g.: \"img/picture.jpg\"\n url = element.getAttribute('src') || '';\n this.originalUrl = url;\n\n // Stop when it's a blank image\n if (!url) {\n return;\n }\n\n // e.g.: \"https://example.com/img/picture.jpg\"\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n if (!url) {\n return;\n }\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n }\n\n // Only IE10+ supports Typed Arrays\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n }\n\n // Detect the mime type of the image directly if it is a Data URL\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n return;\n }\n\n // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr;\n\n // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n };\n\n // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n // The third parameter is required for avoiding side-effect (#682)\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData;\n\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n var _parseOrientation = parseOrientation(orientation);\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin = element.crossOrigin;\n var crossOriginUrl = url;\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n }\n\n // Bust cache when there is not a \"crossOrigin\" property (#519)\n crossOriginUrl = addTimestamp(url);\n }\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = crossOriginUrl || url;\n image.alt = element.alt || 'The image to crop';\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true;\n\n // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.initialImageData = assign({}, _this2.imageData);\n _this2.sizing = false;\n _this2.sized = true;\n _this2.build();\n };\n\n // Most modern browsers (excepts iOS WebKit)\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n sizingImage.src = image.src;\n\n // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n if (!isIOSWebKit) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n var element = this.element,\n options = this.options,\n image = this.image;\n\n // Create cropper elements\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image);\n\n // Hide the original image\n addClass(element, CLASS_HIDDEN);\n\n // Inserts the cropper after to the current image\n container.insertBefore(cropper, element.nextSibling);\n\n // Show the hidden image\n removeClass(image, CLASS_HIDE);\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n if (options.autoCrop) {\n this.crop();\n }\n this.setData(options.data);\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n this.ready = false;\n this.unbind();\n this.resetPreview();\n var parentNode = this.cropper.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.cropper);\n }\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n return Cropper;\n}();\nassign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\nexport { Cropper as default };\n","<script setup lang=\"ts\" generic=\"T extends EventTarget = EventTarget\">\nimport Cropper from 'cropperjs'\nimport { nextTick, onMounted, onUnmounted, ref } from 'vue'\nimport { isNull } from '@/utils/common'\nimport 'cropperjs/dist/cropper.css'\n\nconst props = withDefaults(\n defineProps<{\n // Library props\n src?: string\n alt?: string\n containerStyle?: { [key: string]: string } | undefined\n imgStyle?: { [key: string]: string } | undefined\n // CropperJS props\n aspectRatio?: number\n autoCrop?: boolean\n autoCropArea?: number\n background?: boolean\n center?: boolean\n checkCrossOrigin?: boolean\n checkOrientation?: boolean\n cropBoxMovable?: boolean\n cropBoxResizable?: boolean\n data?: Cropper.SetDataOptions | null\n dragMode?: Cropper.DragMode\n guides?: boolean\n highlight?: boolean\n initialAspectRatio?: number\n modal?: boolean\n movable?: boolean\n preview?: HTMLElement | HTMLElement[] | NodeListOf<HTMLElement> | string\n responsive?: boolean\n restore?: boolean\n rotatable?: boolean\n scalable?: boolean\n toggleDragModeOnDblclick?: boolean\n viewMode?: Cropper.ViewMode\n wheelZoomRatio?: number\n zoomOnTouch?: boolean\n zoomOnWheel?: boolean\n zoomable?: boolean\n // Size limitation\n minCanvasWidth?: number\n minCanvasHeight?: number\n minContainerWidth?: number\n minContainerHeight?: number\n minCropBoxWidth?: number\n minCropBoxHeight?: number\n // callbacks\n ready?: null | ((event: Cropper.ReadyEvent<T>) => void)\n crop?: null | ((event: Cropper.CropEvent<T>) => void)\n cropend?: null | ((event: Cropper.CropEndEvent<T>) => void)\n cropmove?: null | ((event: Cropper.CropMoveEvent<T>) => void)\n cropstart?: null | ((event: Cropper.CropStartEvent<T>) => void)\n zoom?: null | ((event: Cropper.ZoomEvent<T>) => void)\n }>(),\n {\n containerStyle: undefined,\n src: '',\n alt: '',\n imgStyle: undefined,\n aspectRatio: NaN,\n autoCrop: true,\n autoCropArea: 0.8,\n background: true,\n center: true,\n checkCrossOrigin: true,\n checkOrientation: true,\n cropBoxMovable: true,\n cropBoxResizable: true,\n data: null,\n dragMode: 'crop',\n guides: true,\n highlight: true,\n initialAspectRatio: NaN,\n modal: true,\n movable: true,\n preview: '',\n responsive: true,\n restore: true,\n rotatable: true,\n scalable: true,\n toggleDragModeOnDblclick: true,\n viewMode: 0,\n wheelZoomRatio: 0.1,\n zoomOnTouch: true,\n zoomable: true,\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minContainerWidth: 200,\n minContainerHeight: 100,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n ready: null,\n crop: null,\n cropend: null,\n cropmove: null,\n cropstart: null,\n zoom: null,\n }\n)\n\nconst cropperInstance = ref<InstanceType<typeof Cropper> | null>(null)\nconst imgEl = ref<HTMLImageElement | HTMLCanvasElement | null>(null)\nconst loading = ref(true)\n\nconst enable = () => {\n cropperInstance.value?.enable()\n}\n\nconst disable = () => {\n cropperInstance.value?.disable()\n}\n\nconst destroy = () => {\n cropperInstance.value?.destroy()\n}\n\nconst getImageData = () => {\n return cropperInstance.value?.getImageData()\n}\n\nconst getData = () => {\n return cropperInstance.value?.getData()\n}\n\nconst setData = (data: Cropper.SetDataOptions) => {\n return cropperInstance.value?.setData(data)\n}\n\ndefineExpose({\n enable,\n disable,\n destroy,\n getImageData,\n getData,\n setData,\n})\n\nonMounted(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { containerStyle, src, alt, imgStyle, ...data } = props\n const propsOptions = data as Record<string, any>\n const options: Record<string, any> = {}\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(propsOptions, key) && propsOptions[key] !== undefined) {\n options[key] = propsOptions[key]\n }\n }\n nextTick(() => {\n if (!isNull(imgEl.value)) {\n console.log(imgEl.value)\n cropperInstance.value = new Cropper(imgEl.value as any, options)\n setTimeout(() => {\n loading.value = false\n }, 1000)\n }\n })\n})\n\nonUnmounted(() => {\n destroy()\n})\n</script>\n\n<template>\n <div class=\"d-flex flex-column\">\n <div\n v-if=\"loading\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n\n <div :style=\"containerStyle\">\n <img\n ref=\"imgEl\"\n :style=\"[{ 'max-width': '100%', opacity: loading ? 0 : 1 }, imgStyle]\"\n :alt=\"alt\"\n :src=\"src\"\n >\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onUnmounted, ref } from 'vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useImageRoiStore } from '@/components/damImage/uploadQueue/composables/imageRoiStore'\nimport { updateRoi } from '@/components/damImage/uploadQueue/api/damImageRoiApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { cropToRegion, regionToCrop } from '@/components/damImage/uploadQueue/composables/cropperJsService'\nimport ACropperjs from '@/components/ACropperjs.vue'\n\nconst { showRecordWas, showErrorsDefault } = useAlerts()\n\nconst DAM_IMAGE_ASPECT_RATIO = 16 / 9\nconst cropperContainerStyle = { overflow: 'hidden', maxHeight: 'calc(100vh - 160px)' }\n\nconst imageRoiStore = useImageRoiStore()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst cropper = ref<any>(null) // fix any\n\nconst imageUrl = computed(() => {\n if (imageRoiStore.imageFile && imageRoiStore.imageFile.links?.image_detail) {\n return imageRoiStore.imageFile.links.image_detail.url\n }\n return ''\n})\n\nconst enableCropper = () => {\n if (cropper.value) {\n cropper.value.enable()\n }\n}\n\nconst disableCropper = () => {\n if (cropper.value) {\n cropper.value.disable()\n }\n}\n\nconst applyRegionOfInterest = () => {\n if (cropper.value && imageRoiStore.roi && imageRoiStore.imageFile) {\n enableCropper()\n const data = regionToCrop(\n cropper.value,\n imageRoiStore.roi,\n imageRoiStore.imageFile.imageAttributes.width,\n imageRoiStore.imageFile.imageAttributes.height\n )\n cropper.value.setData(data)\n disableCropper()\n }\n}\n\nconst saveRoi = async () => {\n if (cropper.value && imageRoiStore.roi && imageRoiStore.imageFile) {\n const roi = cropToRegion(\n cropper.value,\n imageRoiStore.roi,\n imageRoiStore.imageFile.imageAttributes.width,\n imageRoiStore.imageFile.imageAttributes.height\n )\n try {\n imageRoiStore.showLoader()\n await updateRoi(damClient, roi.id, roi)\n showRecordWas('updated')\n setTimeout(() => {\n imageRoiStore.forceReloadRoiPreviews()\n }, 2000)\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n imageRoiStore.hideLoader()\n }\n }\n}\n\nconst cropperReady = () => {\n applyRegionOfInterest()\n enableCropper()\n}\n\nconst cropperEnd = () => {\n saveRoi()\n}\n\nconst showCropper = computed(() => {\n if (imageRoiStore.imageFile && imageUrl.value.length > 0 && !imageRoiStore.loader) {\n return true\n }\n return false\n})\n\nonUnmounted(() => {\n if (cropper.value) {\n cropper.value.destroy()\n cropper.value = null\n }\n})\n</script>\n\n<template>\n <ACropperjs\n v-if=\"showCropper\"\n :key=\"imageRoiStore.timestampCropper\"\n ref=\"cropper\"\n :aspect-ratio=\"DAM_IMAGE_ASPECT_RATIO\"\n :background=\"false\"\n :check-cross-origin=\"false\"\n :container-style=\"cropperContainerStyle\"\n :ready=\"cropperReady\"\n :cropend=\"cropperEnd\"\n :src=\"imageUrl\"\n :view-mode=\"1\"\n :zoom-on-wheel=\"false\"\n responsive\n />\n</template>\n\n<style lang=\"scss\">\n.cropper-modal {\n background-color: #f1f4f6;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useI18n } from 'vue-i18n'\nimport { useTheme } from '@/composables/themeSettings'\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport AssetDetailDialogLoader from '@/components/damImage/uploadQueue/components/AssetDetailDialogLoader.vue'\nimport AssetImage from '@/components/damImage/uploadQueue/components/AssetImage.vue'\nimport AssetDetailDialogSidebar from '@/components/damImage/uploadQueue/components/AssetDetailDialogSidebar.vue'\nimport { assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport AssetImageRoiSelect from '@/components/damImage/uploadQueue/components/AssetImageRoiSelect.vue'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nwithDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n\nconst { toolbarColor } = useTheme()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, dialog, activeTab, loading } = storeToRefs(assetDetailStore)\n\nconst closeDialog = () => {\n assetDetailStore.setAsset(null)\n dialog.value = null\n}\n\nconst sidebar = ref(true)\n\nconst toggleSidebar = () => {\n sidebar.value = !sidebar.value\n}\n\nconst onImageLoad = () => {\n // imageLoading.value = false\n}\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetType.Default\n})\n\nconst assetStatus = computed(() => {\n if (!asset.value) return DamAssetStatus.Default\n return asset.value.attributes.assetStatus\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\nconst isTypeVideo = computed(() => {\n return assetType.value === DamAssetType.Video\n})\nconst isTypeAudio = computed(() => {\n return assetType.value === DamAssetType.Audio\n})\nconst isTypeDocument = computed(() => {\n return assetType.value === DamAssetType.Document\n})\n\nconst imageProperties = computed(() => {\n if (asset.value?.mainFile && asset.value.mainFile.links && asset.value.mainFile.links.image_detail) {\n return {\n url: asset.value.mainFile.links.image_detail.url,\n width: asset.value.mainFile.links.image_detail.width,\n height: asset.value.mainFile.links.image_detail.height,\n bgColor:\n assetFileIsImageFile(asset.value.mainFile) &&\n asset.value.mainFile.imageAttributes &&\n asset.value.mainFile.imageAttributes.mostDominantColor\n ? asset.value.mainFile.imageAttributes.mostDominantColor\n : '#ccc',\n }\n }\n return {\n url: '',\n width: 356,\n height: 200,\n bgColor: '#ccc',\n }\n})\nconst toolbarTitle = computed(() => {\n if (!asset.value) return ''\n return asset.value.texts.displayTitle\n})\n\nconst assetMainFile = computed(() => {\n return asset.value?.mainFile || undefined\n})\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n fullscreen\n >\n <AssetDetailDialogLoader\n v-if=\"loading\"\n @close-dialog=\"closeDialog\"\n />\n <VCard\n v-else-if=\"asset\"\n class=\"dam-image-detail\"\n :class=\"{ 'dam-image-detail--sidebar-active': sidebar }\"\n >\n <div class=\"dam-image-detail__wrapper d-flex flex-column\">\n <VToolbar\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n class=\"system-border-b pr-1\"\n >\n <div class=\"text-subtitle-2 d-flex px-2\">\n <div>DAM: {{ toolbarTitle }}</div>\n </div>\n <VSpacer />\n <div>\n <VBtn\n :active=\"sidebar\"\n :variant=\"sidebar ? 'flat' : 'text'\"\n :color=\"sidebar ? 'secondary' : ''\"\n icon\n class=\"mr-1\"\n :width=\"36\"\n :height=\"36\"\n @click.stop=\"toggleSidebar\"\n >\n <VIcon icon=\"mdi-information-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.detail.toggleInfo') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n variant=\"text\"\n :width=\"36\"\n :height=\"36\"\n class=\"mr-1\"\n @click.stop=\"closeDialog\"\n >\n <VIcon icon=\"mdi-close\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.close') }}\n </VTooltip>\n </VBtn>\n </div>\n </VToolbar>\n <div class=\"d-flex w-100 h-100 position-relative\">\n <div class=\"d-flex w-100 align-center dam-image-detail__left\">\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.ROI\"\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <AssetImageRoiSelect />\n </div>\n <div\n v-else\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"imageProperties.url\"\n :background-color=\"imageProperties.bgColor\"\n :width=\"imageProperties.width\"\n :height=\"imageProperties.height\"\n use-component\n @load=\"onImageLoad\"\n @error=\"onImageLoad\"\n />\n </div>\n </div>\n <div class=\"h-100 d-flex dam-image-detail__sidebar system-border-l\">\n <AssetDetailDialogSidebar\n v-if=\"asset\"\n :key=\"asset.id\"\n :queue-key=\"queueKey\"\n :asset-id=\"asset.id\"\n :is-video=\"isTypeVideo\"\n :is-audio=\"isTypeAudio\"\n :is-image=\"isTypeImage\"\n :is-document=\"isTypeDocument\"\n :asset-status=\"assetStatus\"\n :asset-type=\"assetType\"\n :asset-main-file-status=\"assetMainFile ? assetMainFile.fileAttributes.status : undefined\"\n :asset-main-file-fail-reason=\"assetMainFile ? assetMainFile.fileAttributes.failReason : undefined\"\n />\n </div>\n </div>\n </div>\n </VCard>\n </VDialog>\n</template>\n","import { ref } from 'vue'\n\nconst uploadQueueDialog = ref(false)\nconst uploadQueueSidebar = ref(false)\n\nexport function useUploadQueueDialog () {\n const toggleUploadQueueSidebar = () => {\n uploadQueueSidebar.value = !uploadQueueSidebar.value\n }\n\n return {\n toggleUploadQueueSidebar,\n uploadQueueDialog,\n uploadQueueSidebar,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed, ref } from 'vue'\nimport { DamAssetType } from '@/types/coreDam/Asset'\nimport { type AssetFile, assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetCustomMetadataForm from '@/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue'\nimport ACopyText from '@/components/ACopyText.vue'\nimport { prettyBytes } from '@/utils/file'\nimport AssetMetadataImageAttributes from '@/components/damImage/uploadQueue/components/AssetMetadataImageAttributes.vue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueItem } from '@/types/coreDam/UploadQueue'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { dateTimePretty } from '@/utils/datetime'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n\nconst panels = ref(['metadata', 'file'])\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, authorConflicts, metadataAreTouched } = storeToRefs(assetDetailStore)\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst item = computed<UploadQueueItem | null>(() => {\n return items.value[0] ?? null\n})\n\nconst assetType = computed(() => {\n return DamAssetType.Image\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\n\nconst assetMainFile = computed<null | AssetFile>(() => {\n return asset.value && asset.value.mainFile ? (asset.value.mainFile as AssetFile) : null\n})\n\nconst { damConfigExtSystem } = useDamConfigState()\n\nconst onAnyMetadataChange = () => {\n metadataAreTouched.value = true\n}\n</script>\n\n<template>\n <VExpansionPanels\n v-if=\"item\"\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.metadata')\"\n value=\"metadata\"\n >\n <VExpansionPanelText>\n <VForm :disabled=\"!item.canEditMetadata\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n v-model=\"item.customData\"\n :asset-type=\"assetType\"\n @any-change=\"onAnyMetadataChange\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"damConfigExtSystem[assetType].keywords.enabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"item.keywords\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n data-cy=\"custom-field-keywords\"\n clearable\n multiple\n :disabled=\"!item.canEditMetadata\"\n :required=\"damConfigExtSystem[assetType].keywords.required\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"damConfigExtSystem[assetType].authors.enabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"item.authors\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n clearable\n multiple\n :disabled=\"!item.canEditMetadata\"\n :required=\"damConfigExtSystem[assetType].authors.required\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"asset\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.file')\"\n value=\"file\"\n >\n <VExpansionPanelText class=\"text-caption\">\n <!-- all types -->\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.id') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"asset.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.type') }}\n </VCol>\n <VCol cols=\"9\">\n {{ asset.attributes.assetType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.created') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.createdAt) }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.modified') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.modifiedAt) }}\n </VCol>\n </VRow>\n <div v-if=\"assetMainFile\">\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mainFileId') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"assetMainFile.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mimeType') }}\n </VCol>\n <VCol cols=\"9\">\n {{ assetMainFile.fileAttributes.mimeType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.size') }}\n </VCol>\n <VCol cols=\"9\">\n {{ prettyBytes(assetMainFile.fileAttributes.size) }}\n </VCol>\n </VRow>\n <AssetMetadataImageAttributes\n v-if=\"isTypeImage && assetFileIsImageFile(assetMainFile)\"\n :file=\"assetMainFile\"\n />\n </div>\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n</template>\n","<script lang=\"ts\" setup>\nimport AssetDetailSidebarActionsWrapper from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue'\nimport { useI18n } from 'vue-i18n'\nimport useVuelidate from '@vuelidate/core'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport UploadQueueDialogSingleSidebarMetadataContent from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { useAlerts } from '@/composables/system/alerts'\n\nwithDefaults(\n defineProps<{\n queueKey: string\n isActive: boolean\n dataCy?: string\n assetType: DamAssetType\n }>(),\n {\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSave'): void\n (e: 'onSaveAndApply'): void\n}>()\n\nconst { t } = useI18n()\n\nconst v$ = useVuelidate({}, {}, { $scope: ADamAssetMetadataValidationScopeSymbol })\n\nconst { showValidationError } = useAlerts()\n\nconst onSave = async () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n emit('onSave')\n}\n\nconst onSaveAndApply = async () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n emit('onSaveAndApply')\n}\n</script>\n\n<template>\n <AssetDetailSidebarActionsWrapper\n v-if=\"isActive\"\n :queue-key=\"queueKey\"\n >\n <ABtnSecondary\n type=\"submit\"\n class=\"ml-2\"\n data-cy=\"button-save\"\n @click.stop=\"onSave\"\n >\n {{ t('common.button.save') }}\n </ABtnSecondary>\n <ABtnPrimary\n type=\"submit\"\n class=\"mx-2\"\n data-cy=\"button-save-and-apply\"\n @click.stop=\"onSaveAndApply\"\n >\n {{ t('common.damImage.upload.saveAndApply') }}\n </ABtnPrimary>\n </AssetDetailSidebarActionsWrapper>\n <UploadQueueDialogSingleSidebarMetadataContent :queue-key=\"queueKey\" />\n</template>\n","<script setup lang=\"ts\">\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport type { DocId } from '@/types/common'\nimport type { DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport type { AssetFileFailReason, AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport { useI18n } from 'vue-i18n'\nimport AssetDetailSidebarROI from '@/components/damImage/uploadQueue/components/AssetDetailSidebarROI.vue'\nimport AssetDetailSidebarActionsTeleportTarget from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsTeleportTarget.vue'\nimport UploadQueueDialogSingleSidebarMetadata from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue'\n\nwithDefaults(\n defineProps<{\n queueKey: string\n assetId: DocId\n isVideo: boolean\n isAudio: boolean\n isImage: boolean\n isDocument: boolean\n enableRoiTab: boolean\n showFileInfo: boolean\n dataCy?: string\n assetStatus: DamAssetStatus\n assetType: DamAssetType\n assetMainFileStatus?: AssetFileProcessStatus | undefined\n assetMainFileFailReason?: AssetFileFailReason | undefined\n }>(),\n {\n assetMainFileStatus: undefined,\n assetMainFileFailReason: undefined,\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSave'): void\n (e: 'onSaveAndApply'): void\n}>()\n\nconst { t } = useI18n()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { activeTab } = storeToRefs(assetDetailStore)\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs\n v-model=\"activeTab\"\n show-arrows\n class=\"sidebar-info__tabs\"\n >\n <VTab\n :value=\"AssetDetailTabImageWithRoi.Info\"\n data-cy=\"button-meta\"\n >\n {{ t('common.damImage.asset.detail.tabs.info') }}\n </VTab>\n <VTab\n v-if=\"isImage && enableRoiTab\"\n :value=\"AssetDetailTabImageWithRoi.ROI\"\n data-cy=\"button-focus\"\n >\n {{ t('common.damImage.asset.detail.tabs.roi') }}\n </VTab>\n </VTabs>\n\n <div class=\"sidebar-info__content\">\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n class=\"py-2\"\n >\n <UploadQueueDialogSingleSidebarMetadata\n :queue-key=\"queueKey\"\n :is-active=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n :asset-type=\"assetType\"\n @on-save=\"emit('onSave')\"\n @on-save-and-apply=\"emit('onSaveAndApply')\"\n />\n </div>\n <div\n v-if=\"isImage && activeTab === AssetDetailTabImageWithRoi.ROI\"\n class=\"py-2\"\n >\n <AssetDetailSidebarROI\n :queue-key=\"queueKey\"\n :is-active=\"activeTab === AssetDetailTabImageWithRoi.ROI\"\n />\n </div>\n </div>\n <div class=\"sidebar-info__actions px-2\">\n <AssetDetailSidebarActionsTeleportTarget :queue-key=\"queueKey\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { eventClickBlur } from '@/utils/event'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\n\nconst props = withDefaults(\n defineProps<{\n isUploading: boolean\n dialogMaxWidth?: number\n buttonSize?: number\n dataCy?: string\n }>(),\n {\n dialogMaxWidth: 300,\n buttonSize: 26,\n dataCy: 'button-stop',\n }\n)\nconst emit = defineEmits<{\n (e: 'confirm'): void\n}>()\n\nconst dialog = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n if (!props.isUploading) {\n emit('confirm')\n return\n }\n dialog.value = true\n}\nconst onConfirm = () => {\n emit('confirm')\n dialog.value = false\n}\n\nconst onCancel = () => {\n dialog.value = false\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n variant=\"flat\"\n :data-cy=\"dataCy\"\n icon\n :width=\"buttonSize\"\n :height=\"buttonSize\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-close\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.stop') }}\n </VTooltip>\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n :width=\"500\"\n >\n <VCard\n v-if=\"dialog\"\n data-cy=\"delete-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t('common.damImage.upload.stopConfirmQuestion') }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n {{ t('common.damImage.upload.stop') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useI18n } from 'vue-i18n'\nimport { useTheme } from '@/composables/themeSettings'\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { type AssetDetailItemDto, DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport AssetDetailDialogLoader from '@/components/damImage/uploadQueue/components/AssetDetailDialogLoader.vue'\nimport AssetImage from '@/components/damImage/uploadQueue/components/AssetImage.vue'\nimport { AssetFileFailReason, assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport AssetImageRoiSelect from '@/components/damImage/uploadQueue/components/AssetImageRoiSelect.vue'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport { type UploadQueueItem, UploadQueueItemStatus } from '@/types/coreDam/UploadQueue'\nimport { dateTimeNow } from '@/utils/datetime'\nimport AssetFileFailReasonChip from '@/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { bulkUpdateAssetsMetadata, fetchAsset } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport UploadQueueDialogSingleSidebar from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebar.vue'\nimport UploadQueueButtonStop from '@/components/damImage/uploadQueue/components/UploadQueueButtonStop.vue'\nimport { isNull, isString } from '@/utils/common'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n fileInputKey: number\n accept: string | undefined\n maxSizes: Record<string, number> | undefined\n disableDoneAnimation?: boolean\n }>(),\n {\n disableDoneAnimation: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'onApply', items: ImageCreateUpdateAware[]): void\n}>()\n\nconst { showErrorsDefault, showRecordWas } = useAlerts()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst { t } = useI18n()\n\nconst { toolbarColor } = useTheme()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { activeTab, loading, asset: assetDetail } = storeToRefs(assetDetailStore)\nconst enableRoiTab = ref(false)\n\nconst uploadQueuesStore = useUploadQueuesStore()\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst item = computed<UploadQueueItem | null>(() => {\n return items.value[0] ?? null\n})\n\nconst asset = computed<AssetDetailItemDto | null>(() => {\n if (!item.value || !item.value.assetId) return null\n if (isDone.value && assetDetail.value) return assetDetail.value\n return {\n id: item.value.assetId,\n texts: {\n displayTitle: '',\n },\n attributes: {\n assetType: item.value.assetType,\n assetStatus: item.value.assetStatus,\n },\n flags: {\n described: false,\n visible: false,\n },\n licence: item.value.licenceId,\n mainFile: null,\n keywords: [],\n authors: [],\n podcasts: [],\n metadata: {\n authorSuggestions: {},\n keywordSuggestions: {},\n customData: {},\n },\n distributionCategory: null,\n assetFileProperties: {\n distributesInServices: [],\n slotNames: [],\n fromRss: false,\n width: 0,\n height: 0,\n },\n _resourceName: 'asset',\n _system: 'coreDam',\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: null,\n modifiedBy: null,\n }\n})\n\nconst sidebar = ref(true)\n\nconst toggleSidebar = () => {\n sidebar.value = !sidebar.value\n}\n\nconst onImageLoad = () => {\n // imageLoading.value = false\n}\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetType.Default\n})\n\nconst assetStatus = computed(() => {\n if (!asset.value) return DamAssetStatus.Default\n return asset.value.attributes.assetStatus\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\nconst isTypeVideo = computed(() => {\n return assetType.value === DamAssetType.Video\n})\nconst isTypeAudio = computed(() => {\n return assetType.value === DamAssetType.Audio\n})\nconst isTypeDocument = computed(() => {\n return assetType.value === DamAssetType.Document\n})\n\nconst imageProperties = computed(() => {\n if (item.value?.imagePreview) {\n return {\n url: item.value.imagePreview.url,\n width: item.value.imagePreview.requestedWidth || undefined,\n height: item.value.imagePreview.requestedHeight || undefined,\n bgColor:\n assetFileIsImageFile(asset.value?.mainFile) &&\n asset.value?.mainFile.imageAttributes &&\n asset.value?.mainFile.imageAttributes.mostDominantColor\n ? asset.value.mainFile.imageAttributes.mostDominantColor\n : '#ccc',\n }\n }\n return {\n url: '',\n width: 356,\n height: 200,\n bgColor: '#ccc',\n }\n})\n\nconst assetMainFile = computed(() => {\n return asset.value?.mainFile || undefined\n})\n\nconst processing = computed(() => {\n return (\n !isNull(item.value) && [UploadQueueItemStatus.Processing, UploadQueueItemStatus.Loading].includes(item.value.status)\n )\n})\nconst waiting = computed(() => {\n return !isNull(item.value) && item.value.status === UploadQueueItemStatus.Waiting\n})\nconst isDone = computed(() => {\n return !isNull(item.value) && item.value.status === UploadQueueItemStatus.Uploaded\n})\nconst showDone = computed(() => {\n return !props.disableDoneAnimation && isDone.value\n})\nconst uploading = computed(() => {\n return !isNull(item.value) && item.value.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return item.value?.progress.progressPercent\n})\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onStopConfirm = async () => {\n uploadQueuesStore.stopUpload(props.queueKey)\n assetDetailStore.setAsset(null)\n uploadQueueDialog.value = false\n}\n\nconst queueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst queueProcessedCount = computed(() => {\n return uploadQueuesStore.getQueueProcessedCount(props.queueKey)\n})\n\nconst isUploading = computed(() => {\n return queueTotalCount.value > queueProcessedCount.value\n})\n\nconst onSave = async () => {\n if (items.value.length === 0) return\n // saveAndCloseButtonLoading.value = true\n // v$.value.$touch()\n // if (v$.value.$invalid) {\n // showValidationError()\n // saveAndCloseButtonLoading.value = false\n // return\n // }\n try {\n await bulkUpdateAssetsMetadata(damClient, items.value)\n showRecordWas('updated')\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n // saveAndCloseButtonLoading.value = false\n }\n}\n\nconst onSaveAndApply = async () => {\n if (items.value.length === 0) return\n // saveAndCloseButtonLoading.value = true\n // v$.value.$touch()\n // if (v$.value.$invalid) {\n // showValidationError()\n // saveAndCloseButtonLoading.value = false\n // return\n // }\n let description = ''\n let source = ''\n try {\n const assetsMetadataRes = await bulkUpdateAssetsMetadata(damClient, items.value)\n if (!assetsMetadataRes[0]) {\n throw new Error('Fatal error updating asset metadata')\n }\n showRecordWas('updated')\n if (isString(assetsMetadataRes[0].customData?.description)) {\n description = assetsMetadataRes[0].customData.description.trim()\n }\n if (assetsMetadataRes[0].authors.length > 0) {\n const authorsRes = await fetchAuthorListByIds(damClient, props.extSystem, assetsMetadataRes[0].authors)\n source = authorsRes.map((author) => author.name).join(', ')\n }\n emit(\n 'onApply',\n items.value.map((item) => {\n return {\n texts: {\n description: description,\n source: source,\n },\n dam: {\n damId: item.fileId ?? '',\n regionPosition: 0,\n },\n position: 1,\n }\n })\n )\n\n await onStopConfirm()\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n // saveAndCloseButtonLoading.value = false\n }\n}\n\nwatch(\n isDone,\n async (newValue) => {\n if (!newValue || !item.value?.assetId) return\n try {\n const res = await fetchAsset(damClient, item.value.assetId)\n assetDetailStore.setAsset(res)\n enableRoiTab.value = true\n } catch (e) {\n showErrorsDefault(e)\n }\n },\n { immediate: true }\n)\n\nonMounted(() => {\n activeTab.value = AssetDetailTabImageWithRoi.Info\n})\n</script>\n\n<template>\n <VDialog\n :model-value=\"uploadQueueDialog\"\n fullscreen\n >\n <AssetDetailDialogLoader\n v-if=\"loading || !item\"\n @close-dialog=\"onStopConfirm\"\n />\n <VCard\n v-else-if=\"item\"\n class=\"dam-image-detail\"\n :class=\"{ 'dam-image-detail--sidebar-active': sidebar }\"\n >\n <div class=\"dam-image-detail__wrapper d-flex flex-column\">\n <VToolbar\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n class=\"system-border-b pr-1\"\n >\n <div class=\"text-subtitle-2 d-flex px-2\">\n <div\n v-if=\"isUploading\"\n class=\"text-subtitle-2\"\n >\n {{ t('common.damImage.upload.title') }}\n </div>\n <div\n v-else\n class=\"text-subtitle-2 text-green-darken-3 font-weight-bold\"\n >\n {{ t('common.damImage.upload.titleDone') }}\n </div>\n </div>\n <VSpacer />\n <div>\n <VBtn\n :active=\"sidebar\"\n :variant=\"sidebar ? 'flat' : 'text'\"\n :color=\"sidebar ? 'secondary' : ''\"\n icon\n class=\"mr-1\"\n :width=\"36\"\n :height=\"36\"\n @click.stop=\"toggleSidebar\"\n >\n <VIcon icon=\"mdi-information-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.detail.toggleInfo') }}\n </VTooltip>\n </VBtn>\n <UploadQueueButtonStop\n data-cy=\"button-close\"\n :button-size=\"36\"\n :is-uploading=\"isUploading\"\n @confirm=\"onStopConfirm\"\n />\n </div>\n </VToolbar>\n <div class=\"d-flex w-100 h-100 position-relative\">\n <div class=\"d-flex w-100 align-center dam-image-detail__left\">\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.ROI && enableRoiTab\"\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <AssetImageRoiSelect />\n </div>\n <div\n v-else\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <div class=\"position-relative\">\n <AssetImage\n v-if=\"item\"\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"imageProperties.url\"\n :background-color=\"imageProperties.bgColor\"\n :width=\"imageProperties.width\"\n :height=\"imageProperties.height\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"showDone\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n @load=\"onImageLoad\"\n @error=\"onImageLoad\"\n />\n <div\n v-if=\"item && item.error.hasError\"\n :class=\"\n 'dam-upload-queue__overlay dam-upload-queue__overlay--error ' +\n 'd-flex align-center justify-center flex-column'\n \"\n >\n <VIcon\n icon=\"mdi-alert\"\n class=\"ma-1\"\n size=\"x-small\"\n color=\"error\"\n />\n <div class=\"text-error\">\n {{ t('common.damImage.queueItem.error') }}\n </div>\n <div\n v-if=\"item && item.error.message.length\"\n class=\"text-caption\"\n v-text=\"item.error.message\"\n />\n <div v-else-if=\"item.error.assetFileFailReason !== AssetFileFailReason.None\">\n <AssetFileFailReasonChip :reason=\"item.error.assetFileFailReason\" />\n </div>\n <div\n v-else\n class=\"text-caption\"\n >\n {{ t('common.damImage.uploadErrors.unknownError') }}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"h-100 d-flex dam-image-detail__sidebar system-border-l\">\n <UploadQueueDialogSingleSidebar\n v-if=\"asset\"\n :key=\"asset.id\"\n :queue-key=\"queueKey\"\n :enable-roi-tab=\"enableRoiTab\"\n :show-file-info=\"enableRoiTab\"\n :asset-id=\"asset.id\"\n :is-video=\"isTypeVideo\"\n :is-audio=\"isTypeAudio\"\n :is-image=\"isTypeImage\"\n :is-document=\"isTypeDocument\"\n :asset-status=\"assetStatus\"\n :asset-type=\"assetType\"\n :asset-main-file-status=\"assetMainFile ? assetMainFile.fileAttributes.status : undefined\"\n :asset-main-file-fail-reason=\"assetMainFile ? assetMainFile.fileAttributes.failReason : undefined\"\n @on-save=\"onSave\"\n @on-save-and-apply=\"onSaveAndApply\"\n />\n </div>\n </div>\n </div>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport AImageDropzone from '@/components/file/AFileDropzone.vue'\nimport type { DocId, IntegerId, IntegerIdNullable } from '@/types/common'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport imagePlaceholderPath from '@/assets/image/placeholder16x9.jpg'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useImageActions } from '@/components/damImage/composables/imageActions'\nimport { cloneDeep, isNull, isString, isUndefined } from '@/utils/common'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { DamAssetType } from '@/types/coreDam/Asset'\nimport { useDamAcceptTypeAndSizeHelper } from '@/components/damImage/uploadQueue/composables/acceptTypeAndSizeHelper'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport AFileInput from '@/components/file/AFileInput.vue'\nimport AAssetSelect from '@/components/dam/assetSelect/AAssetSelect.vue'\nimport type { AssetSelectReturnData } from '@/types/coreDam/AssetSelect'\nimport { ImageWidgetExtSystemConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\nimport { createImage, deleteImage, fetchImage, updateImage } from '@/components/damImage/uploadQueue/api/imageApi'\nimport ImageDetailDialogMetadata from '@/components/damImage/uploadQueue/components/ImageDetailDialogMetadata.vue'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport { computed, inject, ref, type ShallowRef, toRaw, watch } from 'vue'\nimport AssetDetailDialog from '@/components/damImage/uploadQueue/components/AssetDetailDialog.vue'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport { fetchAsset, fetchAssetByFileId } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport UploadQueueDialogSingle from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingle.vue'\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useI18n } from 'vue-i18n'\nimport type { VBtn } from 'vuetify/components'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerIdNullable\n queueKey: UploadQueueKey\n licenceId: IntegerId\n extSystem: IntegerId\n image?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n label?: string | undefined\n readonly?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n disableOnClickMenu?: boolean\n width?: number | undefined\n callDeleteApiOnRemove?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n disableOnClickMenu: false,\n width: undefined,\n callDeleteApiOnRemove: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerIdNullable): void\n}>()\n\nconst imageWidgetExtSystemConfig = inject<ShallowRef<DamExtSystemConfig> | undefined>(\n ImageWidgetExtSystemConfig,\n undefined\n)\n\nif (isUndefined(imageWidgetExtSystemConfig)) {\n throw new Error(\"Fatal error, parent component doesn't provide necessary config ext system config.\")\n}\n\nconst { t } = useI18n()\n\nconst { showErrorsDefault } = useAlerts()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\nconst { widgetImageToDamImageUrl } = useImageActions(imageOptions)\nconst uploadQueuesStore = useUploadQueuesStore()\nconst imageStore = useImageStore()\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst resImage = ref<null | ImageAware>(null)\nconst clickMenuOpened = ref(false)\nconst assetSelectDialog = ref(false)\nconst metadataDialog = ref(false)\nconst metadataDialogSaving = ref(false)\nconst metadataDialogLoading = ref(false)\n\nconst withoutImage = computed(() => {\n return isNull(props.modelValue)\n})\n\n// const { image, modelValue } = toRefs(props)\n\nconst resolvedSrc = ref('')\n\nconst uploadQueue = computed(() => {\n return uploadQueuesStore.getQueue(props.queueKey)\n})\n\nconst enabledInteractionComputed = computed(() => {\n return true\n})\n\nconst imageLoaded = computed(() => {\n return !isNull(resImage.value)\n})\n\nconst actionEditMeta = () => {\n imageStore.setImageDetail(toRaw(resImage.value))\n metadataDialog.value = true\n}\n\nconst actionLibrary = () => {\n assetSelectDialog.value = true\n}\n\nconst onDrop = (files: File[]) => {\n uploadQueuesStore.addByFiles(props.queueKey, props.licenceId, files)\n uploadQueueDialog.value = true\n}\nconst onFileInput = (files: File[]) => {\n uploadQueuesStore.addByFiles(props.queueKey, props.licenceId, files)\n uploadQueueDialog.value = true\n}\n\nconst { uploadSizes, uploadAccept } = useDamAcceptTypeAndSizeHelper(\n DamAssetType.Image,\n imageWidgetExtSystemConfig.value\n)\n\nconst reload = async (newImage: ImageAware | undefined, newImageId: IntegerIdNullable, force = false) => {\n resolvedSrc.value = imagePlaceholderPath\n if ((newImage && isNull(resImage.value)) || (newImage && force)) {\n resImage.value = cloneDeep(newImage)\n if (resImage.value) {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImage.value))\n }\n return\n }\n if (newImageId) {\n try {\n resImage.value = await fetchImage(imageClient, newImageId)\n } catch (error) {\n showErrorsDefault(error)\n }\n if (!isNull(resImage.value)) {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImage.value))\n }\n return\n }\n}\n\nconst reset = () => {\n resolvedSrc.value = imagePlaceholderPath\n resImage.value = null\n emit('update:modelValue', null)\n}\n\nwatch(\n [() => props.image, () => props.modelValue],\n async ([newImage, newImageId]) => {\n await reload(newImage, newImageId)\n },\n { immediate: true }\n)\n\nconst onAssetSelectConfirm = async (data: AssetSelectReturnData) => {\n metadataDialogLoading.value = true\n imageStore.setImageDetail(null)\n metadataDialog.value = true\n let description = ''\n let source = ''\n if (data.type === 'asset') {\n if (!data.value[0] || !data.value[0].mainFile) return\n try {\n const assetRes = await fetchAsset(damClient, data.value[0].id)\n if (isString(assetRes.metadata.customData?.description)) {\n description = assetRes.metadata.customData.description.trim()\n }\n if (assetRes.authors.length > 0) {\n const authorsRes = await fetchAuthorListByIds(damClient, props.extSystem, assetRes.authors)\n source = authorsRes.map((author) => author.name).join(', ')\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n const image: ImageCreateUpdateAware = {\n texts: {\n description: description,\n source: source,\n },\n dam: {\n damId: data.value[0].mainFile.id,\n regionPosition: 0,\n },\n position: 1,\n }\n if (!isNull(props.modelValue)) {\n image.id = props.modelValue\n }\n imageStore.setImageDetail(image)\n metadataDialogLoading.value = false\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { loading: assetLoading, dialog: assetDialog } = storeToRefs(assetDetailStore)\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onEditAsset = async (assetFileId: DocId) => {\n assetLoading.value = true\n assetDialog.value = props.queueKey\n try {\n const asset = await fetchAssetByFileId(damClient, assetFileId)\n assetDetailStore.setAsset(asset)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n assetLoading.value = false\n }\n}\n\nconst onMetadataDialogClose = () => {\n imageStore.setImageDetail(null)\n metadataDialog.value = false\n}\n\nconst onMetadataDialogConfirm = async () => {\n if (isNull(imageStore.imageDetail)) return\n metadataDialogSaving.value = true\n try {\n const res = imageStore.imageDetail.id\n ? await updateImage(imageClient, imageStore.imageDetail.id, imageStore.imageDetail)\n : await createImage(imageClient, imageStore.imageDetail)\n metadataDialog.value = false\n emit('update:modelValue', res.id)\n imageStore.setImageDetail(null)\n reload(res, res.id, true)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n metadataDialogSaving.value = false\n }\n}\n\nconst onImageDelete = async () => {\n if (isNull(props.modelValue)) return\n if (props.callDeleteApiOnRemove) {\n try {\n await deleteImage(imageClient, props.modelValue)\n reset()\n } catch (e) {\n showErrorsDefault(e)\n }\n return\n }\n reset()\n}\n\nconst onAssetUploadConfirm = (items: ImageCreateUpdateAware[]) => {\n if (!items[0]) return\n\n if (!isNull(props.modelValue)) {\n items[0].id = props.modelValue\n }\n imageStore.setImageDetail(items[0])\n metadataDialog.value = true\n}\n\nconst expandedUploadButton = ref<InstanceType<typeof AFileInput> | null>(null)\n\nconst onDropzoneClick = () => {\n if (!props.expandOptions) {\n clickMenuOpened.value = true\n return\n }\n expandedUploadButton.value?.activate()\n}\n</script>\n\n<template>\n <div class=\"a-image-widget\">\n <div class=\"a-image-widget__options\">\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-subtitle-2\"\n >\n {{ label }}\n </h4>\n <div v-show=\"enabledInteractionComputed\">\n <div\n v-if=\"expandOptions\"\n class=\"d-flex flex-row\"\n >\n <VBtn\n v-if=\"imageLoaded\"\n class=\"mr-2 mb-2\"\n @click=\"actionEditMeta\"\n >\n {{ t('common.damImage.image.meta.edit') }}\n </VBtn>\n <VBtn\n class=\"mr-2 mb-2\"\n @click=\"actionLibrary\"\n >\n <span v-if=\"imageLoaded\">{{ t('common.damImage.image.button.replaceFromDam') }}</span>\n <span v-else>{{ t('common.damImage.image.button.addFromDam') }}</span>\n </VBtn>\n <AFileInput\n ref=\"expandedUploadButton\"\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn v-bind=\"fileInputProps\">\n {{ t('common.damImage.image.button.upload') }}\n </VBtn>\n </template>\n </AFileInput>\n </div>\n <VBtn\n v-else\n variant=\"text\"\n size=\"x-small\"\n icon\n >\n <VIcon icon=\"mdi-dots-horizontal\" />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.damImage.image.button.options') }}\n </VTooltip>\n <VMenu\n v-model=\"clickMenuOpened\"\n activator=\"parent\"\n location=\"bottom right\"\n eager\n >\n <VCard>\n <VList density=\"compact\">\n <VListItem\n v-if=\"imageLoaded\"\n @click=\"actionEditMeta\"\n >\n <VListItemTitle>{{ t('common.damImage.image.meta.edit') }}</VListItemTitle>\n </VListItem>\n <VListItem @click=\"actionLibrary\">\n <VListItemTitle>\n <span v-if=\"imageLoaded\">{{ t('common.damImage.image.button.replaceFromDam') }}</span>\n <span v-else>{{ t('common.damImage.image.button.addFromDam') }}</span>\n </VListItemTitle>\n </VListItem>\n <AFileInput\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VListItem @click.stop=\"fileInputProps.onClick\">\n {{ t('common.damImage.image.button.upload') }}\n </VListItem>\n </template>\n </AFileInput>\n <VListItem\n v-if=\"imageLoaded\"\n @click=\"onImageDelete\"\n >\n <VListItemTitle>{{ t('common.damImage.image.button.removeImage') }}</VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n </div>\n </div>\n <div class=\"position-relative\">\n <VImg\n :lazy-src=\"imagePlaceholderPath\"\n :src=\"resolvedSrc\"\n :width=\"width\"\n cover\n max-width=\"100%\"\n class=\"disable-radius\"\n >\n <template #placeholder>\n <div class=\"d-flex align-center justify-center h-100\">\n <VProgressCircular\n indeterminate\n color=\"grey-lighten-4\"\n />\n </div>\n </template>\n </VImg>\n <AImageDropzone\n variant=\"fill\"\n transparent\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n :hide-text=\"!withoutImage\"\n @on-click=\"onDropzoneClick\"\n @on-drop=\"onDrop\"\n />\n </div>\n </div>\n <AAssetSelect\n v-model=\"assetSelectDialog\"\n :asset-licence-id=\"licenceId\"\n :min-count=\"1\"\n :max-count=\"1\"\n :asset-type=\"DamAssetType.Image\"\n return-type=\"asset\"\n @on-confirm=\"onAssetSelectConfirm\"\n />\n <ImageDetailDialogMetadata\n v-model=\"metadataDialog\"\n :saving=\"metadataDialogSaving\"\n :loading=\"metadataDialogLoading\"\n @edit-asset=\"onEditAsset\"\n @on-confirm=\"onMetadataDialogConfirm\"\n @on-close=\"onMetadataDialogClose\"\n />\n <AssetDetailDialog\n v-if=\"assetDialog === queueKey\"\n :queue-key=\"queueKey\"\n />\n <UploadQueueDialogSingle\n v-if=\"uploadQueueDialog\"\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :file-input-key=\"uploadQueue?.fileInputKey ?? -1\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @on-apply=\"onAssetUploadConfirm\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { IntegerId, IntegerIdNullable } from '@/types/common'\nimport { onMounted, provide, ref } from 'vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { ImageAware } from '@/types/ImageAware'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport ImageWidgetInner from '@/components/damImage/uploadQueue/components/ImageWidgetInner.vue'\nimport { ImageWidgetExtSystemConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerIdNullable\n queueKey: UploadQueueKey\n licenceId: IntegerId\n extSystem: IntegerId\n image?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n label?: string | undefined\n readonly?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n disableOnClickMenu?: boolean\n width?: number | undefined\n callDeleteApiOnRemove?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n disableOnClickMenu: false,\n width: undefined,\n callDeleteApiOnRemove: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerIdNullable): void\n}>()\n\nconst status = ref<'loading' | 'ready' | 'error'>('loading')\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { damClient } = useCommonAdminCoreDamOptions(props.configName)\nconst {\n initialized,\n loadDamConfigExtSystem,\n damConfigExtSystem,\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n} = useDamConfigState(damClient)\n\nonMounted(async () => {\n const promises: Promise<any>[] = []\n if (!initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n if (initialized.damConfigExtSystem !== props.extSystem) {\n promises.push(loadDamConfigExtSystem(props.extSystem))\n promises.push(loadDamConfigAssetCustomFormElements(props.extSystem))\n }\n try {\n await Promise.all(promises)\n } catch (e) {\n status.value = 'error'\n }\n if (status.value !== 'error') status.value = 'ready'\n})\n\nprovide(ImageWidgetExtSystemConfig, damConfigExtSystem)\n</script>\n\n<template>\n <ImageWidgetInner\n v-if=\"status === 'ready'\"\n v-bind=\"props\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n />\n <div\n v-else-if=\"status === 'error'\"\n class=\"text-error\"\n >\n Loading DAM config error\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n\n<style lang=\"scss\">\n$class-name-root: 'a-image-widget';\n\n.#{$class-name-root} {\n &__options {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport AImageWidgetSimple from '@/components/damImage/AImageWidgetSimple.vue'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport { computed } from 'vue'\nimport AFormTextarea from '@/components/form/AFormTextarea.vue'\nimport type { DocId } from '@/types/common'\nimport { isNull, isUndefined } from '@/utils/common'\nimport AActionDeleteButton from '@/components/buttons/action/AActionDeleteButton.vue'\nimport { HANDLE_CLASS } from '@/components/sortable/sortableActions'\nimport { useI18n } from 'vue-i18n'\nimport {\n AImageMetadataValidationScopeSymbol,\n useImageValidation,\n} from '@/components/damImage/uploadQueue/composables/uploadValidations'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n disableDraggable: boolean\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'editAsset', data: DocId): void\n (e: 'removeItem', index: number): void\n}>()\n\nconst imageStore = useImageStore()\nconst { t } = useI18n()\n\nconst image = computed(() => imageStore.images[props.index])\n\nconst { v$ } = useImageValidation(image, AImageMetadataValidationScopeSymbol)\n\nconst onEditAsset = () => {\n if (isNull(image.value) || isUndefined(image.value)) return\n emit('editAsset', image.value.dam.damId)\n}\n\nconst removeItem = () => {\n emit('removeItem', props.index)\n}\n</script>\n\n<template>\n <div class=\"asset-list-tiles__item\">\n <div class=\"asset-list-tiles__item-card\">\n <div class=\"ma-2\">\n <div class=\"d-flex justify-md-space-between align-center\">\n <VIcon\n :class=\"{\n [HANDLE_CLASS]: true,\n [HANDLE_CLASS + '--disabled']: disableDraggable,\n }\"\n icon=\"mdi-drag\"\n />\n </div>\n <AImageWidgetSimple\n :model-value=\"image.id\"\n :image=\"image\"\n />\n <VRow dense>\n <VCol class=\"d-flex justify-space-between mt-1\">\n <VBtn\n variant=\"text\"\n size=\"small\"\n class=\"mb-2\"\n @click.stop=\"onEditAsset\"\n >\n {{ t('common.damImage.queueItem.edit') }}\n </VBtn>\n <AActionDeleteButton\n variant=\"icon\"\n :size=\"30\"\n button-class=\"\"\n @delete-record=\"removeItem\"\n />\n </VCol>\n </VRow>\n <VRow dense>\n <VCol>\n <AFormTextarea\n v-model=\"image.texts.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n />\n </VCol>\n </VRow>\n <VRow dense>\n <VCol>\n <AFormTextarea\n v-model=\"image.texts.source\"\n :label=\"t('common.damImage.image.model.texts.source')\"\n :v=\"v$.image.texts.source\"\n />\n </VCol>\n </VRow>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.asset-list-tiles--thumbnail.a-sortable-widget__group .asset-list-tiles__item img:not(.img-svg) {\n padding: 0;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetCustomData, DamAssetStatus } from '@/types/coreDam/Asset'\nimport type { DocId } from '@/types/common'\nimport { type UploadQueueItem, UploadQueueItemStatus, type UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { AssetFileFailReason } from '@/types/coreDam/AssetFile'\nimport ATableCopyIdButton from '@/components/buttons/table/ATableCopyIdButton.vue'\nimport { prettyBytes } from '@/utils/file'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport AssetCustomMetadataForm from '@/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue'\nimport AssetImage from '@/components/damImage/uploadQueue/components/AssetImage.vue'\nimport AssetFileFailReasonChip from '@/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\nimport { isNull } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n queueKey: string\n customData: AssetCustomData\n keywords: DocId[]\n authors: DocId[]\n item: UploadQueueItem\n disableDoneAnimation?: boolean\n }>(),\n {\n disableDoneAnimation: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:customData', data: AssetCustomData): void\n (e: 'update:keywords', data: DocId[]): void\n (e: 'update:authors', data: DocId[]): void\n (e: 'cancelItem', data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }): void\n (e: 'removeItem', index: number): void\n (e: 'showDetail', data: DocId): void\n}>()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst customData = computed({\n get() {\n return props.customData\n },\n set(newValue) {\n emit('update:customData', { ...props.customData, ...newValue })\n },\n})\n\nconst keywords = computed({\n get() {\n return props.keywords\n },\n set(newValue) {\n emit('update:keywords', [...newValue])\n },\n})\n\nconst authors = computed({\n get() {\n return props.authors\n },\n set(newValue) {\n emit('update:authors', [...newValue])\n },\n})\n\nconst { t } = useI18n()\n\nconst processing = computed(() => {\n return [UploadQueueItemStatus.Processing, UploadQueueItemStatus.Loading].includes(props.item.status)\n})\nconst waiting = computed(() => {\n return props.item.status === UploadQueueItemStatus.Waiting\n})\nconst done = computed(() => {\n return !props.disableDoneAnimation && props.item.status === UploadQueueItemStatus.Uploaded\n})\nconst uploading = computed(() => {\n return props.item.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return props.item.progress.progressPercent\n})\n\nconst imageSrc = computed(() => {\n return props.item.imagePreview ? props.item.imagePreview.url : undefined\n})\nconst assetType = computed(() => {\n return props.item.assetType\n})\nconst status = computed(() => {\n if (!props.item) return DamAssetStatus.Default\n return props.item.assetStatus\n})\n\nconst { damConfigExtSystem } = useDamConfigState()\n\nconst cancelItem = () => {\n emit('cancelItem', { index: props.index, item: props.item, queueKey: props.queueKey })\n}\n\nconst showCancel = computed(() => {\n return [UploadQueueItemStatus.Loading, UploadQueueItemStatus.Waiting, UploadQueueItemStatus.Uploading].includes(\n props.item.status\n )\n})\n\nconst showDetail = async () => {\n if (isNull(props.item.assetId)) return\n emit('showDetail', props.item.assetId)\n}\n</script>\n\n<template>\n <VCol\n xxl=\"2\"\n xl=\"3\"\n md=\"4\"\n sm=\"6\"\n cols=\"12\"\n >\n <div class=\"dam-upload-queue__item\">\n <div class=\"dam-upload-queue__item-card\">\n <div class=\"position-relative\">\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"status\"\n :src=\"imageSrc\"\n background-color=\"#ccc\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"done\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n />\n <div\n v-if=\"item.error.hasError\"\n :class=\"\n 'dam-upload-queue__overlay dam-upload-queue__overlay--error ' +\n 'd-flex align-center justify-center flex-column'\n \"\n >\n <VIcon\n icon=\"mdi-alert\"\n class=\"ma-1\"\n size=\"x-small\"\n color=\"error\"\n />\n <div class=\"text-error\">\n {{ t('common.damImage.queueItem.error') }}\n </div>\n <div\n v-if=\"item.error.message.length\"\n class=\"text-caption\"\n v-text=\"item.error.message\"\n />\n <div v-else-if=\"item.error.assetFileFailReason !== AssetFileFailReason.None\">\n <AssetFileFailReasonChip :reason=\"item.error.assetFileFailReason\" />\n </div>\n <div\n v-else\n class=\"text-caption\"\n >\n {{ t('common.damImage.uploadErrors.unknownError') }}\n </div>\n </div>\n </div>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <div class=\"w-100 d-flex justify-space-between align-center\">\n <div>\n <VBtn\n size=\"small\"\n variant=\"text\"\n :disabled=\"!item.canEditMetadata\"\n @click.stop=\"showDetail\"\n >\n {{ t('common.damImage.queueItem.edit') }}\n </VBtn>\n </div>\n <div>\n <div v-if=\"item.isDuplicate\" />\n <ATableCopyIdButton\n v-if=\"item.assetId\"\n :id=\"item.assetId\"\n button-t=\"common.damImage.queueItem.copyAssetId\"\n size=\"small\"\n />\n <VBtn\n v-if=\"showCancel\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"cancelItem\"\n >\n <VIcon icon=\"mdi-close-circle-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.cancel') }}\n </VTooltip>\n </VBtn>\n <!-- <AActionDeleteButton-->\n <!-- variant=\"icon\"-->\n <!-- :disabled=\"!item.canEditMetadata && !item.isDuplicate\"-->\n <!-- button-class=\"\"-->\n <!-- @delete-record=\"remove\"-->\n <!-- />-->\n </div>\n </div>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.displayTitle\"\n dense\n class=\"my-2 mb-3 mt-0 text-caption\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.queueItem.displayTitle') }}: {{ item.displayTitle }}\n <span v-if=\"item.file?.size\"> ({{ prettyBytes(item.file.size) }})</span>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.isDuplicate\"\n class=\"text-caption text-warning\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VCol>\n </VRow>\n <VForm :disabled=\"!item.canEditMetadata\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n v-model=\"customData\"\n :asset-type=\"assetType\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"damConfigExtSystem[assetType].keywords.enabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"keywords\"\n :queue-id=\"queueKey\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n multiple\n :required=\"damConfigExtSystem[assetType].keywords.required\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n :disabled=\"!item.canEditMetadata\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"damConfigExtSystem[assetType].authors.enabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"authors\"\n :queue-id=\"queueKey\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"item.authorConflicts\"\n clearable\n multiple\n :required=\"damConfigExtSystem[assetType].authors.required\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n :disabled=\"!item.canEditMetadata\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </div>\n </div>\n </VCol>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport ACustomDataFormElement from '@/components/customDataForm/ACustomDataFormElement.vue'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetType\n modelValue: { [key: string]: any }\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'fillEmptyField', data: { assetType: DamAssetType; elementProperty: string; value: any }): void\n (e: 'replaceField', data: { assetType: DamAssetType; elementProperty: string; value: any }): void\n}>()\n\nconst { t } = useI18n()\n\nconst updateModelValue = (data: { property: string; value: any }) => {\n const updated = {} as { [key: string]: any }\n updated[data.property] = data.value\n emit('update:modelValue', { ...props.modelValue, ...updated })\n}\n\nconst fillEmptyField = (elementProperty: string, value: any) => {\n emit('fillEmptyField', { assetType: props.assetType, elementProperty, value })\n}\nconst replaceField = (elementProperty: string, value: any) => {\n emit('replaceField', { assetType: props.assetType, elementProperty, value })\n}\n\nconst { damConfigAssetCustomFormElements } = useDamConfigState()\n\nconst elements = computed(() => {\n return damConfigAssetCustomFormElements.value[props.assetType]\n})\n</script>\n\n<template>\n <div class=\"w-100\">\n <VRow\n v-for=\"element in elements\"\n :key=\"element.id\"\n dense\n class=\"mt-1\"\n >\n <VCol>\n <div v-if=\"element.attributes.readonly\" />\n <div\n v-else\n class=\"d-flex\"\n >\n <ACustomDataFormElement\n :config=\"element\"\n :model-value=\"modelValue[element.property]\"\n @update:model-value=\"updateModelValue\"\n />\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyField(element.property, modelValue[element.property])\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceField(element.property, modelValue[element.property])\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </VCol>\n </VRow>\n </div>\n</template>\n","import type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { isUndefined } from '@/utils/common'\n\nexport function useUploadQueueMassOperations(queueKey: UploadQueueKey) {\n const uploadQueuesStore = useUploadQueuesStore()\n\n const replaceEmptyCustomDataValue = (\n data: { assetType: DamAssetType; elementProperty: string; value: any },\n forceReplace = false\n ) => {\n const items = uploadQueuesStore.getQueueItems(queueKey)\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (item.assetType !== data.assetType) continue\n if (\n forceReplace ||\n isUndefined(item.customData[data.elementProperty]) ||\n item.customData[data.elementProperty] === ''\n ) {\n item.customData[data.elementProperty] = data.value\n }\n }\n }\n\n const replaceEmptyKeywords = (value: any, forceReplace = false) => {\n const items = uploadQueuesStore.getQueueItems(queueKey)\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (forceReplace || isUndefined(item.keywords) || item.keywords.length === 0) {\n item.keywords = value\n }\n }\n }\n\n const replaceEmptyAuthors = (value: any, forceReplace = false) => {\n const items = uploadQueuesStore.getQueueItems(queueKey)\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (forceReplace || isUndefined(item.authors) || item.authors.length === 0) {\n item.authors = value\n }\n }\n }\n\n return {\n replaceEmptyCustomDataValue,\n replaceEmptyKeywords,\n replaceEmptyAuthors,\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport { DamAssetType } from '@/types/coreDam/Asset'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport AssetCustomMetadataFormMassOperations from '@/components/damImage/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\nimport { useUploadQueueMassOperations } from '@/components/damImage/uploadQueue/composables/uploadQueueMassOperations'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n }>(),\n {}\n)\n\nconst massOperationsData = ref({ image: {}, video: {}, audio: {}, document: {} })\nconst massOperationsKeywords = ref([])\nconst massOperationsAuthors = ref([])\n\nconst { t } = useI18n()\n\nconst panels = ref<Array<string>>(['general'])\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { replaceEmptyCustomDataValue, replaceEmptyAuthors, replaceEmptyKeywords } = useUploadQueueMassOperations(\n props.queueKey\n)\n\nconst fillEmptyField = (data: { assetType: DamAssetType; elementProperty: string; value: any }) => {\n replaceEmptyCustomDataValue(data)\n}\nconst replaceField = (data: { assetType: DamAssetType; elementProperty: string; value: any }) => {\n replaceEmptyCustomDataValue(data, true)\n}\nconst fillEmptyKeywords = () => {\n replaceEmptyKeywords(massOperationsKeywords.value)\n}\nconst replaceKeywords = () => {\n replaceEmptyKeywords(massOperationsKeywords.value, true)\n}\nconst fillEmptyAuthors = () => {\n replaceEmptyAuthors(massOperationsAuthors.value)\n}\nconst replaceAuthors = () => {\n replaceEmptyAuthors(massOperationsAuthors.value, true)\n}\nconst fillAll = (forceReplace = false) => {\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.image)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Image,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.video)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Video,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.audio)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Audio,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.document)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Document,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n if (forceReplace) {\n replaceAuthors()\n replaceKeywords()\n return\n }\n fillEmptyAuthors()\n fillEmptyKeywords()\n}\nconst clearForm = () => {\n massOperationsData.value = { image: {}, video: {}, audio: {}, document: {} }\n massOperationsAuthors.value = []\n massOperationsKeywords.value = []\n}\n\nconst assetTypes = computed(() => {\n return uploadQueuesStore.getQueueItemsTypes(props.queueKey)\n})\n\nonMounted(() => {\n if (assetTypes.value[0]) {\n panels.value.push(assetTypes.value[0])\n }\n})\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs class=\"sidebar-info__tabs\">\n <VTab>{{ t('common.damImage.asset.massOperations.title') }}</VTab>\n </VTabs>\n <div class=\"sidebar-info__content\">\n <div class=\"text-caption pa-3\">\n {{ t('common.damImage.asset.massOperations.description') }}\n </div>\n <VExpansionPanels\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.massOperations.general')\"\n value=\"general\"\n >\n <VExpansionPanelText>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <KeywordRemoteAutocompleteWithCached\n v-model=\"massOperationsKeywords\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyKeywords\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceKeywords\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <AuthorRemoteAutocompleteWithCached\n v-model=\"massOperationsAuthors\"\n :label=\"t('common.damImage.asset.model.authors')\"\n clearable\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyAuthors\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceAuthors\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Image)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.image')\"\n :value=\"DamAssetType.Image\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.image\"\n :asset-type=\"DamAssetType.Image\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n </div>\n <div class=\"sidebar-info__actions pa-2 d-flex align-center justify-center\">\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(false)\"\n >\n {{ t('common.damImage.asset.massOperations.fillAllEmpty') }}\n </VBtn>\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(true)\"\n >\n {{ t('common.damImage.asset.massOperations.replaceAll') }}\n </VBtn>\n <VBtn\n variant=\"text\"\n size=\"small\"\n @click.stop=\"clearForm\"\n >\n {{ t('common.damImage.asset.massOperations.clearForm') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onMounted } from 'vue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueItem, UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport UploadQueueItemEditable from '@/components/damImage/uploadQueue/components/UploadQueueItemEditable.vue'\nimport AssetQueueSelectedSidebar from '@/components/damImage/uploadQueue/components/AssetQueueSelectedSidebar.vue'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport type { DocId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n massOperations: boolean\n disableDoneAnimation?: boolean\n }>(),\n {\n disableDoneAnimation: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'showDetail', data: DocId): void\n}>()\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst list = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst cancelItem = (data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }) => {\n uploadQueuesStore.stopItemUpload(data.queueKey, data.item, data.index)\n}\n\nconst removeItem = (index: number) => {\n uploadQueuesStore.removeByIndex(props.queueKey, index)\n}\n\nconst { addToCachedKeywords, fetchCachedKeywords } = useDamCachedKeywords()\nconst { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors()\n\nonMounted(() => {\n list.value.forEach((item) => {\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n })\n fetchCachedKeywords()\n fetchCachedAuthors()\n})\n</script>\n\n<template>\n <div\n class=\"asset-queue-editable\"\n :class=\"{ 'asset-queue-editable--sidebar-active': massOperations }\"\n >\n <div class=\"asset-queue-editable__left\">\n <div class=\"overflow-y-auto overflow-x-hidden h-100\">\n <VRow class=\"dam-upload-queue dam-upload-queue--editable pa-2 mb-5\">\n <UploadQueueItemEditable\n v-for=\"(item, index) in list\"\n :key=\"item.key\"\n v-model:customData=\"item.customData\"\n v-model:keywords=\"item.keywords\"\n v-model:authors=\"item.authors\"\n :item=\"item\"\n :index=\"index\"\n :queue-key=\"queueKey\"\n :disable-done-animation=\"disableDoneAnimation\"\n @cancel-item=\"cancelItem\"\n @remove-item=\"removeItem\"\n @show-detail=\"emit('showDetail', $event)\"\n />\n </VRow>\n </div>\n </div>\n <div\n v-if=\"list.length > 0\"\n class=\"asset-queue-editable__sidebar system-border-l\"\n >\n <AssetQueueSelectedSidebar :queue-key=\"queueKey\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport { useI18n } from 'vue-i18n'\nimport UploadQueueEditable from '@/components/damImage/uploadQueue/components/UploadQueueEditable.vue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport { computed, ref, toRaw } from 'vue'\nimport { useTheme } from '@/composables/themeSettings'\nimport UploadQueueButtonStop from '@/components/damImage/uploadQueue/components/UploadQueueButtonStop.vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useAlerts } from '@/composables/system/alerts'\nimport {\n type AssetMetadataBulkItem,\n bulkUpdateAssetsMetadata,\n fetchAsset,\n} from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport AFileInput from '@/components/file/AFileInput.vue'\nimport AImageDropzone from '@/components/file/AFileDropzone.vue'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { isNull, isString, isUndefined } from '@/utils/common'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport type { UploadQueueItem } from '@/types/coreDam/UploadQueue'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport { storeToRefs } from 'pinia'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n fileInputKey: number\n extSystem: IntegerId\n accept: string | undefined\n maxSizes: Record<string, number> | undefined\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'onDrop', files: File[]): void\n (e: 'onFilesInput', files: File[]): void\n (e: 'onApply', items: ImageCreateUpdateAware[]): void\n}>()\n\nconst { uploadQueueDialog, uploadQueueSidebar, toggleUploadQueueSidebar } = useUploadQueueDialog()\n\nconst imageStore = useImageStore()\nconst { maxPosition } = storeToRefs(imageStore)\nconst uploadQueuesStore = useUploadQueuesStore()\nconst queueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst queueProcessedCount = computed(() => {\n return uploadQueuesStore.getQueueProcessedCount(props.queueKey)\n})\n\nconst isUploading = computed(() => {\n return queueTotalCount.value > queueProcessedCount.value\n})\n\nconst isFinished = computed(() => {\n return queueTotalCount.value === queueProcessedCount.value\n})\n\nconst { t } = useI18n()\nconst { toolbarColor } = useTheme()\nconst v$ = useVuelidate()\nconst { showRecordWas, showValidationError, showErrorsDefault } = useAlerts()\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst saveButtonLoading = ref(false)\nconst saveAndCloseButtonLoading = ref(false)\n\nconst onStopConfirm = async () => {\n uploadQueuesStore.stopUpload(props.queueKey)\n uploadQueueDialog.value = false\n}\n\nconst onSave = async () => {\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveButtonLoading.value = false\n return\n }\n try {\n await bulkUpdateAssetsMetadata(damClient, itemsRaw)\n showRecordWas('updated')\n } catch (error) {\n console.error(error)\n showErrorsDefault(error)\n } finally {\n saveButtonLoading.value = false\n }\n}\n\nconst metadataMap = async (queueItems: UploadQueueItem[], bulkItems: AssetMetadataBulkItem[]) => {\n const assetMetadataMap = new Map<DocId, { description: string; authorIds: DocId[] }>()\n const authorIdsToFetch = new Set<DocId>()\n const authorsMap = new Map<DocId, string>()\n try {\n bulkItems.forEach((bulkItem) => {\n assetMetadataMap.set(bulkItem.id, {\n description: isString(bulkItem.customData?.description) ? bulkItem.customData.description.trim() : '',\n authorIds: bulkItem.authors,\n })\n })\n assetMetadataMap.forEach((assetMeta) => {\n assetMeta.authorIds.forEach((authorId) => {\n authorIdsToFetch.add(authorId)\n })\n })\n if (authorIdsToFetch.size > 0) {\n const authorsRes = await fetchAuthorListByIds(damClient, props.extSystem, [...authorIdsToFetch])\n authorsRes.forEach((author) => {\n authorsMap.set(author.id, author.name)\n })\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n\n const queueItemsWithAssetId = queueItems.filter(\n (queueItem) => !isNull(queueItem.assetId) && !isNull(queueItem.fileId)\n )\n\n return queueItemsWithAssetId.map((queueItem) => {\n maxPosition.value++\n const description = assetMetadataMap.get(queueItem.assetId!)?.description\n const authorNames: string[] = []\n assetMetadataMap.get(queueItem.assetId!)?.authorIds.forEach((authorId) => {\n const name = authorsMap.get(authorId)\n if (!isUndefined(name) && name.trim().length > 0) {\n authorNames.push(name)\n }\n })\n return {\n key: generateUUIDv1(),\n texts: {\n description: description ?? '',\n source: authorNames.join(', '),\n },\n dam: {\n damId: queueItem.fileId as DocId,\n regionPosition: 0,\n },\n position: maxPosition.value,\n }\n })\n}\n\nconst onSaveAndApply = async () => {\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveAndCloseButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveAndCloseButtonLoading.value = false\n return\n }\n try {\n const res = await bulkUpdateAssetsMetadata(damClient, itemsRaw)\n const mapped = await metadataMap(itemsRaw, res)\n emit('onApply', mapped)\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n saveAndCloseButtonLoading.value = false\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { loading, dialog, updateUploadStore } = storeToRefs(assetDetailStore)\n\nconst showDetail = async (id: DocId) => {\n try {\n assetDetailStore.setAsset(null)\n loading.value = true\n dialog.value = props.queueKey\n updateUploadStore.value = true\n assetDetailStore.setAsset(await fetchAsset(damClient, id))\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n}\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n fullscreen\n class=\"overlay--sidebar\"\n >\n <VCard>\n <div class=\"asset-footer__upload asset-footer--full asset-footer__upload--full pa-0\">\n <div class=\"d-flex w-100 h-100 flex-column\">\n <VToolbar\n class=\"w-100 system-border-b pr-1\"\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n >\n <div class=\"d-flex align-center px-2\">\n <div>\n <div\n v-if=\"isUploading\"\n class=\"text-subtitle-2 d-flex align-center\"\n >\n {{ t('common.damImage.upload.title') }}\n </div>\n <div\n v-else\n class=\"text-subtitle-2 d-flex align-center text-green-darken-3 font-weight-bold\"\n >\n {{ t('common.damImage.upload.titleDone') }}\n </div>\n </div>\n </div>\n <VSpacer />\n <div\n v-if=\"isUploading\"\n class=\"text-caption d-flex align-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n size=\"16\"\n width=\"2\"\n class=\"mr-1\"\n />\n <div>{{ t('common.damImage.upload.uploading') }} {{ queueProcessedCount + 1 }}/{{ queueTotalCount }}</div>\n </div>\n <div class=\"d-flex align-center\">\n <VDivider\n v-show=\"isUploading\"\n vertical\n class=\"mx-4 my-2\"\n />\n <ABtnPrimary\n v-if=\"isFinished\"\n :height=\"36\"\n class=\"mr-2\"\n rounded=\"pill\"\n :loading=\"saveAndCloseButtonLoading\"\n :disabled=\"saveButtonLoading\"\n @click.stop=\"onSaveAndApply\"\n >\n {{ t('common.damImage.upload.saveAndApply') }}\n </ABtnPrimary>\n <VBtn\n variant=\"text\"\n :height=\"36\"\n :width=\"36\"\n class=\"mr-2\"\n icon\n :loading=\"saveButtonLoading\"\n :disabled=\"saveAndCloseButtonLoading\"\n @click.stop=\"onSave\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.save') }}\n </VTooltip>\n </VBtn>\n <AFileInput\n :file-input-key=\"fileInputKey\"\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n @files-input=\"emit('onFilesInput', $event)\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn\n tabindex=\"-1\"\n icon\n variant=\"text\"\n :height=\"34\"\n :width=\"34\"\n v-bind=\"fileInputProps\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.add') }}\n </VTooltip>\n </VBtn>\n </template>\n </AFileInput>\n <VDivider\n vertical\n class=\"mx-4 my-2\"\n />\n <VBtn\n :height=\"36\"\n :width=\"36\"\n :active=\"uploadQueueSidebar\"\n :variant=\"uploadQueueSidebar ? 'flat' : 'text'\"\n :color=\"uploadQueueSidebar ? 'secondary' : ''\"\n class=\"mr-2\"\n icon\n @click.stop=\"toggleUploadQueueSidebar\"\n >\n <VIcon icon=\"mdi-tag-text-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.title') }}\n </VTooltip>\n </VBtn>\n <UploadQueueButtonStop\n data-cy=\"button-close\"\n :button-size=\"36\"\n :is-uploading=\"isUploading\"\n @confirm=\"onStopConfirm\"\n />\n </div>\n </VToolbar>\n <UploadQueueEditable\n :queue-key=\"queueKey\"\n :mass-operations=\"uploadQueueSidebar\"\n @show-detail=\"showDetail\"\n />\n </div>\n <AImageDropzone\n variant=\"fill\"\n transparent\n hover-only\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n @on-drop=\"emit('onDrop', $event)\"\n />\n </div>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport type { DocId, IntegerId } from '@/types/common'\nimport { computed, inject, nextTick, onMounted, ref, type ShallowRef, toRaw } from 'vue'\nimport { isNull, isString, isUndefined } from '@/utils/common'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { ImageWidgetExtSystemConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport ImageWidgetMultipleItem from '@/components/damImage/uploadQueue/components/ImageWidgetMultipleItem.vue'\nimport { storeToRefs } from 'pinia'\nimport { bulkUpdateImages, deleteImage, fetchImageListByIds } from '@/components/damImage/uploadQueue/api/imageApi'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { type AssetSearchListItemDto, DamAssetType } from '@/types/coreDam/Asset'\nimport AAssetSelect from '@/components/dam/assetSelect/AAssetSelect.vue'\nimport AFileInput from '@/components/file/AFileInput.vue'\nimport AImageDropzone from '@/components/file/AFileDropzone.vue'\nimport { useDamAcceptTypeAndSizeHelper } from '@/components/damImage/uploadQueue/composables/acceptTypeAndSizeHelper'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { AssetSelectReturnData } from '@/types/coreDam/AssetSelect'\nimport UploadQueueDialog from '@/components/damImage/uploadQueue/components/UploadQueueDialog.vue'\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport AssetDetailDialog from '@/components/damImage/uploadQueue/components/AssetDetailDialog.vue'\nimport { fetchAssetByFileId, fetchAssetListByIds } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport { CHOSEN_CLASS, DRAG_CLASS, GHOST_CLASS, GROUP_CLASS, HANDLE_CLASS } from '@/components/sortable/sortableActions'\nimport { useSortable, type UseSortableReturn } from '@vueuse/integrations/useSortable'\nimport type { SortableEvent } from 'sortablejs'\nimport { WIDGET_HTML_ID_PREFIX } from '@/components/sortable/sortableUtils'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useI18n } from 'vue-i18n'\nimport useVuelidate from '@vuelidate/core'\nimport { AImageMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId[]\n queueKey: UploadQueueKey\n licenceId: IntegerId\n extSystem: IntegerId\n configName?: string\n label?: string | undefined\n readonly?: boolean\n dataCy?: string | undefined\n width?: number | undefined\n disableDraggable?: boolean\n widgetIdentifierId?: string | undefined\n callDeleteApiOnRemove?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n width: undefined,\n disableDraggable: false,\n widgetIdentifierId: undefined,\n callDeleteApiOnRemove: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerId[]): void\n}>()\n\nconst assetSelectDialog = ref(false)\n\nconst imageWidgetExtSystemConfig = inject<ShallowRef<DamExtSystemConfig> | undefined>(\n ImageWidgetExtSystemConfig,\n undefined\n)\n\nif (isUndefined(imageWidgetExtSystemConfig)) {\n throw new Error(\"Fatal error, parent component doesn't provide necessary config ext system config.\")\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\nconst { showErrorsDefault, showValidationError } = useAlerts()\nconst uploadButtonComponent = ref<InstanceType<any> | null>(null)\n\nconst { uploadSizes, uploadAccept } = useDamAcceptTypeAndSizeHelper(\n DamAssetType.Image,\n imageWidgetExtSystemConfig.value\n)\n\nconst { t } = useI18n()\n\nconst imagesLoading = ref(false)\n\nconst imageStore = useImageStore()\nconst { images, maxPosition } = storeToRefs(imageStore)\n\nconst fetchImagesOnLoad = async () => {\n try {\n imagesLoading.value = true\n const imagesRes = await fetchImageListByIds(imageClient, props.modelValue)\n imageStore.setImages(\n imagesRes.map((imageRes) => {\n imageStore.updateMaxPositionIfGreater(imageRes.position)\n return {\n key: generateUUIDv1(),\n ...imageRes,\n }\n })\n )\n emit('update:modelValue', images.value.map((image) => image.id).filter((id) => id !== undefined) as IntegerId[])\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n imagesLoading.value = false\n }\n}\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst uploadQueue = computed(() => {\n return uploadQueuesStore.getQueue(props.queueKey)\n})\n\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst onFileInput = (files: File[]) => {\n uploadQueuesStore.addByFiles(props.queueKey, props.licenceId, files)\n uploadQueueDialog.value = true\n}\n\nconst onDrop = (files: File[]) => {\n uploadQueuesStore.addByFiles(props.queueKey, props.licenceId, files)\n uploadQueueDialog.value = true\n}\n\nconst assetSelectConfirmMap = async (items: AssetSearchListItemDto[]) => {\n const ids = items.map((item) => item.id)\n const assetMetadataMap = new Map<DocId, { description: string; authorIds: DocId[] }>()\n const authorIdsToFetch = new Set<DocId>()\n const authorsMap = new Map<DocId, string>()\n try {\n const assetDetails = await fetchAssetListByIds(damClient, ids, props.licenceId)\n assetDetails.forEach((assetDetail) => {\n assetMetadataMap.set(assetDetail.id, {\n description: isString(assetDetail.metadata.customData?.description)\n ? assetDetail.metadata.customData.description.trim()\n : '',\n authorIds: assetDetail.authors,\n })\n })\n assetMetadataMap.forEach((assetMeta) => {\n assetMeta.authorIds.forEach((authorId) => {\n authorIdsToFetch.add(authorId)\n })\n })\n if (authorIdsToFetch.size > 0) {\n const authorsRes = await fetchAuthorListByIds(damClient, props.extSystem, [...authorIdsToFetch])\n authorsRes.forEach((author) => {\n authorsMap.set(author.id, author.name)\n })\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n\n return items.map((asset) => {\n maxPosition.value++\n const description = assetMetadataMap.get(asset.id)?.description\n const authorNames: string[] = []\n assetMetadataMap.get(asset.id)?.authorIds.forEach((authorId) => {\n const name = authorsMap.get(authorId)\n if (!isUndefined(name) && name.trim().length > 0) {\n authorNames.push(name)\n }\n })\n return {\n key: generateUUIDv1(),\n texts: {\n description: description ?? '',\n source: authorNames.join(', '),\n },\n dam: {\n damId: asset.mainFile!.id,\n regionPosition: 0,\n },\n position: maxPosition.value,\n }\n })\n}\n\nconst onAssetSelectConfirm = async (data: AssetSelectReturnData) => {\n if (data.type === 'asset') {\n if (data.value.length === 0) return\n const items = await assetSelectConfirmMap(data.value.filter((asset) => !isNull(asset.mainFile)))\n imageStore.addImages(items)\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { loading: assetLoading, dialog: assetDialog } = storeToRefs(assetDetailStore)\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onEditAsset = async (assetFileId: DocId) => {\n assetLoading.value = true\n assetDialog.value = props.queueKey\n try {\n const asset = await fetchAssetByFileId(damClient, assetFileId)\n assetDetailStore.setAsset(asset)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n assetLoading.value = false\n }\n}\n\nconst onAssetUploadConfirm = (items: ImageCreateUpdateAware[]) => {\n if (items.length === 0) return\n imageStore.addImages(\n items.map((item) => {\n maxPosition.value++\n return {\n key: generateUUIDv1(),\n ...item,\n position: maxPosition.value,\n }\n })\n )\n uploadQueueDialog.value = false\n uploadQueuesStore.stopUpload(props.queueKey)\n}\n\nconst actionLibrary = () => {\n assetSelectDialog.value = true\n}\n\nconst v$ = useVuelidate({}, {}, { $scope: AImageMetadataValidationScopeSymbol })\n\nconst saveImages = async () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return false\n }\n try {\n const resItems = await bulkUpdateImages(imageClient, toRaw(images.value))\n const ids: IntegerId[] = []\n const items = resItems.map((resItem) => {\n ids.push(resItem.id)\n return {\n key: generateUUIDv1(),\n ...resItem,\n }\n })\n imageStore.setImages(items)\n emit('update:modelValue', ids)\n return true\n } catch (e) {\n return false\n }\n}\n\nconst removeItem = async (index: number) => {\n const image = images.value[index]\n if (!image) return\n if (isUndefined(image.id)) {\n imageStore.removeImageByIndex(index)\n return\n }\n if (props.callDeleteApiOnRemove) {\n try {\n await deleteImage(imageClient, image.id)\n imageStore.removeImageByIndex(index)\n } catch (e) {\n showErrorsDefault(e)\n }\n return\n }\n imageStore.removeImageByIndex(index)\n}\n\nconst widgetEl = ref<HTMLElement | null>(null)\nconst randomUuid = ref<string>(generateUUIDv1())\nconst sortableInstance = ref<UseSortableReturn | null>(null)\nconst forceRerender = ref(0)\n\nconst widgetHtmlId = computed(() => {\n return isUndefined(props.widgetIdentifierId) ? WIDGET_HTML_ID_PREFIX + randomUuid.value : props.widgetIdentifierId\n})\n\nconst forceRerenderWidgetHtml = () => {\n forceRerender.value++\n nextTick(() => {\n initSortable()\n })\n}\n\nconst updateAllPositions = () => {\n let pos = 0\n images.value.forEach((image) => {\n pos++\n image.position = pos\n })\n imageStore.maxPosition = pos\n}\nconst moveImagePositions = (from: number, to: number) => {\n if (to >= 0 && to < images.value.length) {\n const element = images.value.splice(from, 1)[0]\n images.value.splice(to, 0, element)\n updateAllPositions()\n forceRerenderWidgetHtml()\n }\n}\n\nconst initSortable = () => {\n if (props.disableDraggable) return\n if (!widgetEl.value) return\n const nestedSortable = widgetEl.value.querySelector<HTMLElement>('.' + GROUP_CLASS)\n if (!nestedSortable) return\n sortableInstance.value = useSortable(nestedSortable, [], {\n handle: '.' + HANDLE_CLASS,\n ghostClass: GHOST_CLASS,\n dragClass: DRAG_CLASS,\n chosenClass: CHOSEN_CLASS,\n onEnd: async (event: SortableEvent) => {\n if (isUndefined(event.oldIndex) || isUndefined(event.newIndex)) return\n moveImagePositions(event.oldIndex, event.newIndex)\n },\n })\n}\n\nnextTick(() => {\n widgetEl.value = document.querySelector('#' + widgetHtmlId.value)\n initSortable()\n})\n\ndefineExpose({\n saveImages,\n})\n\nonMounted(() => {\n fetchImagesOnLoad()\n})\n</script>\n\n<template>\n <div :id=\"widgetHtmlId\">\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-subtitle-2\"\n >\n {{ label }}\n </h4>\n <div class=\"pb-2\">\n <AFileInput\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn\n ref=\"uploadButtonComponent\"\n v-bind=\"fileInputProps\"\n >\n {{ t('common.damImage.image.button.upload') }}\n </VBtn>\n </template>\n </AFileInput>\n <VBtn\n class=\"mr-2\"\n @click=\"actionLibrary\"\n >\n {{ t('common.damImage.image.button.addFromDam') }}\n </VBtn>\n </div>\n <AAssetSelect\n v-model=\"assetSelectDialog\"\n :asset-licence-id=\"licenceId\"\n :min-count=\"1\"\n :max-count=\"50\"\n :asset-type=\"DamAssetType.Image\"\n return-type=\"asset\"\n @on-confirm=\"onAssetSelectConfirm\"\n />\n\n <div\n class=\"position-relative w-100\"\n style=\"min-height: 140px\"\n >\n <div\n :key=\"forceRerender\"\n :class=\"GROUP_CLASS\"\n class=\"asset-list-tiles asset-list-tiles--thumbnail\"\n >\n <ImageWidgetMultipleItem\n v-for=\"(image, index) in images\"\n :key=\"image.key\"\n :index=\"index\"\n :disable-draggable=\"disableDraggable\"\n @edit-asset=\"onEditAsset\"\n @remove-item=\"removeItem\"\n />\n </div>\n <AImageDropzone\n variant=\"fill\"\n :hover-only=\"modelValue.length > 0 || images.length > 0\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @on-drop=\"onDrop\"\n @on-click=\"uploadButtonComponent?.$el.click()\"\n />\n </div>\n <UploadQueueDialog\n v-if=\"uploadQueueDialog\"\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :file-input-key=\"uploadQueue?.fileInputKey ?? -1\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n multiple\n @on-apply=\"onAssetUploadConfirm\"\n />\n <AssetDetailDialog\n v-if=\"assetDialog === queueKey\"\n :queue-key=\"queueKey\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { IntegerId } from '@/types/common'\nimport { onMounted, provide, ref } from 'vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { ImageWidgetExtSystemConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport ImageWidgetMultipleInner from '@/components/damImage/uploadQueue/components/ImageWidgetMultipleInner.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId[] // initial ids, updated only when save is called\n queueKey: UploadQueueKey\n licenceId: IntegerId\n extSystem: IntegerId\n configName?: string\n label?: string | undefined\n readonly?: boolean\n dataCy?: string | undefined\n width?: number | undefined\n callDeleteApiOnRemove?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n width: undefined,\n callDeleteApiOnRemove: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerId[]): void\n}>()\n\nconst status = ref<'loading' | 'ready' | 'error'>('loading')\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { damClient } = useCommonAdminCoreDamOptions(props.configName)\nconst {\n initialized,\n loadDamConfigExtSystem,\n damConfigExtSystem,\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n} = useDamConfigState(damClient)\n\nonMounted(async () => {\n const promises: Promise<any>[] = []\n if (!initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n if (initialized.damConfigExtSystem !== props.extSystem) {\n promises.push(loadDamConfigExtSystem(props.extSystem))\n promises.push(loadDamConfigAssetCustomFormElements(props.extSystem))\n }\n try {\n await Promise.all(promises)\n } catch (e) {\n status.value = 'error'\n }\n if (status.value !== 'error') status.value = 'ready'\n})\n\nconst innerComponent = ref<InstanceType<typeof ImageWidgetMultipleInner> | null>(null)\n\nconst saveImages = async () => {\n if (!innerComponent.value) return false\n return await innerComponent.value.saveImages() as boolean\n}\n\nprovide(ImageWidgetExtSystemConfig, damConfigExtSystem)\n\ndefineExpose({\n saveImages,\n})\n</script>\n\n<template>\n <ImageWidgetMultipleInner\n v-if=\"status === 'ready'\"\n ref=\"innerComponent\"\n v-bind=\"props\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n />\n <div\n v-else-if=\"status === 'error'\"\n class=\"text-error\"\n >\n Loading DAM config error\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { IntegerId } from '@/types/common'\nimport type { ImageAware } from '@/types/ImageAware'\nimport AImageWidgetSimple from '@/components/damImage/AImageWidgetSimple.vue'\nimport { ref, toRefs, watch } from 'vue'\nimport { cloneDeep } from '@/utils/common'\nimport { fetchImageListByIds } from '@/components/damImage/uploadQueue/api/imageApi'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId[]\n images?: ImageAware[]\n configName?: string\n label?: string | undefined\n width?: number | undefined\n disableAspectRatio?: boolean\n aspectRatio?: number | string\n showDescription?: boolean\n showSource?: boolean\n }>(),\n {\n images: () => [],\n configName: 'default',\n label: undefined,\n image: undefined,\n width: undefined,\n disableAspectRatio: false,\n aspectRatio: 1.777, // 16/9\n showDescription: false,\n showSource: false,\n }\n)\n\nconst { images, modelValue } = toRefs(props)\n\nconst resImages = ref<ImageAware[]>([])\n\nconst { showErrorsDefault } = useAlerts()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\n\nwatch(\n [images, modelValue],\n async ([newImages, newImageIds]) => {\n resImages.value = []\n if (newImages && newImages.length > 0) {\n resImages.value = cloneDeep(newImages)\n return\n }\n if (newImageIds && newImageIds.length > 0) {\n try {\n resImages.value = await fetchImageListByIds(imageClient, newImageIds)\n } catch (error) {\n showErrorsDefault(error)\n }\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div class=\"asset-list-tiles asset-list-tiles--thumbnail\">\n <div\n v-for=\"image in resImages\"\n :key=\"image.id\"\n class=\"asset-list-tiles__item\"\n >\n <div class=\"asset-list-tiles__item-card\">\n <div class=\"ma-2\">\n <AImageWidgetSimple\n :model-value=\"image.id\"\n :image=\"image\"\n :config-name=\"configName\"\n :width=\"width\"\n :disable-aspect-ratio=\"disableAspectRatio\"\n :aspect-ratio=\"aspectRatio\"\n :show-description=\"showDescription\"\n :show-source=\"showSource\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n","import { computed, type Ref } from 'vue'\nimport { i18n } from '@/plugins/i18n'\nimport type { Pagination } from '@/types/Pagination'\nimport { usePagination } from '@/composables/system/pagination'\nimport { isUndefined } from '@/utils/common'\n\nexport const DATETIME_AUTO_LABEL_TRACKING = ['createdAt', 'modifiedAt']\n\nexport type DatatableSortBy =\n | {\n key: string\n order: 'asc' | 'desc'\n }\n | null\n | undefined\n\nexport type DatatableOrderingOption = { id: number; titleT: string; sortBy?: DatatableSortBy; customData?: any }\n\nexport type DatatableOrderingOptions = Array<DatatableOrderingOption>\n\nexport type ColumnConfig = {\n key: string\n title?: string\n sortable?: boolean\n fixed?: boolean\n}\n\nexport type ColumnInternalValues = {\n key: string\n title?: string\n sortable: boolean\n fixed: boolean\n}\n\nconst defaultColumn: ColumnInternalValues = {\n key: '',\n title: undefined,\n sortable: false,\n fixed: false,\n}\n\nexport function createDatatableColumnsConfig(\n config: ColumnConfig[],\n columnsHidden: Ref<Array<string>>,\n system: string | undefined = undefined,\n subject: string | undefined = undefined,\n disableActions: boolean = false,\n customPagination: Pagination | undefined = undefined,\n customI18n: undefined | any = undefined\n) {\n const localI18n = customI18n ?? i18n\n const { t } = localI18n.global || localI18n\n const pagination: Pagination = usePagination()\n if (customPagination) {\n for (const prop of Object.keys(pagination)) {\n if (prop in customPagination) {\n // @ts-ignore\n pagination[prop] = customPagination[prop]\n }\n }\n }\n\n const columnsAll = config.map((item) => {\n const obj = { ...defaultColumn, ...item }\n if (!isUndefined(obj.title)) {\n // do not modify\n } else if (isUndefined(obj.title) && DATETIME_AUTO_LABEL_TRACKING.includes(obj.key)) {\n obj.title = t('common.model.tracking.' + obj.key)\n } else if (isUndefined(obj.title) && system && subject) {\n obj.title = t(system + '.' + subject + '.model.' + obj.key)\n } else {\n obj.title = ''\n }\n return obj\n })\n\n const columnsVisible = computed(() => {\n const columns: any = []\n columnsAll.forEach((column) => {\n if (!columnsHidden.value.includes(column.key)) {\n columns.push(column)\n }\n })\n if (!disableActions) columns.push({ key: 'actions', sortable: false, fixed: true })\n return columns\n })\n\n const updateSortBy = (sortBy: any) => {\n if (sortBy) {\n pagination.sortBy = sortBy.key\n pagination.descending = sortBy.order === 'desc' ? true : false\n return\n }\n pagination.sortBy = null\n }\n\n return {\n columnsAll,\n columnsVisible,\n columnsHidden,\n updateSortBy,\n pagination,\n }\n}\n","import { createDatatableColumnsConfig, type DatatableOrderingOption } from '@/composables/system/datatableColumns'\nimport type { Ref } from 'vue'\nimport { ref } from 'vue'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { useAlerts } from '@/composables/system/alerts'\n\nexport function useSubjectSelect<TItem>(\n datatableConfig: any,\n datatableHiddenColumns: any,\n system: string,\n subject: string,\n fetch: (pag: Pagination, fb: FilterBag) => Promise<Array<TItem>>,\n filter: FilterBag\n) {\n const filterTouched: Ref<boolean> = ref(false)\n const items: Ref<Array<TItem>> = ref([])\n const selected: Ref<Array<TItem>> = ref([])\n const loading = ref(false)\n\n const { resetFilter, submitFilter } = useFilterHelpers()\n const { showErrorsDefault } = useAlerts()\n\n const { columnsVisible, pagination, updateSortBy, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n datatableConfig,\n datatableHiddenColumns,\n system,\n subject\n )\n\n const onOpen = () => {\n resetState()\n getList()\n }\n\n const sortByChange = (option: DatatableOrderingOption) => {\n updateSortBy(option.sortBy)\n getList()\n }\n\n const onFetchNextPage = async () => {\n loading.value = true\n pagination.page++\n try {\n items.value.push(...(await fetch(pagination, filter)))\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const resetState = () => {\n items.value = []\n selected.value = []\n }\n\n const getList = async () => {\n loading.value = true\n try {\n items.value = await fetch(pagination, filter)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const onRowClick = (event: Event) => {\n const eventTarget = event.target as HTMLElement | null\n if (!eventTarget) return\n const parent = eventTarget.parentElement\n if (!parent || !parent.classList.contains('v-data-table__tr')) return\n const firstTd = parent.firstElementChild\n if (!firstTd || !firstTd.classList.contains('v-data-table__td')) return\n const input = firstTd.querySelector('input')\n if (!input) return\n input.click()\n }\n\n return {\n items,\n selected,\n pagination,\n columnsVisible,\n columnsHidden,\n columnsAll,\n filterTouched,\n loading,\n onRowClick,\n onFetchNextPage,\n onOpen,\n sortByChange,\n getList,\n resetFilter: () => resetFilter(filter, pagination, getList),\n submitFilter: () => submitFilter(filter, pagination, getList),\n }\n}\n","export interface VDatatableSelectableItem {\n value: any\n selectable: boolean\n}\n\ninterface DataTableSelectStrategy {\n showSelectAll: boolean\n allSelected: (data: {\n allItems: VDatatableSelectableItem[]\n currentPage: VDatatableSelectableItem[]\n }) => VDatatableSelectableItem[]\n select: (data: { items: VDatatableSelectableItem[]; value: boolean; selected: Set<unknown> }) => Set<unknown>\n selectAll: (data: {\n value: boolean\n allItems: VDatatableSelectableItem[]\n currentPage: VDatatableSelectableItem[]\n selected: Set<unknown>\n }) => Set<unknown>\n}\n\nexport const generateDatatableMinMaxSelectStrategy = (min: number, max: number): DataTableSelectStrategy => {\n return {\n showSelectAll: false,\n allSelected: () => [],\n select: ({ items, value, selected }) => {\n if (min === max && min === 1) {\n return new Set(value ? [items[0]?.value] : [])\n }\n for (const item of items) {\n if (selected.size >= max && value) break\n else if (value) selected.add(item.value)\n else selected.delete(item.value)\n }\n return selected\n },\n selectAll: ({ selected }) => selected,\n }\n}\n","export const booleanToInteger = (value: boolean) => {\n return value ? 1 : 0\n}\n","import { dateTimeNow } from '@/utils/datetime'\nimport { isString } from '@/utils/common'\nimport type { AnzuUser } from '@/types/AnzuUser'\n\nexport function useAnzuUserFactory(system = '', resourceName = 'user') {\n let _system = system\n let _resourceName = resourceName\n const createAnzuUser = (system?: string, resourceName?: string): AnzuUser => {\n if (isString(system)) _system = system\n if (isString(resourceName)) _resourceName = resourceName\n\n return {\n id: 0,\n createdAt: dateTimeNow(),\n createdBy: 0,\n email: '',\n avatar: {\n color: '',\n text: '',\n },\n person: {\n firstName: '',\n fullName: '',\n lastName: '',\n },\n enabled: false,\n modifiedAt: dateTimeNow(),\n modifiedBy: 0,\n permissionGroups: [],\n permissions: {},\n resolvedPermissions: {},\n roles: [],\n _system: _system,\n _resourceName: _resourceName,\n }\n }\n\n return {\n createAnzuUser,\n }\n}\n","import type { PermissionConfig } from '@/types/PermissionConfig'\n\nexport function usePermissionConfigFactory() {\n const createPermissionConfig = (): PermissionConfig => {\n return {\n config: {},\n defaultGrants: [],\n roles: [],\n translation: {\n actions: {},\n subjects: {},\n roles: {},\n },\n }\n }\n\n return {\n createPermissionConfig,\n }\n}\n","import { dateTimeNow } from '@/utils/datetime'\nimport type { PermissionGroup } from '@/types/PermissionGroup'\n\nexport function usePermissionGroupFactory() {\n const createPermissionGroup = (): PermissionGroup => {\n return {\n id: 0,\n title: '',\n description: '',\n permissions: {},\n createdBy: 0,\n modifiedBy: 0,\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n _resourceName: 'permissionGroup',\n _system: '',\n }\n }\n\n return {\n createPermissionGroup,\n }\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isNull } from '@/utils/common'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig, Method } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiAnyRequest = <T, R = T>(\n client: () => AxiosInstance,\n method: Method,\n urlTemplate = '',\n urlParams: UrlParams = {},\n object: T | null = null,\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n const axiosConfig: AxiosRequestConfig = { method: method }\n if (urlTemplate !== '') {\n axiosConfig.url = replaceUrlParameters(urlTemplate, urlParams)\n }\n if (!isNull(object)) {\n axiosConfig.data = JSON.stringify(object)\n }\n client()\n .request({ ...options, ...axiosConfig })\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\nimport { isDefined } from '@/utils/common'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { useApiQueryBuilder } from '@/services/api/queryBuilder'\nimport { usePagination } from '@/composables/system/pagination'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport {\n type ApiInfiniteResponseList,\n type ApiResponseList,\n isApiInfiniteResponseList,\n isApiResponseList,\n} from '@/types/ApiResponse'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\nconst generateListApiQuery = (pagination: Pagination, filterBag: FilterBag | undefined = undefined): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, querySetFilters } = useApiQueryBuilder()\n querySetLimit(pagination.rowsPerPage)\n querySetOffset(pagination.page, pagination.rowsPerPage)\n querySetOrder(pagination.sortBy, pagination.descending)\n if (isDefined(filterBag)) querySetFilters(filterBag)\n return queryBuild()\n}\n\nconst generateListApiQueryWithoutPagination = (\n rowsPerPage: number,\n page: number,\n orderField: string,\n orderDesc: boolean,\n filterBag: FilterBag | undefined = undefined\n): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, querySetFilters } = useApiQueryBuilder()\n querySetLimit(rowsPerPage)\n querySetOffset(page, rowsPerPage)\n querySetOrder(orderField, orderDesc)\n if (isDefined(filterBag)) querySetFilters(filterBag)\n return queryBuild()\n}\n// todo: alpha version\n/**\n * Used to fetch all items from list api.\n *\n * @template R Response type override, optional\n */\nexport const apiFetchListBatch = async <R>(\n client: () => AxiosInstance,\n urlTemplate: string,\n urlParams: UrlParams = {},\n sortBy = 'id',\n sortDesc = true,\n filterBag: FilterBag | undefined = undefined,\n batchSize = 100,\n system: string,\n entity: string,\n forceElastic = false,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n const searchApi = (isDefined(filterBag?._elastic) || forceElastic) ? '/search' : ''\n const pagination = usePagination(sortBy)\n pagination.rowsPerPage = batchSize\n pagination.sortBy = sortBy\n pagination.descending = sortDesc\n const urlPart = replaceUrlParameters(urlTemplate, urlParams) + searchApi\n const results = [] as unknown as R\n\n try {\n const res = await client().get(urlPart + generateListApiQuery(pagination, filterBag), options)\n if (!isValidHTTPStatus(res.status)) {\n return Promise.reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n const resData = res.data as unknown as ApiResponseList<R> | ApiInfiniteResponseList<R>\n // @ts-ignore\n results.push(...resData.data)\n if (isApiInfiniteResponseList(resData)) {\n pagination.hasNextPage = res.data.hasNextPage\n if (pagination.hasNextPage) {\n while (pagination.hasNextPage) {\n pagination.page++\n const nextPageResponse = await client().get(urlPart + generateListApiQuery(pagination, filterBag), options)\n const nextPageData = nextPageResponse.data\n // @ts-ignore\n results.push(...nextPageData.data)\n pagination.hasNextPage = nextPageData.hasNextPage\n }\n }\n } else if (isApiResponseList(resData)) {\n pagination.totalCount = resData.totalCount\n if (pagination.totalCount <= pagination.rowsPerPage) {\n return Promise.resolve(results as R)\n }\n const promises: Promise<any>[] = []\n const numPages = Math.ceil(pagination.totalCount / pagination.rowsPerPage)\n for (let i = 0; i < numPages; i++) {\n promises.push(\n client().get(\n urlPart +\n generateListApiQueryWithoutPagination(\n pagination.rowsPerPage,\n i,\n pagination.sortBy,\n pagination.descending,\n filterBag\n ),\n options\n )\n )\n }\n const allResponses = await Promise.all(promises)\n allResponses.forEach((pageResponse) => {\n // @ts-ignore\n results.push(...pageResponse.data.data)\n })\n }\n pagination.currentViewCount = res.data.data.length\n return Promise.resolve(results as R)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return Promise.resolve([] as R)\n }\n\n return results\n } catch (err: any) {\n if (axiosErrorResponseIsForbidden(err)) {\n return Promise.reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return Promise.reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return Promise.reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return Promise.reject(new AnzuFatalError(err))\n }\n}\n","import { isAnzuApiValidationError } from '@/model/error/AnzuApiValidationError'\nimport { isAnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { isAnzuApiForbiddenError } from '@/model/error/AnzuApiForbiddenError'\nimport { isAnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\n\nexport function useErrors() {\n return {\n isAnzuFatalError,\n isAnzuApiForbiddenError,\n isAnzuApiValidationError,\n isAnzuApiResponseCodeError,\n }\n}\n","import type { AxiosInstance } from 'axios'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport type { JobBase } from '@/types/Job'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiDeleteOne } from '@/services/api/apiDeleteOne'\nimport { stringToKebabCase } from '@/utils/string'\n\nconst END_POINT = '/adm/v1/job'\nexport const ENTITY = 'job'\n\nexport function useJobApi<JobType extends JobBase = JobBase>(client: () => AxiosInstance, system: string) {\n const fetchJobList = (pagination: Pagination, filterBag: FilterBag) =>\n apiFetchList<JobType[]>(client, END_POINT, {}, pagination, filterBag, system, ENTITY)\n\n const fetchJob = (id: number) => apiFetchOne<JobType>(client, END_POINT + '/:id', { id }, system, ENTITY)\n\n const createJob = (data: JobType) => {\n const type = stringToKebabCase(data._resourceName)\n .slice(4) // remove \"job-\" prefix\n .replace('-kind-', '-kind/') // replace \"-kind-\" with \"-kind/\" if the needle is found\n\n return apiCreateOne<JobType>(client, data, END_POINT + '/:type', { type }, system, ENTITY)\n }\n\n const deleteJob = (id: number) => apiDeleteOne<JobType>(client, END_POINT + '/:id', { id }, system, ENTITY)\n\n return {\n fetchJobList,\n fetchJob,\n createJob,\n deleteJob,\n }\n}\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport const JOB_RESOURCE_USER_DATA_DELETE = 'jobUserDataDelete'\n\nexport type JobBaseResource = typeof JOB_RESOURCE_USER_DATA_DELETE | `job${string}`\n\nexport function useJobBaseResource<T extends JobBaseResource = JobBaseResource>(\n customJobs: ValueObjectOption<T>[] = []\n) {\n const { t } = useI18n()\n\n const jobResourceOptions = ref<ValueObjectOption<T>[]>([\n ...([\n {\n value: 'jobUserDataDelete',\n title: t('common.job.jobResource.jobUserDataDelete'),\n },\n ] as unknown as ValueObjectOption<T>[]),\n ...customJobs,\n ])\n\n const getJobResourceOption = (value: T): ValueObjectOption<T> => {\n return jobResourceOptions.value.find((item) => item.value === value) as ValueObjectOption<T>\n }\n\n return {\n jobResourceOptions,\n getJobResourceOption,\n }\n}\n","import type { App, DeepReadonly, Ref, UnwrapRef } from 'vue'\nimport type { AnzuUser } from '@/types/AnzuUser'\nimport type { AclValue } from '@/types/Permission'\nimport Acl from '@/components/permission/Acl.vue'\nimport Notification from '@kyvg/vue3-notification'\nimport type { LanguageCode } from '@/composables/languageSettings'\nimport {\n AvailableLanguagesSymbol,\n CurrentUserSymbol,\n CustomAclResolverSymbol,\n DefaultLanguageSymbol,\n} from '@/components/injectionKeys'\nimport type { AxiosInstance } from 'axios'\nimport type { IntegerId } from '@/types/common'\nimport { initCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { initCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\n\nexport type PluginOptions<T extends AclValue = AclValue> = {\n currentUser: CurrentUserType\n languages: { available: LanguageCode[]; default: LanguageCode }\n customAclResolver?: CustomAclResolver<T>\n coreDam?: CommonAdminCoreDamOptions\n image?: CommonAdminImageOptions\n}\n\nexport type CustomAclResolver<T extends AclValue = AclValue> =\n | undefined\n | {\n can?: (acl: T, subject?: object) => boolean\n canOwner?: (subject: object) => boolean\n }\n\nexport type CurrentUserType = DeepReadonly<Ref<UnwrapRef<AnzuUser | undefined>>>\n\nexport interface CommonAdminImageConfig {\n imageClient: () => AxiosInstance\n previewDomain: string\n width: number\n height: number\n}\n\nexport type CommonAdminImageOptions =\n | undefined\n | {\n configs: { [key: string]: CommonAdminImageConfig }\n }\n\nexport interface CommonAdminCoreDamConfig {\n damClient: () => AxiosInstance\n defaultLicenceId?: IntegerId\n}\n\nexport type CommonAdminCoreDamOptions =\n | undefined\n | {\n configs: { [key: string]: CommonAdminCoreDamConfig }\n apiTimeout: number\n uploadStatusFallback: boolean\n notification: {\n enabled: boolean\n webSocketUrl: string\n }\n }\n\nexport default {\n install<T extends AclValue = AclValue>(app: App, options: PluginOptions<T>): void {\n app.provide(CurrentUserSymbol, options.currentUser)\n app.provide(CustomAclResolverSymbol, options.customAclResolver)\n app.provide(AvailableLanguagesSymbol, options.languages.available)\n app.provide(DefaultLanguageSymbol, options.languages.default)\n app.component('Acl', Acl)\n app.use(Notification, { componentName: 'Notifications' })\n initCommonAdminImageOptions(options.image)\n initCommonAdminCoreDamOptions(options.coreDam)\n },\n}\n","export const arrayItemToggle = <T>(array: Array<T>, value: T) => {\n const index = array.indexOf(value)\n if (index === -1) {\n array.push(value)\n return\n }\n array.splice(index, 1)\n}\n\nexport const arrayToString = (values: Array<string | number>, separator = ', ') => values.join(separator)\n\nexport const arrayFromArgs = <T>(...args: [T[]]) => Array.from(...args)\n\nexport type NestedArray<T> = Array<NestedArray<T> | T>\n\nexport const arrayFlatten = <T>(input: NestedArray<T>, acc: T[] = []): T[] => {\n return input.reduce((_: T[], current) => {\n if (Array.isArray(current)) return arrayFlatten(current, acc)\n acc.push(current)\n return acc\n }, [])\n}\n\nexport const arraysHaveSameElements = <T>(array1: T[], array2: T[]): boolean => {\n if (array1.length !== array2.length) {\n return false\n }\n\n // Sort both arrays\n const sortedArray1 = array1.slice().sort()\n const sortedArray2 = array2.slice().sort()\n\n // Compare the sorted arrays\n for (let i = 0; i < sortedArray1.length; i++) {\n if (sortedArray1[i] !== sortedArray2[i]) {\n return false\n }\n }\n\n return true\n}\n","import type { RouteLocationRaw, Router } from 'vue-router'\n\nexport const browserHistoryReplaceUrlByString = (path: string) => {\n history.replaceState(history.state, '', path)\n}\n\nexport const browserHistoryReplaceUrlByRouter = (router: Router, to: RouteLocationRaw) => {\n const resolved = router.resolve(to)\n browserHistoryReplaceUrlByString(resolved.href)\n}\n","import alert from '@/locales/cs/common/alert.json'\nimport button from '@/locales/cs/common/button.json'\nimport model from '@/locales/cs/common/model.json'\nimport system from '@/locales/cs/common/system.json'\nimport anzuUser from '@/locales/cs/common/anzuUser.json'\nimport job from '@/locales/cs/common/job.json'\nimport log from '@/locales/cs/common/log.json'\nimport permission from '@/locales/cs/common/permission.json'\nimport permissionGroup from '@/locales/cs/common/permissionGroup.json'\nimport vuetify from '@/locales/cs/vuetify.json'\nimport apiValidation from '@/locales/cs/error/apiValidation.json'\nimport apiForbiddenOperation from '@/locales/cs/error/apiForbiddenOperation.json'\nimport jsValidation from '@/locales/cs/error/jsValidation.json'\nimport assetSelect from '@/locales/cs/common/assetSelect.json'\nimport subjectSelect from '@/locales/cs/common/subjectSelect.json'\nimport time from '@/locales/cs/common/time.json'\nimport sortable from '@/locales/cs/common/sortable.json'\nimport damImage from '@/locales/cs/common/damImage.json'\n\nexport default {\n common: {\n alert,\n button,\n model,\n system,\n anzuUser,\n job,\n log,\n permission,\n permissionGroup,\n assetSelect,\n subjectSelect,\n time,\n sortable,\n damImage,\n },\n $vuetify: vuetify,\n error: {\n apiValidation: {\n ...apiValidation,\n },\n apiForbiddenOperation: {\n ...apiForbiddenOperation,\n },\n jsValidation: {\n ...jsValidation,\n },\n },\n}\n","import vuetify from '@/locales/en/vuetify.json'\nimport alert from '@/locales/en/common/alert.json'\nimport button from '@/locales/en/common/button.json'\nimport model from '@/locales/en/common/model.json'\nimport system from '@/locales/en/common/system.json'\nimport anzuUser from '@/locales/en/common/anzuUser.json'\nimport job from '@/locales/en/common/job.json'\nimport log from '@/locales/en/common/log.json'\nimport permission from '@/locales/en/common/permission.json'\nimport permissionGroup from '@/locales/en/common/permissionGroup.json'\nimport apiValidation from '@/locales/en/error/apiValidation.json'\nimport jsValidation from '@/locales/en/error/jsValidation.json'\nimport apiForbiddenOperation from '@/locales/en/error/apiForbiddenOperation.json'\nimport assetSelect from '@/locales/en/common/assetSelect.json'\nimport subjectSelect from '@/locales/en/common/subjectSelect.json'\nimport time from '@/locales/en/common/time.json'\nimport sortable from '@/locales/en/common/sortable.json'\nimport damImage from '@/locales/en/common/damImage.json'\n\nexport default {\n common: {\n alert,\n button,\n model,\n system,\n anzuUser,\n job,\n log,\n permission,\n permissionGroup,\n assetSelect,\n subjectSelect,\n time,\n sortable,\n damImage,\n },\n $vuetify: vuetify,\n error: {\n apiValidation: {\n ...apiValidation,\n },\n apiForbiddenOperation: {\n ...apiForbiddenOperation,\n },\n jsValidation: {\n ...jsValidation,\n },\n },\n}\n","import alert from '@/locales/sk/common/alert.json'\nimport button from '@/locales/sk/common/button.json'\nimport model from '@/locales/sk/common/model.json'\nimport system from '@/locales/sk/common/system.json'\nimport anzuUser from '@/locales/sk/common/anzuUser.json'\nimport job from '@/locales/sk/common/job.json'\nimport log from '@/locales/sk/common/log.json'\nimport permission from '@/locales/sk/common/permission.json'\nimport permissionGroup from '@/locales/sk/common/permissionGroup.json'\nimport vuetify from '@/locales/sk/vuetify.json'\nimport apiValidation from '@/locales/sk/error/apiValidation.json'\nimport apiForbiddenOperation from '@/locales/sk/error/apiForbiddenOperation.json'\nimport jsValidation from '@/locales/sk/error/jsValidation.json'\nimport assetSelect from '@/locales/sk/common/assetSelect.json'\nimport subjectSelect from '@/locales/sk/common/subjectSelect.json'\nimport time from '@/locales/sk/common/time.json'\nimport sortable from '@/locales/sk/common/sortable.json'\nimport damImage from '@/locales/sk/common/damImage.json'\n\nexport default {\n common: {\n alert,\n button,\n model,\n system,\n anzuUser,\n job,\n log,\n permission,\n permissionGroup,\n assetSelect,\n subjectSelect,\n time,\n sortable,\n damImage,\n },\n $vuetify: vuetify,\n error: {\n apiValidation: {\n ...apiValidation,\n },\n apiForbiddenOperation: {\n ...apiForbiddenOperation,\n },\n jsValidation: {\n ...jsValidation,\n },\n },\n}\n","import { VBtn, VChip } from 'vuetify/components'\n\nexport const useCommonVuetifyConfig = () => {\n const commonTheme = () => {\n return {\n defaultTheme: 'light',\n variations: {\n colors: [],\n lighten: 0,\n darken: 0,\n },\n themes: {\n light: {\n dark: false,\n colors: {\n background: '#ffffff',\n surface: '#ffffff',\n 'on-surface': '#333',\n primary: '#3f6ad8',\n secondary: '#E0E0E0',\n 'on-secondary': '#333',\n success: '#3ac47d',\n 'on-success': '#fff',\n warning: '#FB8C00',\n error: '#d92550',\n info: '#78c3fb',\n },\n variables: {},\n },\n dark: {\n dark: true,\n colors: {\n background: '#1A1A1A',\n surface: '#1A1A1A',\n primary: '#3f6ad8',\n secondary: '#E0E0E0',\n 'on-secondary': '#333',\n success: '#3ac47d',\n warning: '#FB8C00',\n error: '#d92550',\n info: '#78c3fb',\n },\n variables: {},\n },\n },\n }\n }\n\n const commonDefaults = () => {\n return {\n global: {},\n VTextField: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VTextarea: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VSelect: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VAutocomplete: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VCombobox: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VSwitch: {\n color: 'success',\n density: 'compact',\n },\n VCard: {\n variant: 'flat',\n },\n VDialog: {\n noClickAnimation: true,\n persistent: true,\n },\n VProgressCircular: {\n color: 'primary',\n },\n VBtn: {\n variant: 'flat',\n },\n ABtnPrimary: {\n variant: 'flat',\n color: 'primary',\n },\n ABtnSecondary: {\n variant: 'outlined',\n color: 'primary',\n },\n ABtnTertiary: {\n variant: 'text',\n color: 'primary',\n },\n ABtnIcon: {\n variant: 'text',\n icon: true,\n },\n }\n }\n\n const commonAliases = () => {\n return {\n ABtnPrimary: VBtn as any,\n ABtnSecondary: VBtn as any,\n ABtnTertiary: VBtn as any,\n ABtnIcon: VBtn as any,\n AChipNoLink: VChip as any,\n }\n }\n\n return {\n commonAliases,\n commonDefaults,\n commonTheme,\n }\n}\n","export async function loadCommonFonts() {\n const webfontloader = await import('webfontloader')\n\n webfontloader.load({\n google: {\n families: ['Roboto:100,300,400,500,700,900&display=swap'],\n },\n // urls: ['https://cdn.jsdelivr.net/npm/@mdi/font@5.x/css/materialdesignicons.min.css']\n })\n}\n","import type { JobBase, JobUserDataDelete } from '@/types/Job'\nimport { JobStatus } from '@/model/valueObject/JobStatus'\nimport { dateTimeNow } from '@/utils/datetime'\nimport type { JobBaseResource } from '@/model/valueObject/JobBaseResource'\n\nexport function useCommonJobFactory() {\n const createBase = (resourceName: JobBaseResource, system: string): JobBase => {\n return {\n id: 0,\n status: JobStatus.Default,\n result: '',\n batchProcessedIterationCount: 0,\n finishedAt: null,\n startedAt: null,\n lastBatchProcessedRecord: '',\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: null,\n modifiedBy: null,\n _resourceName: resourceName,\n _system: system,\n }\n }\n\n const createUserDataDelete = (system: string): JobUserDataDelete => {\n return {\n ...createBase('jobUserDataDelete', system),\n ...{\n targetUserId: null,\n anonymizeUser: false,\n },\n }\n }\n\n return {\n createBase,\n createUserDataDelete,\n }\n}\n","import { readonly, ref } from 'vue'\nimport type { RouteLocationNormalized } from 'vue-router'\nimport { isNull } from '@/utils/common'\n\nenum LoginState {\n Success = 'success',\n FailureSsoCommunicationFailed = 'failure-sso-communication',\n FailureInternalError = 'failure-internal-error',\n FailureUnauthorized = 'failure-unauthorized',\n}\n\nconst status = ref<string | null>(null)\n\nexport function useLoginStatus(to: RouteLocationNormalized) {\n if (to.query.loginState) {\n status.value = to.query.loginState.toString()\n }\n\n const isStatusNotDefined = () => isNull(status.value)\n const isStatusLoginSuccess = () => status.value === LoginState.Success\n const isStatusSsoCommunicationFailure = () => status.value === LoginState.FailureSsoCommunicationFailed\n const isStatusInternalErrorFailure = () => status.value === LoginState.FailureInternalError\n const isStatusUnauthorized = () => status.value === LoginState.FailureUnauthorized\n\n return {\n status: readonly(status),\n isStatusNotDefined,\n isStatusLoginSuccess,\n isStatusSsoCommunicationFailure,\n isStatusInternalErrorFailure,\n isStatusUnauthorized,\n }\n}\n"],"names":["props","__props","t","useI18n","booleanValue","computed","text","color","loadingComputed","isUndefined","value","isDefined","isNull","isNumber","isString","isArray","isFunction","isBoolean","isDocId","isInt","x","isObject","isEmptyObject","isEmptyArray","isEmpty","cloneDeep","object","isProxy","toRaw","isRef","unref","stringToInt","fallbackValue","check","stringToFloat","stringSplitOnFirstOccurrence","delimiter","index","stringToSlug","stringToKebabCase","stringTrimLength","maxLength","stringUrlTemplateReplace","template","params","newParts","part","key","stringUrlTemplateReplaceVueRouter","regex","match","stringNormalizeForSlotName","name","stringIsValidEmail","email","SystemScopeSymbol","SubjectScopeSymbol","CurrentUserSymbol","CustomAclResolverSymbol","AvailableLanguagesSymbol","DefaultLanguageSymbol","emit","__emit","system","inject","subject","onUpdate","newValue","onBlur","_a","errorMessageComputed","_b","item","labelComputed","path","requiredComputed","provide","modelValueComputed","lastPage","displayedFrom","displayedTo","disabledFirstAndPrev","disabledLast","disabledNext","computedTotalCountText","rowsPerPageComputed","watch","oldValue","pageComputed","onClickFirst","onClickLast","onClickPrev","onClickNext","isVisible","toggleVisibility","cloned","active","ref","defaultItems","defaultItemsMostRelevant","activeTitle","found","options","onItemClick","onCancel","computedData","o","e","i","R","it","n","ot","s","T","b","M","at","rt","k","st","lt","ct","E","ut","D","c","u","h","l","H","ft","dt","nt","pt","$","g","j","f","N","A","r","d","m","w","B","y","Y","G","q","K","Q","U","X","p","Z","v","tt","L","_","W","F","P","I","O","z","J","et","C","S","yt","mt","xt","REQUIRED_LOCALES","i18n","createI18n","locale","isAnzuFatalError","error","AnzuFatalError","cause","message","HTTP_STATUS_OK","HTTP_STATUS_CREATED","HTTP_STATUS_NO_CONTENT","HTTP_STATUS_BAD_REQUEST","HTTP_STATUS_UNAUTHORIZED","HTTP_STATUS_FORBIDDEN","HTTP_STATUS_UNPROCESSABLE_ENTITY","HTTP_STATUS_VALID_ALL","axiosErrorResponseIsForbidden","axios","isAnzuApiForbiddenError","AnzuApiForbiddenError","ERROR_VALIDATION","axiosErrorResponseHasValidationData","_c","isAnzuApiValidationError","AnzuApiValidationError","resolveResponseData","axiosError","entity","data","items","values","__publicField","isAnzuApiResponseCodeError","AnzuApiResponseCodeError","code","ERROR_FORBIDDEN_OPERATION","axiosErrorResponseHasForbiddenOperationData","isAnzuApiForbiddenOperationError","AnzuApiForbiddenOperationError","DEFAULT_DURATION_SECONDS","NEW_LINE_MARK","useAlerts","showSuccess","duration","notify","showSuccessT","translation","showError","showErrorT","showInfo","showInfoT","showWarning","showWarningT","showValidationError","showRecordWas","variant","showApiValidationError","errors","fieldIsTranslated","te","texts","fieldText","errorsTexts","showApiForbiddenOperationError","detail","showUnknownError","showForbiddenError","buttonLoading","onOpen","onClose","router","useRouter","showErrorsDefault","onConfirm","res","config","onMounted","useFetch","module","this","a","dayjs","utc","SUFFIX","FORMAT","DATETIME_MIN","DATETIME_MAX","dateNow","dateTimeToDate","isoDate","timestampCurrent","dateTimeNow","ignoreFractionalSeconds","ignoreSeconds","dateTimeStartOfDay","days","dateTimeEndOfDay","dateModifyMinutes","minutes","date","dateToUtc","yearNow","dateTimePretty","edgeDateValue","dateTimeFriendly","displayYear","displayDayMonth","now","datePretty","timePretty","dateDiff","date1","date2","unit","date1dayjs","date2dayjs","createdAt","modifiedAt","makeFilterHelper","defaultValue","titleT","useFilterHelpers","clearOne","filter","clearAll","filterBag","filterName","clearAllErrors","pagination","callback","label","placeholderComputed","model","filterId","filterText","filterDocId","filterUrl","filterOverrides","toRefs","filterActive","clearIfActive","clearAllActiveExcept","exceptFilter","_d","_e","_f","_g","_h","_i","overrideFilter","currentFilter","setFilters","newModel","autodetectFilter","filterLabels","currentFilterModel","eventClickBlur","event","onClick","icon","resetFilter","advancedFilter","toggleAdvancedFilter","Grant","useGrant","grantOptions","selectedGrant","newGrant","getGrantOption","GrantOrigin","useGrantOrigin","grantOriginOptions","grantOption","getGrantOriginOption","grantOriginOption","objectDeepFreeze","obj","propNames","objectGetValues","objectGetValueByPath","splitChar","objectSetValueByPath","objectDeletePropertyByPath","pathParts","lastIndex","recurse","isOwnerAware","isCreatedByAware","ROLE_SUPER_ADMIN","useAcl","shouldInject","currentUser","customAclProvider","can","acl","permission","canOwner","acls","allowed","pretty","HOOKS","defaults","err","givenDate","week1","english","nth","pad","number","length","int","bool","debounce","fn","wait","_this","args","arrayify","toggleClass","elem","className","createElement","tag","content","clearNode","node","findParent","condition","createNumberInput","inputClassName","opts","wrapper","numInput","arrowUp","arrowDown","getEventTarget","doNothing","monthToStr","monthNumber","shorthand","revFormat","dateObj","monthName","hour","day","amPM","shortMonth","seconds","unixSeconds","weekNum","weekNumber","year","ISODate","month","unixMillSeconds","tokenRegex","formats","createDateFormatter","l10n","isMobile","frmt","overrideLocale","arr","createDateParser","givenFormat","timeless","customLocale","parsedDate","dateOrig","format","datestr","matched","ops","matchIndex","regexStr","token","isBackSlash","escaped","val","compareDates","isBetween","ts","ts1","ts2","calculateSecondsSinceMidnight","hours","parseSeconds","secondsSinceMidnight","getDefaultHours","minHour","minMinutes","minSeconds","maxHr","maxMinutes","target","_loop_1","source","args_1","__assign","__spreadArrays","il","jl","DEBOUNCED_CHANGE_MS","FlatpickrInstance","element","instanceConfig","self","defaultOptions","flatpickr","English","bind","setHoursFromDate","positionCalendar","changeMonth","changeYear","clear","close","onMouseOver","createDay","destroy","isEnabled","jumpToDate","updateValue","open","redraw","set","setDate","toggle","setupHelperFunctions","yr","init","parseConfig","setupLocale","setupInputs","setupDates","build","bindEvents","setCalendarWidth","isSafari","triggerEvent","getClosestActiveElement","bindToInstance","daysWidth","updateTime","defaultDate","timeWrapper","prevValue","setHoursFromInputs","ampm2military","military2ampm","limitMinHours","limitMaxHours","minBound","maxBound","currentTime","result","maxTime","minTime","setHours","onYearInput","eventTarget","handler","ev","el","triggerChange","evt","setupMobile","debouncedResize","onResize","onKeyDown","documentClick","onMonthNavClick","selectDate","selText","timeIncrement","jumpDate","jumpTo","oldYear","oldMonth","buildMonthSwitch","incrementNumInput","delta","inputElem","input","createEvent","fragment","buildMonthNav","buildWeeks","weekWrapper","weekNumbers","buildWeekdays","buildDays","buildTime","customAppend","_dayNumber","dateIsEnabled","dayElement","isDateSelected","isDateInRange","focusOnDayElem","targetNode","getFirstAvailableDay","startMonth","endMonth","startIndex","endIndex","getNextAvailableDay","current","givenMonth","loopDelta","numMonthDays","focusOnDay","offset","activeElement","dayFocused","isInView","startElem","buildMonthDays","firstOfMonth","prevMonthDays","daysInMonth","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayNumber","dayIndex","dayNum","dayContainer","frag","shouldBuildMonth","buildMonth","container","monthNavFragment","monthElement","selectedMonth","yearInput","yearElement","currentMonth","buildMonths","updateNavigationCurrentMonth","separator","hourInput","minuteInput","secondInput","updateWeekdays","firstDayOfWeek","weekdays","isOffset","triggerChangeEvent","toInitial","isCalendarElem","eventTarget_1","isCalendarElement","isInput","lostFocus","isIgnored","newYear","newYearNum","isNewYear","dateToCheck","array","parsed","valueChanged","getDateStr","allowInput","allowKeydown","allowInlineKeydown","isTimeObj","focusAndClose","delta_1","elems","cellClass","hoverDate","initialDate","rangeStartDate","rangeEndDate","containsDisabled","minRange","maxRange","hoverableCells","dayElem","timestamp","outOfRange","positionElement","wasOpen","minMaxDateSetter","type","inverseDateObj","boolOpts","userConfig","dates","parseDateRules","timeMode","defaultDateFormat","defaultAltFormat","minMaxTimeSetter","hook","pluginConf","getInputElem","customPositionElement","calendarHeight","acc","child","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","distanceFromBottom","showOnTop","top","left","isCenter","isRight","right","rightMost","centerMost","doc","getDocumentStyleSheet","bodyWidth","centerLeft","centerBefore","centerAfter","centerIndex","centerStyle","editableSheet","sheet","createStyleSheet","style","isSelectable","selectedDate","shouldChangeMonth","selectedIndex","single","range","CALLBACKS","updatePositionElement","option","setSelectedDate","inputDate","rule","preloadedDate","inputType","hooks","specificFormat","dObj","isPrevMonth","isNextMonth","isKeyDown","min","max","step","curValue","isHourElem","isMinuteElem","_flatpickr","nodeList","nodes","instances","selector","includedEvents","excludedEvents","camelToKebab","string","nullify","allEvents","configCallbacks","Component","defineComponent","safeConfig","globalCallbacks","localCallback","onCloseCb","nextTick","selectedDates","dateStr","newState","newConfig","global","factory","exports","fp","Slovak","sk","Czech","cs","useValidateRequiredIf","createI18nMessage","requiredIf","ALL_LANGUAGES","storedSettings","useStorage","modifyLanguageSettings","configAvailableLanguages","configDefaultLanguage","addMessages","language","messages","setLanguage","readonly","useLanguageSettings","shortcutButtonsPlugin","pluginsImported","flatickrRefIsInitialized","flatickrRef","textFieldRef","isOpened","textFieldValue","flatpickrValue","initialized","fixFormat","checkIfReallyEmitChange","onFlatpickrUpdate","onFlatpickrOpen","onTextFieldBlur","onFlatpickrClose","onFlatpickrChange","filtered","altFormat","v$","onClear","enableComputed","defaultValueComputed","pluginsComputed","languages","currentLanguageCode","flatpickrConfig","onCalendarClick","rules","useVuelidate","checkboxModel","onCheckboxClick","usePagination","sortBy","reactive","usePaginationAutoHide","modelValue","search","isFocused","autoFetchTimer","innerFilter","multipleComputedVuetifyTypeFix","fetchedItems","selectedItemsCache","allItems","final","loadingLocal","apiSearch","query","filterField","findLocalDataByValues","tryToLoadFromLocalData","count","foundItems","autoFetched","clearAutoFetchTimer","autoFetch","onFocus","singleItemSelectedTitle","onSearchUpdate","onClickClear","watchDebounced","loading","hasError","uniqueId","internalModelValue","success","returnValue","JobStatus","useJobStatus","jobStatusOptions","getJobStatusOption","commonConfig","COMMON_CONFIG","cached","shallowRef","loaded","containerClassComputed","displayTitle","LogLevel","useLogLevel","logLevelOptions","getLogLevelOption","levelOption","numberToString","copy","isSupported","useClipboard","customColorClass","routerToComputed","variantComputed","dialog","closeDialog","__expose","ThemeSettings","Theme","QUERY","settings","theme","systemHasDarkPreference","setTheme","setThemeSettings","toolbarColor","useTheme","setThemeAuto","setThemeDark","setThemeLight","toggleTheme","isOpen","_hoisted_1","_hoisted_6","_sfc_render","_ctx","_cache","_hoisted_2","_createElementVNode","_hoisted_3","currentFlagComponent","FlagSk","FlagEn","FlagEmpty","onLanguageChange","currentLocale","availableLocales","reloadAdmin","AnzuNewVersionFetchError","showSystemBar","checkNewVersion","contentType","json","systemBarComponent","ASystemBarNewVersion","pause","useIntervalFn","onBeforeUnmount","fontSize","firstNameLastName","swatches","generatedColor","generateRandomColor","randomRow","buttonColorComputed","onColorPickerChange","newColor","logoutDialog","fetch","add","addManualMinimal","fetchedItemsMinimal","tryToAddFromFetchedItems","ids","resolve","deleteWasPressedTime","onKeydownDelete","idsToFetch","DamAssetStatus","DamAssetType","damAssetTypeValueToEnum","makeFilter","useAssetListFilter","AssetSelectReturnType","assetSelectReturnTypeValuesToEnum","useAssetSelectStore","defineStore","assetListItems","loader","licenceId","assetType","AssetTypeValue","selectedAssets","singleMode","minCount","maxCount","showLoader","hideLoader","setLicenceId","setSingleMode","setAssetType","setMinCount","setMaxCount","setList","appendList","assets","asset","toggleSelectedByIndex","isSelectedMax","unselectAllExcept","clearSelected","addToSelected","removeFromSelected","ignoreIndex","assetItem","assetId","getSelectedMainFileIds","fileIds","getSelectedAssetIds","getSelectedAssets","getSelectedData","selectedCount","reset","commonAdminCoreDamOptions","initCommonAdminCoreDamOptions","useCommonAdminCoreDamOptions","configName","useCommonAdminCoreDamOptionsGlobal","replaceUrlParameters","urlTemplate","urlParams","overrideUrlTemplate","isValidHTTPStatus","statusCode","apiFetchOne","client","reject","useApiQueryBuilder","querySetLimit","queryAdd","querySetOffset","page","limit","querySetOrder","field","desc","formatValue","queryAddFilter","filterVariant","getValue","isSearchApi","isApiResponseList","isApiInfiniteResponseList","generateListApiQuery","queryBuild","querySetFilters","apiFetchList","searchApi","resData","DamDistributionRequirementStrategy","DamDistributionServiceType","DamDistributionStatus","UserAuthType","END_POINT","PUB_END_POINT_PREFIX","PUB_END_POINT","ENTITY","fetchPubConfiguration","damClient","SYSTEM_CORE_DAM","fetchConfiguration","fetchExtSystemConfiguration","extSystem","fetchAssetCustomFormElements","fetchDistributionCustomFormElements","distributionService","createDefaultExtSystemConfig","override","damPubConfig","damPrvConfig","damConfigExtSystem","damConfigAssetCustomFormElements","damConfigDistributionCustomFormElements","useDamConfigState","onConfigError","loadDamPubConfig","setDamPubConfig","loadDamPrvConfig","setDamPrvConfig","loadDamConfigExtSystem","extSystemId","setDamConfigExtSystem","loadDamConfigAssetCustomFormElements","promises","responses","setDamConfigAssetCustomFormElements","loadDamConfigDistributionCustomFormElements","distributionServiceName","BULK_METADATA_LIMIT","FETCH_BY_IDS_MAX_LIMIT","fetchAssetList","fetchAsset","id","fetchAssetByFileId","assetFileId","bulkUpdateAssetsMetadata","bulkItems","listItemsToMetadataBulkItems","updateMetadataSequence","bulkItemsRes","response","fetchAssetListByIdsSequence","totalCalls","reduced","fetchAssetListByIds","dtoItems","handleMetadataValidationError","updateAssetMetadata","filterIsTouched","useAssetListActions","assetListStore","storeToRefs","apiFetchAssetList","fetchNextPage","resetAssetList","filterTouch","filterUnTouch","initStoreContext","IMAGE_HEIGHT","IMAGE_BG_COLOR_DEFAULT","useAssetItemActions","assetStatus","imageProperties","tableImageProperties","imagePlaceholderPath","onError","srcComputed","placeholder16x9","showIconComputed","prettyBytes","bytes","decimals","dm","sizes","IMAGE_WIDTH","toRef","AssetSelectGridView","gridView","useGridView","setGridView","sidebarLeft","useSidebar","toggleSidebar","closeSidebar","openSidebar","onAnyFilterUpdate","submitFilter","componentComputed","AssetSelectFilterFormImage","AssetSelectFilterFormDefault","dialogLocal","defaultLicenceId","autoloadOnIntersect","isIntersecting","AssetSelectListTable","AssetSelectListTiles","disabledSubmit","ownKeys","enumerableOnly","keys","symbols","sym","_objectSpread2","_defineProperty","_typeof","_extends","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","version","userAgent","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","on","off","matches","getParentOrHost","closest","ctx","includeCTX","R_SPACE","state","css","prop","matrix","selfOnly","appliedTransforms","transform","matrixFn","find","tagName","iterator","list","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","elRect","bottom","height","width","containerRect","elMatrix","scaleX","scaleY","getContentRect","rect","paddingLeft","paddingTop","paddingRight","paddingBottom","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","visible","getChild","childNum","includeDragEl","currentChild","children","Sortable","lastChild","last","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","indexOfObject","includeSelf","gotSelf","elemCSS","extend","dst","src","isRectEqual","rect1","rect2","_throttleTimeout","throttle","ms","cancelThrottle","scrollBy","clone","Polymer","expando","AnimationStateManager","animationStates","animationCallbackId","fromRect","childMatrix","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","currentRect","translateX","translateY","repaint","plugins","PluginManager","plugin","eventName","sortable","eventNameGlobal","pluginName","modified","eventProperties","modifiedValue","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","allEventProperties","_excluded","pluginEvent","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","moved","_hideGhostForTarget","_unhideGhostForTarget","_dispatchEvent","info","activeGroup","awaitingDragStarted","ignoreNextClick","sortables","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","pastFirstInvertThresh","isCircumstantialInvert","targetMoveDistance","ghostRelativeParent","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","_detectDirection","elCSS","elWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","ret","threshold","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","to","from","sameGroup","otherGroup","group","originalGroup","nearestEmptyInsertDetectEvent","nearest","_checkOutsideTargetEl","dataTransfer","preventOnFilter","touch","originalTarget","_saveInputCheckedState","criteria","ownerDocument","dragStartFn","_disableDraggable","_nextTick","fallback","inserted","fallbackTolerance","fallbackOffset","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","revert","activeSortable","isOwner","canSort","fromSortable","completedFired","dragOverEvent","extra","completed","after","_onMove","changed","capture","insertion","elLastChild","_ghostIsLast","_ghostIsFirst","firstChild","direction","targetBeforeFirstSwap","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","_getSwapDirection","sibling","dragIndex","nextSibling","moveVector","_unsilent","_cancelNextTick","_globalDragOver","order","_generateId","useAnimation","store","willInsertAfter","onMoveFn","retVal","firstElRect","sortableContentRect","spacer","lastElRect","swapThreshold","invertedSwapThreshold","invertSwap","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","str","sum","root","inputs","idx","_len","_key","autoScrolls","scrollEl","scrollRootEl","scrolling","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","AutoScrollPlugin","AutoScroll","_ref2","clearPointerElemChangedInterval","clearAutoScrolls","autoScroll","ogElemScroller","newElem","isFallback","sens","speed","scrollThisInstance","scrollCustomFn","layersOut","currentParent","canScrollX","canScrollY","scrollWidth","scrollHeight","scrollPosX","scrollPosY","vx","vy","scrollOffsetY","scrollOffsetX","drop","dispatchSortableEvent","hideGhostForTarget","unhideGhostForTarget","toSortable","Revert","_ref3","Remove","_ref4","parentSortable","useSortable","document","defaultDocument","resetOptions","moveArrayElement","start","unrefElement","stop","tryOnMounted","tryOnScopeDispose","_valueIsRef","toValue","getRandomValues","rnds8","rng","byteToHex","unsafeStringify","_nodeId","_clockseq","_lastMSecs","_lastNSecs","v1","buf","clockseq","seedBytes","msecs","nsecs","tl","tmh","randomUUID","native","v4","rnds","generateUUIDv1","uuidv1","generateUUIDv4","uuidv4","HANDLE_CLASS","GHOST_CLASS","DRAG_CLASS","CHOSEN_CLASS","GROUP_CLASS","useSortableActions","initSortableCallback","removeDialog","itemToRemove","widgetEl","randomUuid","sortableInstance","forceRerender","dirtyLocal","transformItem","forceRerenderWidgetHtml","emitData","touchDirty","untouchDirty","updatePositions","updatedPositions","position","clonedData","returnData","findItemIndexById","updateDataCommon","dirty","updateData","foundIndex","updateDataAtIndex","addAfterIndex","targetIndex","addAfterId","targetId","removeById","removeByIndex","WIDGET_HTML_ID_PREFIX","onAddAfterClick","onDeleteClick","onEditClick","onAddLastClick","widgetHtmlId","initSortable","nestedSortable","needsRefresh","refresh","onRemoveDialogConfirm","NESTED_HANDLE_CLASS","NESTED_GHOST_CLASS","NESTED_DRAG_CLASS","NESTED_CHOSEN_CLASS","NESTED_GROUP_CLASS","SortableLevel","useSortableNestedActions","initSortablesCallback","sortableInstances","dragging","nestedData","updatePositionsSameParent","updatePositionsDifferentParent","itemsTarget","itemsSource","indexTarget","indexSource","calculateParentDepth","depth","parentItem","calculateChildDepth","childDepth","currentDepth","calculateNodeMaxDepth","parentDepth","findItemById","foundInChildren","currentId","maxDepth","itemToMove","itemToMoveParentItem","targetItem","childrenAllowed","insertData","targetItemParentItem","itemFound","onAddChildClick","level","showAddChildButtonComputed","widgetClass","initSortables","nestedSortables","parentId","addChildToId","paginationComputed","filterTouched","selectedItemsCount","onPageChange","hasNextPage","showAll","useCustomDataForm","CustomDataFormElementType","CustomDataFormElementTypeDefault","useCustomDataFormElementType","customDataFormElementTypeOptions","useValidateBetween","between","useValidateEmail","useValidateMaxLength","useValidateMaxValue","maxValue","useValidateMinLength","minLength","useValidateMinValue","minValue","useValidateNumeric","numeric","useValidateRequired","required","useValidateSlug","helpers","useValidateStringArrayItemLength","withI18nMessage","stringArrayItemLengthValidator","useValidateUrl","url","useValidate","fixValue","updateModelValue","stringArrayItemLength","dynamicRules","counter","toggleForm","updated","elementsPinned","elementsOther","showHideButtonText","showHideButtonIcon","enableShowHide","isDraggingFile","draggingTimer","useDropzoneGlobalDragState","dragoverHandler","checkReallyDraggingEnded","dragleaveHandler","dropHandler","dragEventContainsFiles","damFileTypeFix","file","useFormatAndSizeCheck","accept","maxSizes","acceptKeys","maxSizeKeys","checkFormatsAndSizes","files","disableAlert","incorrectFileNames","validFiles","isFileValid","checkFormats","checkSizes","accepts","splitType","dropZoneRef","onDrop","isOverDropZone","useDropZone","imageOptions","initCommonAdminImageOptions","useCommonAdminImageOptions","useImageActions","image","random","useDamAcceptTypeAndSizeHelper","createSizesByAssetType","uploadSizes","uploadAccept","UploadQueueItemType","UploadQueueItemStatus","AssetFileProcessStatus","AssetFileFailReason","AssetFileLinkType","assetFileIsImageFile","assetFileIsVideoFile","assetFileIsAudioFile","assetFileIsDocumentFile","useUploadQueueItemFactory","status","chunkSize","getAssetTypeByMimeType","mimeType","useDamUploadChunkSize","apiTimeout","lastChunkSize","minUploadTimeThreshold","idealUploadTimeThreshold","maxUploadTimeThreshold","updateChunkSize","expectedChunkUploadSpeed","returnFromRange","CHUNK_UPLOAD_TIMEOUT","imageUploadStart","imageUploadChunk","imageId","buffer","size","onUploadProgressCallback","formData","imageUploadFinish","sha","rotateImage","angle","NOTIFICATION_FALLBACK_TIMER_CHECK_SECONDS","NOTIFICATION_FALLBACK_MAX_TRIES","damUploadStart","damUploadChunk","damUploadFinish","uploadStatusFallback","notificationFallbackCallback","calculateFallbackTime","uploadQueuesStore","useUploadQueuesStore","modules","installedModules","__webpack_require__","moduleId","getter","property","_classCallCheck","instance","Constructor","RushaCore","_require","toHex","ceilHeapSize","conv","padlen","len","padZeroes","bin","h8","om","align","padData","chunkLen","msgLen","getRawDigest","heap","padMaxChunkLen","io","out","Rusha","padMsgLen","padChunkLen","view","chunkOffset","finalize","chunk","turnOffset","inputLen","precomputedHex","arrayBuffer","binarray","isRunningInWorker","isRunningInSharedWorker","isRunningInServiceWorker","hashData","hasher","cb","hashFile","readTotal","blockSize","reader","workerBehaviourEnabled","done","hash","work","createHash","runWorker","isDedicatedWorkerScope","isRunningInDedicatedWorker","worker","terminate","webpackBootstrapFunc","moduleNameReqExp","dependencyRegExp","quoteRegExp","getModuleDependencies","sources","queueName","retval","fnString","wrapperSignature","webpackRequireName","re","hasValuesInQueues","queues","hasValues","getRequiredModules","modulesQueue","requiredModules","seenModules","queue","moduleToCheck","newModules","newModulesKeys","entryModule","blob","URL","workerUrl","stdlib$840","foreign$841","heap$842","H$843","hash$844","k$845","x$846","i$847","j$848","y0$849","z0$850","y1$851","z1$852","y2$853","z2$854","y3$855","z3$856","y4$857","z4$858","t0$859","t1$860","convStr","H8","H32","lm","convBuf","convBlob","_createClass","defineProperties","descriptor","protoProps","staticProps","Hash","encoding","digest","CHUNK_MAX_RETRY","SPEED_CHECK_INTERVAL","CHUNK_RETRY_INTERVAL","CHUNK_RETRY_MULTIPLY","failUpload","queueItem","finishUpload","handleValidationErrorMessage","errorMessages","readFile","partial","sleep","useUpload","uploadCallback","fileSize","progress","speedStack","lastTimestamp","endTimestamp","lastLoaded","rusha","getCurrentTimestamp","progressCallback","progressEvent","currentStamp","dataSent","uploadChunk","chunkFile","exception","processAndUploadChunk","cancelToken","sleepTime","attempt","speedCheck","speedCheckRun","avgSpeed","remainingBytes","filesize","uploadedChunk","uploadStop","cancelTokenSource","damNotificationsEventBusKey","useDamNotificationsEventBus","useEventBus","DamNotificationName","damNotificationsInitialized","initDamNotifications","notification","enabled","ws","useWebSocket","eventBus","useDamNotifications","useAssetSuggestions","suggestions","newNames","conflicts","defineCached","mapFullToMinimal","mapIdToMinimal","fetchCallback","idProp","cache","toFetch","toAdd","arg","addManual","updateMap","updateToFetch","apiFetch","debouncedFetch","useDebounceFn","generateByIdsApiQuery","apiFetchByIds","apiCreateOne","END_POINT_LIST","fetchKeywordListByIds","fetchKeywordList","createKeyword","keyword","has","get","isLoaded","useDamCachedKeywords","fetchAuthorListByIds","fetchAuthorList","createAuthor","author","useDamCachedAuthors","useDamCachedAuthorsForRemoteAutocomplete","QUEUE_MAX_PARALLEL_UPLOADS","QUEUE_CHUNK_SIZE","addToCachedKeywords","fetchCachedKeywords","addToCachedAuthors","fetchCachedAuthors","createDefault","addDamNotificationListener","queueItemProcessed","queueItemFailed","queueItemDuplicate","queueItemMetadataProcessed","getQueue","queueKey","getQueueItems","addByFiles","assetLicence","createQueue","addQueueItem","recalculateQueueCounts","processUpload","getQueueItemsByStatus","waitingItems","queueItemUploadStart","upload","uploadInit","estimate","setUploadSpeed","originAssetFile","updateNewNames","getAuthorConflicts","assetRes","failReason","stopItemUpload","updateFromDetail","getQueueTotalCount","getQueueProcessedCount","stopUpload","currentItems","clearQueue","forceReloadFileInput","getQueueFileInputKey","getQueueItemsTypes","types","BLOCK_DOUBLE_CLICK_MS","inputRef","fileInputKeyLocal","blockDoubleClick","clickInput","validateData","checked","onDropzoneDrop","onInputFileChange","payload","onFileDropzoneClick","ImageWidgetExtSystemConfig","apiUpdateOne","apiDeleteOne","SYSTEM_CMS","fetchImageListByIds","fetchImage","createImage","updateImage","deleteImage","bulkUpdateImages","updateImagesSequence","images","reqData","imageClient","widgetImageToDamImageUrl","resImage","resolvedSrc","newImage","newImageId","useImageStore","imageDetail","maxPosition","setImageDetail","setImages","addImages","updateMaxPositionIfGreater","newPosition","removeImageByIndex","ADamAssetMetadataValidationScopeSymbol","AImageMetadataValidationScopeSymbol","ADamKeywordCreateValidationScopeSymbol","ADamAuthorCreateValidationScopeSymbol","useImageValidation","validationScope","imageStore","onDialogModelUpdate","onEditAsset","AssetDetailTabImageWithRoi","useAssetDetailStore","authorConflicts","metadataAreTouched","activeTab","updateUploadStore","setAsset","MINUTE_IN_SECONDS","HOUR_IN_SECONDS","DAY_IN_SECONDS","useRemainingTime","remainingTime","short","prefix","svg2k","svg4k","svg8k","svgqhd","svgfhd","svgslot","svglow","svgrss","DIMENSIONS_CONFIG","ICON_SLOTS","ICON_RSS","ICON_LOW","LOW_DIMENSION","checkDimensions","icons","titles","checkDistributions","iconPath","onLoad","uploadingPercentage","backgroundColorComputed","iconColor","remainingTimeShort","useAssetFileFailReason","assetFileFailReasonOptions","getAssetFileFailReasonOption","reasonOption","CLASS_PREFIX","mountedDivClasses","useAssetDetailSidebarActionbar","uploadKey","mounted","unMounted","canTeleport","divClassName","elements","pinnedCount","getCachedAuthor","displayNewIcon","clickClose","useAuthorSelectActions","mapToMinimal","mapToValueObject","mapToValueObjects","authors","mapToMinimals","useAuthorFilter","DamAuthorType","useDamAuthorType","authorTypeOptions","useAuthorValidation","useDamAuthorFactory","reviewed","fetchItemsMinimal","addAuthor","addNewAuthorText","searchChange","addManualToCachedAuthors","afterCreate","itemSlotIsSelected","useKeywordSelectActions","keywords","useKeywordFilter","getCachedKeyword","useDamKeywordFactory","useKeywordValidation","addNewKeywordText","addManualToCachedKeywords","panels","assetDetailStore","isTypeImage","assetMainFile","onAnyMetadataChange","uploadQueueStore","saveButtonLoading","onSave","useImageRoiStore","roi","rotate","END_POINT_IMAGE_ROI","fetchRoi","updateRoi","fetchImageRoiList","imageRoiStore","loadRois","afterRotate","PRECISION","regionToCrop","cropper","regionOfInterest","originalImageWidth","originalImageHeight","imageData","ratio","cropToRegion","pointX","pointY","percentageWidth","validateWidth","percentageHeight","validateHeight","_defineProperties","_toPropertyKey","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","iter","minLen","arr2","_toPrimitive","hint","prim","IS_BROWSER","WINDOW","IS_TOUCH_DEVICE","HAS_POINTER_EVENT","NAMESPACE","ACTION_ALL","ACTION_CROP","ACTION_MOVE","ACTION_ZOOM","ACTION_EAST","ACTION_WEST","ACTION_SOUTH","ACTION_NORTH","ACTION_NORTH_EAST","ACTION_NORTH_WEST","ACTION_SOUTH_EAST","ACTION_SOUTH_WEST","CLASS_CROP","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","DRAG_MODE_CROP","DRAG_MODE_MOVE","DRAG_MODE_NONE","EVENT_CROP","EVENT_CROP_END","EVENT_CROP_MOVE","EVENT_CROP_START","EVENT_DBLCLICK","EVENT_TOUCH_START","EVENT_TOUCH_MOVE","EVENT_TOUCH_END","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_READY","EVENT_RESIZE","EVENT_WHEEL","EVENT_ZOOM","MIME_TYPE_JPEG","REGEXP_ACTIONS","REGEXP_DATA_URL","REGEXP_DATA_URL_JPEG","REGEXP_TAG_NAME","MIN_CONTAINER_WIDTH","MIN_CONTAINER_HEIGHT","DEFAULTS","TEMPLATE","isNaN","isPositiveNumber","hasOwnProperty","isPlainObject","_constructor","prototype","slice","toArray","forEach","assign","REGEXP_DECIMALS","normalizeDecimalNumber","times","REGEXP_SUFFIX","setStyle","styles","hasClass","addClass","removeClass","added","REGEXP_CAMEL_CASE","toParamCase","getData","setData","removeData","REGEXP_SPACES","onceSupported","supported","once","listener","removeListener","listeners","addListener","_handler","_element$listeners","_len2","_key2","getOffset","box","location","REGEXP_ORIGINS","isCrossOriginURL","parts","addTimestamp","getTransforms","getMaxZoomRatio","pointers","pointers2","maxRatio","pointer","pointerId","pointer2","x1","y1","x2","y2","z1","z2","getPointer","endOnly","pageX","pageY","end","getPointersCenter","startX","startY","getAdjustedSizes","aspectRatio","isValidWidth","isValidHeight","adjustedWidth","getRotatedSizes","_ref5","degree","arc","sinArc","cosArc","newWidth","newHeight","getSourceCanvas","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","imageNaturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","naturalWidth","naturalHeight","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","maxWidth","_ref8$maxHeight","maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","canvas","context","minSizes","destMaxSizes","destMinSizes","destWidth","destHeight","param","fromCharCode","getStringFromCharCode","dataView","REGEXP_DATA_URL_HEAD","dataURLToArrayBuffer","dataURL","base64","binary","uint8","arrayBufferToDataURL","chunks","resetAndGetOrientation","orientation","littleEndian","app1Start","ifdStart","exifIDCode","tiffOffset","endianness","firstIFDOffset","_length","_offset","parseOrientation","render","containerData","viewMode","rotated","canvasWidth","canvasHeight","canvasData","sizeLimited","positionLimited","cropBoxData","cropped","minCanvasWidth","minCanvasHeight","_getAdjustedSizes","newCanvasLeft","newCanvasTop","transformed","_getRotatedSizes","autoCropArea","limited","minCropBoxWidth","minCropBoxHeight","maxCropBoxWidth","maxCropBoxHeight","preview","crossOrigin","alt","previews","img","cropBoxWidth","cropBoxHeight","originalWidth","originalHeight","events","handlers","ratioX","ratioY","buttons","button","action","change","minLeft","minTop","renderable","side","methods","hasSameSize","offsetX","offsetY","_this$canvasData","_originalEvent","pivot","center","_scaleX","_scaleY","rounded","widthChanged","heightChanged","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","sourceWidth","sourceHeight","srcX","srcY","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","scale","mode","dragBox","face","croppable","movable","AnotherCropper","Cropper","xhr","_parseOrientation","crossOriginUrl","_this2","isIOSWebKit","sizingImage","body","cropBox","parentNode","cropperInstance","imgEl","enable","disable","containerStyle","imgStyle","propsOptions","onUnmounted","DAM_IMAGE_ASPECT_RATIO","cropperContainerStyle","imageUrl","enableCropper","disableCropper","applyRegionOfInterest","saveRoi","cropperReady","cropperEnd","showCropper","sidebar","onImageLoad","isTypeVideo","isTypeAudio","isTypeDocument","toolbarTitle","uploadQueueDialog","uploadQueueSidebar","useUploadQueueDialog","onSaveAndApply","IMAGE_ASPECT_RATIO","assetDetail","enableRoiTab","isDone","processing","waiting","showDone","uploading","uploadProgress","onStopConfirm","queueTotalCount","queueProcessedCount","isUploading","description","assetsMetadataRes","imageWidgetExtSystemConfig","clickMenuOpened","assetSelectDialog","metadataDialog","metadataDialogSaving","metadataDialogLoading","withoutImage","uploadQueue","enabledInteractionComputed","imageLoaded","actionEditMeta","actionLibrary","onFileInput","reload","force","onAssetSelectConfirm","assetLoading","assetDialog","onMetadataDialogClose","onMetadataDialogConfirm","onImageDelete","onAssetUploadConfirm","expandedUploadButton","onDropzoneClick","removeItem","customData","imageSrc","cancelItem","showCancel","showDetail","fillEmptyField","elementProperty","replaceField","useUploadQueueMassOperations","forceReplace","massOperationsData","massOperationsKeywords","massOperationsAuthors","replaceEmptyCustomDataValue","replaceEmptyAuthors","replaceEmptyKeywords","fillEmptyKeywords","replaceKeywords","fillEmptyAuthors","replaceAuthors","fillAll","clearForm","assetTypes","toggleUploadQueueSidebar","isFinished","saveAndCloseButtonLoading","itemsRaw","metadataMap","queueItems","assetMetadataMap","authorIdsToFetch","authorsMap","bulkItem","assetMeta","authorId","authorNames","mapped","uploadButtonComponent","imagesLoading","fetchImagesOnLoad","imagesRes","imageRes","assetSelectConfirmMap","saveImages","resItems","resItem","updateAllPositions","pos","moveImagePositions","innerComponent","resImages","newImages","newImageIds","DATETIME_AUTO_LABEL_TRACKING","defaultColumn","createDatatableColumnsConfig","columnsHidden","disableActions","customPagination","customI18n","localI18n","columnsAll","columnsVisible","columns","column","useSubjectSelect","datatableConfig","datatableHiddenColumns","selected","updateSortBy","resetState","getList","sortByChange","onFetchNextPage","firstTd","generateDatatableMinMaxSelectStrategy","booleanToInteger","useAnzuUserFactory","resourceName","_system","_resourceName","usePermissionConfigFactory","usePermissionGroupFactory","apiAnyRequest","method","axiosConfig","generateListApiQueryWithoutPagination","rowsPerPage","orderField","orderDesc","apiFetchListBatch","sortDesc","batchSize","forceElastic","urlPart","results","nextPageData","numPages","pageResponse","useErrors","useJobApi","JOB_RESOURCE_USER_DATA_DELETE","useJobBaseResource","customJobs","jobResourceOptions","AnzuSystemsCommonAdmin","app","Acl","Notification","arrayItemToggle","arrayToString","arrayFromArgs","arrayFlatten","arraysHaveSameElements","array1","array2","sortedArray1","sortedArray2","browserHistoryReplaceUrlByString","browserHistoryReplaceUrlByRouter","resolved","alert","anzuUser","job","log","permissionGroup","assetSelect","subjectSelect","damImage","vuetify","apiValidation","apiForbiddenOperation","jsValidation","en","useCommonVuetifyConfig","VBtn","VChip","loadCommonFonts","useCommonJobFactory","createBase","useLoginStatus","isStatusNotDefined","isStatusLoginSuccess","isStatusSsoCommunicationFailure","isStatusInternalErrorFailure","isStatusUnauthorized"],"mappings":"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","x_google_ignoreList":[13,24,25,47,48,49,50,51,52,53,54,55,56,57,58,59,60,146,147,148,149,150,151,152,191,260]}
|