@anzusystems/common-admin 1.40.0-alpha2 → 1.40.0-alpha21
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 +1177 -104
- package/dist/common-admin.es.js +234 -220
- package/dist/lib-0Uo9u2yO.js +22782 -0
- package/dist/lib-0Uo9u2yO.js.map +1 -0
- package/dist/{shortcut-buttons-flatpickr-kO3ccQIk.js → shortcut-buttons-flatpickr-q_Sj_p8S.js} +2 -2
- package/dist/{shortcut-buttons-flatpickr-kO3ccQIk.js.map → shortcut-buttons-flatpickr-q_Sj_p8S.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{webfontloader-PblqnHWA.js → webfontloader-lQaPC7Q5.js} +2 -2
- package/dist/{webfontloader-PblqnHWA.js.map → webfontloader-lQaPC7Q5.js.map} +1 -1
- package/package.json +19 -19
- package/dist/lib-h8PEdYwt.js +0 -21678
- package/dist/lib-h8PEdYwt.js.map +0 -1
package/dist/lib-h8PEdYwt.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lib-h8PEdYwt.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","../node_modules/js-sha1/src/sha1.js","../src/components/damImage/uploadQueue/composables/damUploadChunkSize.ts","../src/components/damImage/uploadQueue/api/damImageApi.ts","../src/components/damImage/uploadQueue/api/uploadApi.ts","../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/AuthorType.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","../node_modules/cropperjs/dist/cropper.js","../node_modules/vue-cropperjs/dist/VueCropper.js","../src/components/damImage/uploadQueue/composables/cropperJsService.ts","../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/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 $, openBlock as l, createBlock as A, TransitionGroup as z, withCtx as I, renderSlot as b, ref as T, computed as g, onMounted as ct, createElementBlock as m, normalizeStyle as M, resolveDynamicComponent as ut, Fragment as D, renderList as ft, normalizeClass as R, createElementVNode as E, createCommentVNode as V, toDisplayString as Y } from \"vue\";\nconst F = /* @__PURE__ */ new Map();\nclass pt {\n constructor(o, n, s) {\n this.remaining = n, this.callback = o, this.notifyItem = s, 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 dt(e) {\n return { all: e = e || /* @__PURE__ */ new Map(), on: function(o, n) {\n var s = e.get(o);\n s ? s.push(n) : e.set(o, [n]);\n }, off: function(o, n) {\n var s = e.get(o);\n s && (n ? s.splice(s.indexOf(n) >>> 0, 1) : e.set(o, []));\n }, emit: function(o, n) {\n var s = e.get(o);\n s && s.slice().map(function(r) {\n r(n);\n }), (s = e.get(\"*\")) && s.slice().map(function(r) {\n r(o, n);\n });\n } };\n}\nconst x = dt(), w = \"[-+]?[0-9]*.?[0-9]+\", G = [\n {\n name: \"px\",\n regexp: new RegExp(`^${w}px$`)\n },\n {\n name: \"%\",\n regexp: new RegExp(`^${w}%$`)\n },\n /**\n * Fallback option\n * If no suffix specified, assigning \"px\"\n */\n {\n name: \"px\",\n regexp: new RegExp(`^${w}$`)\n }\n], mt = (e) => {\n if (e === \"auto\")\n return {\n type: e,\n value: 0\n };\n for (let o = 0; o < G.length; o++) {\n const n = G[o];\n if (n.regexp.test(e))\n return {\n type: n.name,\n value: parseFloat(e)\n };\n }\n return {\n type: \"\",\n value: e\n };\n}, yt = (e) => {\n switch (typeof e) {\n case \"number\":\n return { type: \"px\", value: e };\n case \"string\":\n return mt(e);\n default:\n return { type: \"\", value: e };\n }\n}, j = {\n x: /* @__PURE__ */ new Set([\"left\", \"center\", \"right\"]),\n y: /* @__PURE__ */ new Set([\"top\", \"bottom\"])\n}, ht = ((e) => () => e++)(0), gt = (e) => typeof e != \"string\" ? [] : e.split(/\\s+/gi).filter(Boolean), vt = (e) => {\n typeof e == \"string\" && (e = gt(e));\n let o = null, n = null;\n return e.forEach((s) => {\n j.y.has(s) && (n = s), j.x.has(s) && (o = s);\n }), { x: o, y: n };\n}, k = {\n position: [\"top\", \"right\"],\n cssAnimation: \"vn-fade\",\n velocityAnimation: {\n enter: (e) => ({\n height: [e.clientHeight, 0],\n opacity: [1, 0]\n }),\n leave: {\n height: 0,\n opacity: [0, 1]\n }\n }\n}, _t = /* @__PURE__ */ $({\n __name: \"VelocityGroup\",\n emits: [\"enter\", \"leave\", \"after-leave\"],\n setup(e, { emit: o }) {\n const n = (c, f) => {\n o(\"enter\", c, f);\n }, s = (c, f) => {\n o(\"leave\", c, f);\n }, r = () => {\n o(\"after-leave\");\n };\n return (c, f) => (l(), A(z, {\n tag: \"span\",\n css: !1,\n onEnter: n,\n onLeave: s,\n onAfterLeave: r\n }, {\n default: I(() => [\n b(c.$slots, \"default\")\n ]),\n _: 3\n }));\n }\n}), xt = /* @__PURE__ */ $({\n inheritAttrs: !1,\n __name: \"CssGroup\",\n props: {\n name: {}\n },\n setup(e) {\n return (o, n) => (l(), A(z, {\n tag: \"span\",\n name: o.name\n }, {\n default: I(() => [\n b(o.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"name\"]));\n }\n}), Tt = [\"data-id\"], Dt = [\"onClick\"], Et = [\"innerHTML\"], wt = [\"innerHTML\"], kt = {\n key: 0,\n class: \"notification-title\"\n}, $t = { class: \"notification-content\" }, At = /* @__PURE__ */ $({\n __name: \"Notifications\",\n props: {\n group: { default: \"\" },\n width: { default: 300 },\n reverse: { type: Boolean, default: !1 },\n position: { default: k.position },\n classes: { default: \"vue-notification\" },\n animationType: { default: \"css\" },\n animation: { default: k.velocityAnimation },\n animationName: { default: k.cssAnimation },\n speed: { default: 300 },\n duration: { default: 3e3 },\n delay: { default: 0 },\n max: { default: 1 / 0 },\n ignoreDuplicates: { type: Boolean, default: !1 },\n closeOnClick: { type: Boolean, default: !0 },\n pauseOnHover: { type: Boolean, default: !1 },\n dangerouslySetInnerHtml: { type: Boolean, default: !1 }\n },\n emits: [\"click\", \"destroy\", \"start\"],\n setup(e, { emit: o }) {\n const n = e, s = {\n IDLE: 0,\n DESTROYED: 2\n }, r = T([]), c = T(null), f = T(F.get(\"velocity\")), v = g(() => n.animationType === \"velocity\"), W = g(() => v.value ? _t : xt), p = g(() => r.value.filter((t) => t.state !== s.DESTROYED)), S = g(() => yt(n.width)), C = g(() => {\n const { x: t, y: a } = vt(n.position), i = S.value.value, u = S.value.type, h = {\n width: i + u\n };\n return a && (h[a] = \"0px\"), t && (t === \"center\" ? h.left = `calc(50% - ${+i / 2}${u})` : h[t] = \"0px\"), h;\n }), O = g(() => \"bottom\" in C.value), P = (t) => {\n o(\"click\", t), n.closeOnClick && y(t);\n }, q = () => {\n var t;\n n.pauseOnHover && ((t = c.value) == null || t.pause());\n }, J = () => {\n var t;\n n.pauseOnHover && ((t = c.value) == null || t.resume());\n }, K = (t = {}) => {\n if (t.group || (t.group = \"\"), t.data || (t.data = {}), n.group !== t.group)\n return;\n if (t.clean || t.clear) {\n tt();\n return;\n }\n const a = typeof t.duration == \"number\" ? t.duration : n.duration, i = typeof t.speed == \"number\" ? t.speed : n.speed, u = typeof t.ignoreDuplicates == \"boolean\" ? t.ignoreDuplicates : n.ignoreDuplicates, { title: h, text: ot, type: it, data: st, id: at } = t, d = {\n id: at || ht(),\n title: h,\n text: ot,\n type: it,\n state: s.IDLE,\n speed: i,\n length: a + 2 * i,\n data: st\n };\n a >= 0 && (c.value = new pt(() => y(d), d.length, d));\n const rt = n.reverse ? !O.value : O.value;\n let _ = -1;\n const lt = p.value.some((N) => N.title === t.title && N.text === t.text);\n (!u || !lt) && (rt ? (r.value.push(d), o(\"start\", d), p.value.length > n.max && (_ = 0)) : (r.value.unshift(d), o(\"start\", d), p.value.length > n.max && (_ = p.value.length - 1)), _ !== -1 && y(p.value[_]));\n }, Q = (t) => {\n Z(t);\n }, U = (t) => [\n \"vue-notification-template\",\n n.classes,\n t.type || \"\"\n ], X = (t) => v.value ? void 0 : { transition: `all ${t.speed}ms` }, y = (t) => {\n clearTimeout(t.timer), t.state = s.DESTROYED, H(), o(\"destroy\", t);\n }, Z = (t) => {\n const a = r.value.find((i) => i.id === t);\n a && y(a);\n }, tt = () => {\n p.value.forEach(y);\n }, B = (t, a) => {\n var u;\n const i = (u = n.animation) == null ? void 0 : u[t];\n return typeof i == \"function\" ? i(a) : i;\n }, et = (t, a) => {\n if (!v.value)\n return;\n const i = B(\"enter\", t);\n f.value(t, i, {\n duration: n.speed,\n complete: a\n });\n }, nt = (t, a) => {\n if (!v.value)\n return;\n const i = B(\"leave\", t);\n f.value(t, i, {\n duration: n.speed,\n complete: a\n });\n };\n function H() {\n r.value = r.value.filter((t) => t.state !== s.DESTROYED);\n }\n return ct(() => {\n x.on(\"add\", K), x.on(\"close\", Q);\n }), (t, a) => (l(), m(\"div\", {\n class: \"vue-notification-group\",\n style: M(C.value)\n }, [\n (l(), A(ut(W.value), {\n name: t.animationName,\n onEnter: et,\n onLeave: nt,\n onAfterLeave: H\n }, {\n default: I(() => [\n (l(!0), m(D, null, ft(p.value, (i) => (l(), m(\"div\", {\n key: i.id,\n class: \"vue-notification-wrapper\",\n style: M(X(i)),\n \"data-id\": i.id,\n onMouseenter: q,\n onMouseleave: J\n }, [\n b(t.$slots, \"body\", {\n class: R([t.classes, i.type]),\n item: i,\n close: () => y(i)\n }, () => [\n E(\"div\", {\n class: R(U(i)),\n onClick: (u) => P(i)\n }, [\n t.dangerouslySetInnerHtml ? (l(), m(D, { key: 0 }, [\n i.title ? (l(), m(\"div\", {\n key: 0,\n class: \"notification-title\",\n innerHTML: i.title\n }, null, 8, Et)) : V(\"\", !0),\n E(\"div\", {\n class: \"notification-content\",\n innerHTML: i.text\n }, null, 8, wt)\n ], 64)) : (l(), m(D, { key: 1 }, [\n i.title ? (l(), m(\"div\", kt, Y(i.title), 1)) : V(\"\", !0),\n E(\"div\", $t, Y(i.text), 1)\n ], 64))\n ], 10, Dt)\n ])\n ], 44, Tt))), 128))\n ]),\n _: 3\n }, 40, [\"name\"]))\n ], 4));\n }\n});\nconst L = (e) => {\n typeof e == \"string\" && (e = { title: \"\", text: e }), typeof e == \"object\" && x.emit(\"add\", e);\n};\nL.close = (e) => {\n x.emit(\"close\", e);\n};\nconst St = () => ({ notify: L });\nfunction It(e, o = {}) {\n Object.entries(o).forEach((s) => F.set(...s));\n const n = o.name || \"notify\";\n e.config.globalProperties[\"$\" + n] = L, e.component(o.componentName || \"Notifications\", At);\n}\nconst Ct = {\n install: It\n};\nexport {\n Ct as default,\n L as notify,\n St 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/dist/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.damPrvConfig = 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 console.log(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,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ADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////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/7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nh+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","/*\n * [js-sha1]{@link https://github.com/emn178/js-sha1}\n *\n * @version 0.6.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n/*jslint bitwise: true */\n(function() {\n 'use strict';\n\n var root = typeof window === 'object' ? window : {};\n var NODE_JS = !root.JS_SHA1_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n }\n var COMMON_JS = !root.JS_SHA1_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [-2147483648, 8388608, 32768, 128];\n var SHIFT = [24, 16, 8, 0];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];\n\n var blocks = [];\n\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Sha1(true).update(message)[outputType]();\n };\n };\n\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Sha1();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('sha1').update(message, 'utf8').digest('hex');\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (message.length === undefined) {\n return method(message);\n }\n return crypto.createHash('sha1').update(new Buffer(message)).digest('hex');\n };\n return nodeMethod;\n };\n\n function Sha1(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n\n this.h0 = 0x67452301;\n this.h1 = 0xEFCDAB89;\n this.h2 = 0x98BADCFE;\n this.h3 = 0x10325476;\n this.h4 = 0xC3D2E1F0;\n\n this.block = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n Sha1.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n var notString = typeof(message) !== 'string';\n if (notString && message.constructor === root.ArrayBuffer) {\n message = new Uint8Array(message);\n }\n var code, index = 0, i, length = message.length || 0, blocks = this.blocks;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if(notString) {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.block = blocks[16];\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Sha1.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[16] = this.block;\n blocks[i >> 2] |= EXTRA[i & 3];\n this.block = blocks[16];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.hBytes << 3 | this.bytes >>> 29;\n blocks[15] = this.bytes << 3;\n this.hash();\n };\n\n Sha1.prototype.hash = function () {\n var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4;\n var f, j, t, blocks = this.blocks;\n\n for(j = 16; j < 80; ++j) {\n t = blocks[j - 3] ^ blocks[j - 8] ^ blocks[j - 14] ^ blocks[j - 16];\n blocks[j] = (t << 1) | (t >>> 31);\n }\n\n for(j = 0; j < 20; j += 5) {\n f = (b & c) | ((~b) & d);\n t = (a << 5) | (a >>> 27);\n e = t + f + e + 1518500249 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = (a & b) | ((~a) & c);\n t = (e << 5) | (e >>> 27);\n d = t + f + d + 1518500249 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = (e & a) | ((~e) & b);\n t = (d << 5) | (d >>> 27);\n c = t + f + c + 1518500249 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = (d & e) | ((~d) & a);\n t = (c << 5) | (c >>> 27);\n b = t + f + b + 1518500249 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = (c & d) | ((~c) & e);\n t = (b << 5) | (b >>> 27);\n a = t + f + a + 1518500249 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 40; j += 5) {\n f = b ^ c ^ d;\n t = (a << 5) | (a >>> 27);\n e = t + f + e + 1859775393 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = a ^ b ^ c;\n t = (e << 5) | (e >>> 27);\n d = t + f + d + 1859775393 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = e ^ a ^ b;\n t = (d << 5) | (d >>> 27);\n c = t + f + c + 1859775393 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = d ^ e ^ a;\n t = (c << 5) | (c >>> 27);\n b = t + f + b + 1859775393 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = c ^ d ^ e;\n t = (b << 5) | (b >>> 27);\n a = t + f + a + 1859775393 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 60; j += 5) {\n f = (b & c) | (b & d) | (c & d);\n t = (a << 5) | (a >>> 27);\n e = t + f + e - 1894007588 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = (a & b) | (a & c) | (b & c);\n t = (e << 5) | (e >>> 27);\n d = t + f + d - 1894007588 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = (e & a) | (e & b) | (a & b);\n t = (d << 5) | (d >>> 27);\n c = t + f + c - 1894007588 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = (d & e) | (d & a) | (e & a);\n t = (c << 5) | (c >>> 27);\n b = t + f + b - 1894007588 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = (c & d) | (c & e) | (d & e);\n t = (b << 5) | (b >>> 27);\n a = t + f + a - 1894007588 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 80; j += 5) {\n f = b ^ c ^ d;\n t = (a << 5) | (a >>> 27);\n e = t + f + e - 899497514 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = a ^ b ^ c;\n t = (e << 5) | (e >>> 27);\n d = t + f + d - 899497514 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = e ^ a ^ b;\n t = (d << 5) | (d >>> 27);\n c = t + f + c - 899497514 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = d ^ e ^ a;\n t = (c << 5) | (c >>> 27);\n b = t + f + b - 899497514 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = c ^ d ^ e;\n t = (b << 5) | (b >>> 27);\n a = t + f + a - 899497514 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n this.h4 = this.h4 + e << 0;\n };\n\n Sha1.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4;\n\n return HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +\n HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +\n HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +\n HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F];\n };\n\n Sha1.prototype.toString = Sha1.prototype.hex;\n\n Sha1.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4;\n\n return [\n (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,\n (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,\n (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,\n (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,\n (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF\n ];\n };\n\n Sha1.prototype.array = Sha1.prototype.digest;\n\n Sha1.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(20);\n var dataView = new DataView(buffer);\n dataView.setUint32(0, this.h0);\n dataView.setUint32(4, this.h1);\n dataView.setUint32(8, this.h2);\n dataView.setUint32(12, this.h3);\n dataView.setUint32(16, this.h4);\n return buffer;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n root.sha1 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\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","import { ref } from 'vue'\nimport sha1 from 'js-sha1'\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'\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 assetAlgo = sha1.create()\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 = 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 assetAlgo.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, assetAlgo.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// export const updateKeyword = (id: string, data: DamKeyword) =>\n// apiUpdateOne<DamKeyword>(damClient, data, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n//\n// export const fetchKeyword = (id: string) =>\n// apiFetchOne<DamKeyword>(damClient, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\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// export const updateAuthor = (id: string, data: DamAuthor) =>\n// apiUpdateOne<DamAuthor>(damClient, data, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n//\n// export const fetchAuthor = (id: string) =>\n// apiFetchOne<DamAuthor>(damClient, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\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</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'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerIdNullable | undefined\n image?: ImageAware | ImageCreateUpdateAware | undefined // 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 }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n width: undefined,\n disableAspectRatio: false,\n aspectRatio: 1.777, // 16/9\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\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 return\n }\n return\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 <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'\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(false)\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 { readonly, ref } from 'vue'\n\nconst buttonsDiv = ref(false)\n\nexport function useAssetDetailSidebarActionbar() {\n const mounted = () => {\n buttonsDiv.value = true\n }\n\n const unMounted = () => {\n buttonsDiv.value = false\n }\n\n return {\n canTeleport: readonly(buttonsDiv),\n mounted,\n unMounted,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useAssetDetailSidebarActionbar } from '@/components/damImage/uploadQueue/composables/assetDetailSidebarActionbar'\n\nconst { canTeleport } = useAssetDetailSidebarActionbar()\n</script>\n\n<template>\n <Teleport\n v-if=\"canTeleport\"\n to=\"#anzu-asset-detail-sidebar-actions\"\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 AuthorType {\n None = 'none',\n Internal = 'internal',\n External = 'external',\n Agency = 'agency',\n Default = None,\n}\n\nexport function useAuthorType() {\n const { t } = useI18n()\n\n const authorTypeOptions = ref<ValueObjectOption<AuthorType>[]>([\n {\n value: AuthorType.None,\n title: t('common.damImage.author.authorType.none'),\n },\n {\n value: AuthorType.Internal,\n title: t('common.damImage.author.authorType.internal'),\n },\n {\n value: AuthorType.External,\n title: t('common.damImage.author.authorType.external'),\n },\n {\n value: AuthorType.Agency,\n title: t('common.damImage.author.authorType.agency'),\n },\n ])\n\n const getAuthorTypeOption = (value: AuthorType) => {\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 { AuthorType } from '@/components/damImage/uploadQueue/author/AuthorType'\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 useAuthorFactory() {\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: AuthorType.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 { useAuthorType } from '@/components/damImage/uploadQueue/author/AuthorType'\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 { useAuthorFactory } 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 } = useAuthorFactory()\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 } = useAuthorType()\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 useKeywordFactory() {\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 { useKeywordFactory } 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 } = useKeywordFactory()\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'\n\nwithDefaults(\n defineProps<{\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 v-if=\"isActive\">\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'\n\nwithDefaults(\n defineProps<{\n isActive: boolean\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 v-if=\"isActive\">\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'\n\nconst { mounted, unMounted } = useAssetDetailSidebarActionbar()\n\nonMounted(async () => {\n await nextTick()\n mounted()\n})\n\nonBeforeUnmount(() => {\n unMounted()\n})\n</script>\n\n<template>\n <div id=\"anzu-asset-detail-sidebar-actions\" />\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'\n\nwithDefaults(\n defineProps<{\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 :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 :is-active=\"activeTab === AssetDetailTabImageWithRoi.ROI\" />\n </div>\n </div>\n <div class=\"sidebar-info__actions px-2\">\n <AssetDetailSidebarActionsTeleportTarget />\n </div>\n </div>\n </div>\n</template>\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\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Cropper = factory());\n})(this, (function () { 'use strict';\n\n function 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 }\n function _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 }\n function _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 }\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n function _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 }\n function _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 }\n function _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 }\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n function _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 }\n function _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 }\n function _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 function _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 }\n function _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n }\n\n var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var WINDOW = IS_BROWSER ? window : {};\n var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n var NAMESPACE = 'cropper';\n\n // Actions\n var ACTION_ALL = 'all';\n var ACTION_CROP = 'crop';\n var ACTION_MOVE = 'move';\n var ACTION_ZOOM = 'zoom';\n var ACTION_EAST = 'e';\n var ACTION_WEST = 'w';\n var ACTION_SOUTH = 's';\n var ACTION_NORTH = 'n';\n var ACTION_NORTH_EAST = 'ne';\n var ACTION_NORTH_WEST = 'nw';\n var ACTION_SOUTH_EAST = 'se';\n var ACTION_SOUTH_WEST = 'sw';\n\n // Classes\n var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n // Data keys\n var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n // Drag modes\n var DRAG_MODE_CROP = 'crop';\n var DRAG_MODE_MOVE = 'move';\n var DRAG_MODE_NONE = 'none';\n\n // Events\n var EVENT_CROP = 'crop';\n var EVENT_CROP_END = 'cropend';\n var EVENT_CROP_MOVE = 'cropmove';\n var EVENT_CROP_START = 'cropstart';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n var EVENT_READY = 'ready';\n var EVENT_RESIZE = 'resize';\n var EVENT_WHEEL = 'wheel';\n var EVENT_ZOOM = 'zoom';\n\n // Mime types\n var MIME_TYPE_JPEG = 'image/jpeg';\n\n // RegExps\n var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n var REGEXP_DATA_URL = /^data:/;\n var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n var REGEXP_TAG_NAME = /^img|canvas$/i;\n\n // Misc\n // Inspired by the default width and height of a canvas element.\n var MIN_CONTAINER_WIDTH = 200;\n var MIN_CONTAINER_HEIGHT = 100;\n\n var 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\n var 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 */\n var 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 */\n function 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 */\n var 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 */\n function 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 */\n function isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n }\n var 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 */\n function 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 */\n function isFunction(value) {\n return typeof value === 'function';\n }\n var 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 */\n function 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 */\n function 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 */\n var 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 };\n var 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 */\n function 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 }\n var 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 }\n var 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 }\n var REGEXP_SPACES = /\\s\\s*/;\n var 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 }\n var location = WINDOW.location;\n var 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 }\n var 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 */\n function 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 }\n var 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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\n var 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\n var 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\n var 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\n var 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\n var 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\n var 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\n var AnotherCropper = WINDOW.Cropper;\n var 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 }();\n assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\n return Cropper;\n\n}));\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _vue = require('vue');\n\nvar _cropperjs = require('cropperjs');\n\nvar _cropperjs2 = _interopRequireDefault(_cropperjs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar previewPropType = typeof window === 'undefined' ? [String, Array] : [String, Array, Element, NodeList];\n\nexports.default = {\n render: function render() {\n var crossorigin = this.crossorigin || undefined;\n\n return (0, _vue.h)('div', { style: this.containerStyle }, [(0, _vue.h)('img', {\n ref: 'img',\n src: this.src,\n alt: this.alt || 'image',\n style: [{ 'max-width': '100%' }, this.imgStyle],\n crossorigin: crossorigin\n })]);\n },\n\n props: {\n containerStyle: Object,\n src: {\n type: String,\n default: ''\n },\n alt: String,\n imgStyle: Object,\n\n viewMode: Number,\n dragMode: String,\n initialAspectRatio: Number,\n aspectRatio: Number,\n data: Object,\n preview: previewPropType,\n responsive: {\n type: Boolean,\n default: true\n },\n restore: {\n type: Boolean,\n default: true\n },\n checkCrossOrigin: {\n type: Boolean,\n default: true\n },\n checkOrientation: {\n type: Boolean,\n default: true\n },\n crossorigin: {\n type: String\n },\n modal: {\n type: Boolean,\n default: true\n },\n guides: {\n type: Boolean,\n default: true\n },\n center: {\n type: Boolean,\n default: true\n },\n highlight: {\n type: Boolean,\n default: true\n },\n background: {\n type: Boolean,\n default: true\n },\n autoCrop: {\n type: Boolean,\n default: true\n },\n autoCropArea: Number,\n movable: {\n type: Boolean,\n default: true\n },\n rotatable: {\n type: Boolean,\n default: true\n },\n scalable: {\n type: Boolean,\n default: true\n },\n zoomable: {\n type: Boolean,\n default: true\n },\n zoomOnTouch: {\n type: Boolean,\n default: true\n },\n zoomOnWheel: {\n type: Boolean,\n default: true\n },\n wheelZoomRatio: Number,\n cropBoxMovable: {\n type: Boolean,\n default: true\n },\n cropBoxResizable: {\n type: Boolean,\n default: true\n },\n toggleDragModeOnDblclick: {\n type: Boolean,\n default: true\n },\n\n minCanvasWidth: Number,\n minCanvasHeight: Number,\n minCropBoxWidth: Number,\n minCropBoxHeight: Number,\n minContainerWidth: Number,\n minContainerHeight: Number,\n\n ready: Function,\n cropstart: Function,\n cropmove: Function,\n cropend: Function,\n crop: Function,\n zoom: Function\n },\n mounted: function mounted() {\n var _$options$props = this.$options.props,\n containerStyle = _$options$props.containerStyle,\n src = _$options$props.src,\n alt = _$options$props.alt,\n imgStyle = _$options$props.imgStyle,\n data = _objectWithoutProperties(_$options$props, ['containerStyle', 'src', 'alt', 'imgStyle']);\n\n var props = {};\n\n for (var key in data) {\n if (this[key] !== undefined) {\n props[key] = this[key];\n }\n }\n\n this.cropper = new _cropperjs2.default(this.$refs.img, props);\n },\n\n methods: {\n reset: function reset() {\n return this.cropper.reset();\n },\n clear: function clear() {\n return this.cropper.clear();\n },\n initCrop: function initCrop() {\n return this.cropper.crop();\n },\n replace: function replace(url) {\n var onlyColorChanged = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n return this.cropper.replace(url, onlyColorChanged);\n },\n enable: function enable() {\n return this.cropper.enable();\n },\n disable: function disable() {\n return this.cropper.disable();\n },\n destroy: function destroy() {\n return this.cropper.destroy();\n },\n move: function move(offsetX, offsetY) {\n return this.cropper.move(offsetX, offsetY);\n },\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n\n return this.cropper.moveTo(x, y);\n },\n relativeZoom: function relativeZoom(ratio, _originalEvent) {\n return this.cropper.zoom(ratio, _originalEvent);\n },\n zoomTo: function zoomTo(ratio, _originalEvent) {\n return this.cropper.zoomTo(ratio, _originalEvent);\n },\n rotate: function rotate(degree) {\n return this.cropper.rotate(degree);\n },\n rotateTo: function rotateTo(degree) {\n return this.cropper.rotateTo(degree);\n },\n scaleX: function scaleX(_scaleX) {\n return this.cropper.scaleX(_scaleX);\n },\n scaleY: function scaleY(_scaleY) {\n return this.cropper.scaleY(_scaleY);\n },\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n\n return this.cropper.scale(scaleX, scaleY);\n },\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n return this.cropper.getData(rounded);\n },\n setData: function setData(data) {\n return this.cropper.setData(data);\n },\n getContainerData: function getContainerData() {\n return this.cropper.getContainerData();\n },\n getImageData: function getImageData() {\n return this.cropper.getImageData();\n },\n getCanvasData: function getCanvasData() {\n return this.cropper.getCanvasData();\n },\n setCanvasData: function setCanvasData(data) {\n return this.cropper.setCanvasData(data);\n },\n getCropBoxData: function getCropBoxData() {\n return this.cropper.getCropBoxData();\n },\n setCropBoxData: function setCropBoxData(data) {\n return this.cropper.setCropBoxData(data);\n },\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return this.cropper.getCroppedCanvas(options);\n },\n setAspectRatio: function setAspectRatio(aspectRatio) {\n return this.cropper.setAspectRatio(aspectRatio);\n },\n setDragMode: function setDragMode(mode) {\n return this.cropper.setDragMode(mode);\n }\n }\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","<script setup lang=\"ts\">\n// @ts-ignore\nimport VueCropper from 'vue-cropperjs'\nimport type Cropper from 'cropperjs'\nimport 'cropperjs/dist/cropper.css'\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'\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<Cropper | null>(null)\nconst cropperOpacityHide = ref(true)\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 cropperOpacityHide.value = false\n applyRegionOfInterest()\n enableCropper()\n}\n\nconst cropperEnd = () => {\n saveRoi()\n}\n\nconst showCropper = computed(() => {\n if (imageRoiStore.imageFile && imageRoiStore.imageFile.links?.image_detail && !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 <VProgressCircular\n v-if=\"imageRoiStore.loader\"\n indeterminate\n color=\"primary\"\n />\n <VueCropper\n v-if=\"showCropper\"\n :key=\"imageRoiStore.timestampCropper\"\n ref=\"cropper\"\n :class=\"{ 'image-cropper-hidden': cropperOpacityHide }\"\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 canvas\n responsive\n />\n</template>\n\n<style lang=\"scss\">\n.image-cropper-hidden {\n opacity: 0;\n}\n\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'\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 = false\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 v-if=\"dialog\"\n :model-value=\"dialog\"\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 :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\n const toggleUploadQueueSidebar = () => {\n uploadQueueSidebar.value = !uploadQueueSidebar.value\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.enabled\"\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 v-if=\"isActive\">\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 :is-active=\"activeTab === AssetDetailTabImageWithRoi.ROI\" />\n </div>\n </div>\n <div class=\"sidebar-info__actions px-2\">\n <AssetDetailSidebarActionsTeleportTarget />\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\"\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'\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 }>(),\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 }\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 = true\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 try {\n await deleteImage(imageClient, props.modelValue)\n reset()\n } catch (e) {\n showErrorsDefault(e)\n }\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</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 :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=\"clickMenuOpened = true\"\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 <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 }>(),\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 }\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 = true\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 }>(),\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 }\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 = true\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\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 } catch (e) {\n //\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 try {\n await deleteImage(imageClient, image.id)\n imageStore.removeImageByIndex(index)\n } catch (e) {\n showErrorsDefault(e)\n }\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 <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=\"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 </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 }>(),\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 }\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()\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","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'\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 },\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'\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 },\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","booleanValue","text","color","loadingComputed","value","x","object","fallbackValue","check","delimiter","index","maxLength","template","params","newParts","part","key","regex","match","name","email","emit","__emit","system","subject","onUpdate","newValue","onBlur","_a","errorMessageComputed","_b","item","labelComputed","path","requiredComputed","modelValueComputed","lastPage","displayedFrom","displayedTo","disabledFirstAndPrev","disabledLast","disabledNext","computedTotalCountText","rowsPerPageComputed","oldValue","pageComputed","onClickFirst","onClickLast","onClickPrev","onClickNext","isVisible","toggleVisibility","cloned","active","defaultItems","defaultItemsMostRelevant","activeTitle","found","options","onItemClick","onCancel","computedData","o","e","i","n","s","r","$","c","f","l","A","z","I","b","T","v","g","W","p","S","C","a","u","h","O","P","y","q","J","K","tt","ot","it","st","at","d","rt","_","lt","N","Q","Z","U","X","H","B","et","nt","ct","m","M","ut","D","ft","R","E","V","Y","locale","error","cause","message","_c","resolveResponseData","axiosError","entity","data","items","values","__publicField","code","showSuccess","duration","notify","showSuccessT","translation","showError","showErrorT","showInfo","showInfoT","showWarning","showWarningT","showValidationError","showRecordWas","variant","showApiValidationError","errors","fieldIsTranslated","te","texts","fieldText","errorsTexts","j","showApiForbiddenOperationError","detail","showUnknownError","showForbiddenError","buttonLoading","onOpen","onClose","router","showErrorsDefault","onConfirm","res","config","module","this","w","k","isoDate","ignoreFractionalSeconds","ignoreSeconds","days","minutes","date","edgeDateValue","displayYear","displayDayMonth","now","date1","date2","unit","date1dayjs","date2dayjs","createdAt","modifiedAt","defaultValue","titleT","clearOne","filter","clearAll","filterBag","filterName","clearAllErrors","pagination","callback","label","placeholderComputed","model","filterId","filterText","filterDocId","filterUrl","filterOverrides","filterActive","clearIfActive","clearAllActiveExcept","exceptFilter","_d","_e","_f","_g","_h","_i","overrideFilter","currentFilter","setFilters","newModel","autodetectFilter","filterLabels","currentFilterModel","event","onClick","icon","resetFilter","advancedFilter","toggleAdvancedFilter","Grant","grantOptions","selectedGrant","newGrant","getGrantOption","GrantOrigin","grantOriginOptions","grantOption","getGrantOriginOption","grantOriginOption","obj","propNames","splitChar","pathParts","lastIndex","recurse","shouldInject","currentUser","customAclProvider","can","acl","permission","canOwner","acls","allowed","pretty","defaults","err","givenDate","week1","nth","number","length","bool","fn","wait","_this","args","arrayify","toggleClass","elem","className","tag","content","node","condition","inputClassName","opts","wrapper","numInput","arrowUp","arrowDown","monthNumber","shorthand","dateObj","monthName","hour","day","amPM","shortMonth","seconds","unixSeconds","weekNum","weekNumber","year","ISODate","month","unixMillSeconds","l10n","isMobile","frmt","overrideLocale","arr","givenFormat","timeless","customLocale","parsedDate","dateOrig","format","datestr","matched","ops","matchIndex","regexStr","token","isBackSlash","escaped","val","ts","ts1","ts2","hours","secondsSinceMidnight","minHour","minMinutes","minSeconds","maxHr","maxMinutes","target","_loop_1","source","args_1","il","jl","element","instanceConfig","self","defaultOptions","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","formats","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","nodeList","nodes","instances","selector","string","safeConfig","globalCallbacks","localCallback","onCloseCb","selectedDates","dateStr","newState","newConfig","global","factory","exports","fp","Slovak","sk","Czech","cs","english","storedSettings","configAvailableLanguages","configDefaultLanguage","addMessages","language","messages","setLanguage","shortcutButtonsPlugin","pluginsImported","flatickrRefIsInitialized","ref","flatickrRef","textFieldRef","isOpened","textFieldValue","flatpickrValue","initialized","fixFormat","checkIfReallyEmitChange","onFlatpickrUpdate","onFlatpickrOpen","onTextFieldBlur","onFlatpickrClose","onFlatpickrChange","filtered","altFormat","v$","onClear","enableComputed","defaultValueComputed","pluginsComputed","languages","currentLanguageCode","flatpickrConfig","onCalendarClick","requiredIf","rules","checkboxModel","onCheckboxClick","sortBy","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","loading","hasError","uniqueId","internalModelValue","success","returnValue","JobStatus","jobStatusOptions","getJobStatusOption","cached","loaded","containerClassComputed","displayTitle","LogLevel","logLevelOptions","getLogLevelOption","levelOption","copy","isSupported","customColorClass","routerToComputed","variantComputed","dialog","closeDialog","__expose","ThemeSettings","Theme","theme","setThemeAuto","setThemeDark","setThemeLight","toggleTheme","settings","isOpen","_hoisted_1","_hoisted_6","_sfc_render","_ctx","_cache","_hoisted_2","_createElementVNode","_hoisted_3","currentFlagComponent","FlagSk","onLanguageChange","currentLocale","availableLocales","reloadAdmin","showSystemBar","checkNewVersion","contentType","json","systemBarComponent","ASystemBarNewVersion","pause","fontSize","firstNameLastName","swatches","generatedColor","generateRandomColor","randomRow","buttonColorComputed","onColorPickerChange","newColor","logoutDialog","fetch","add","addManualMinimal","fetchedItemsMinimal","tryToAddFromFetchedItems","ids","resolve","deleteWasPressedTime","onKeydownDelete","idsToFetch","DamAssetStatus","DamAssetType","makeFilter","AssetSelectReturnType","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","configName","urlTemplate","urlParams","overrideUrlTemplate","statusCode","client","reject","querySetLimit","queryAdd","querySetOffset","page","limit","querySetOrder","field","desc","formatValue","queryAddFilter","filterVariant","getValue","isSearchApi","generateListApiQuery","queryBuild","querySetFilters","searchApi","resData","DamDistributionRequirementStrategy","DamDistributionServiceType","DamDistributionStatus","UserAuthType","END_POINT","ENTITY","damClient","extSystem","distributionService","override","onConfigError","loadDamPubConfig","setDamPubConfig","loadDamPrvConfig","setDamPrvConfig","loadDamConfigExtSystem","extSystemId","setDamConfigExtSystem","loadDamConfigAssetCustomFormElements","promises","responses","setDamConfigAssetCustomFormElements","loadDamConfigDistributionCustomFormElements","distributionServiceName","BULK_METADATA_LIMIT","id","assetFileId","bulkItems","bulkItemsRes","response","totalCalls","reduced","dtoItems","damConfigAssetCustomFormElements","assetListStore","fetchAssetList","apiFetchAssetList","fetchNextPage","resetAssetList","filterTouch","filterUnTouch","initStoreContext","IMAGE_HEIGHT","assetStatus","imageProperties","tableImageProperties","onError","srcComputed","placeholder16x9","showIconComputed","bytes","decimals","dm","sizes","AssetSelectGridView","setGridView","toggleSidebar","closeSidebar","openSidebar","gridView","onAnyFilterUpdate","submitFilter","filterIsTouched","componentComputed","AssetSelectFilterFormImage","AssetSelectFilterFormDefault","dialogLocal","sidebarLeft","defaultLicenceId","autoloadOnIntersect","isIntersecting","AssetSelectListTable","AssetSelectListTiles","disabledSubmit","enumerableOnly","keys","symbols","sym","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","version","pattern","ctx","includeCTX","state","prop","selfOnly","appliedTransforms","transform","matrixFn","tagName","iterator","list","scrollingElement","relativeToContainingBlock","relativeToNonStaticParent","undoScale","elRect","bottom","height","width","containerRect","elMatrix","scaleX","scaleY","rect","paddingLeft","paddingTop","paddingRight","paddingBottom","elSide","parentSide","parent","elSideVal","parentSideVal","visible","childNum","includeDragEl","currentChild","children","last","offsetLeft","offsetTop","winScroller","includeSelf","gotSelf","elemCSS","dst","src","rect1","rect2","ms","Polymer","animationStates","animationCallbackId","fromRect","childMatrix","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","currentRect","translateX","translateY","plugin","eventName","sortable","eventNameGlobal","pluginName","modified","eventProperties","modifiedValue","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","allEventProperties","info","elCSS","elWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","touchingSideChild2","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","ret","threshold","insideHorizontally","insideVertically","toFn","pull","to","from","dragEl","sameGroup","otherGroup","group","originalGroup","nearest","dataTransfer","preventOnFilter","touch","originalTarget","criteria","ownerDocument","dragStartFn","fallback","inserted","fallbackTolerance","fallbackOffset","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","revert","activeSortable","isOwner","canSort","fromSortable","completedFired","dragOverEvent","extra","completed","after","changed","capture","insertion","elLastChild","firstChild","direction","targetBeforeFirstSwap","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","sibling","dragIndex","nextSibling","moveVector","order","useAnimation","store","willInsertAfter","onMoveFn","retVal","firstElRect","sortableContentRect","spacer","lastElRect","swapThreshold","invertedSwapThreshold","invertSwap","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","str","sum","root","inputs","idx","_len","plugins","_key","AutoScroll","_ref2","ogElemScroller","newElem","autoScroll","isFallback","sens","speed","scrollThisInstance","scrollCustomFn","layersOut","currentParent","canScrollX","canScrollY","scrollWidth","scrollHeight","scrollPosX","scrollPosY","vx","vy","scrollOffsetY","scrollOffsetX","dispatchSortableEvent","hideGhostForTarget","unhideGhostForTarget","toSortable","_ref3","_ref4","parentSortable","document","resetOptions","start","stop","_valueIsRef","buf","clockseq","seedBytes","msecs","nsecs","dt","tl","tmh","rnds","uuidv1","uuidv4","initSortableCallback","removeDialog","itemToRemove","widgetEl","randomUuid","sortableInstance","forceRerender","dirtyLocal","transformItem","forceRerenderWidgetHtml","emitData","touchDirty","untouchDirty","updatePositions","updatedPositions","position","moveArrayElement","clonedData","returnData","findItemIndexById","updateDataCommon","dirty","updateData","foundIndex","updateDataAtIndex","addAfterIndex","targetIndex","addAfterId","targetId","removeById","removeByIndex","onAddAfterClick","onDeleteClick","onEditClick","onAddLastClick","widgetHtmlId","initSortable","nestedSortable","needsRefresh","refresh","onRemoveDialogConfirm","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","parentEl","addChildToId","paginationComputed","filterTouched","selectedItemsCount","onPageChange","hasNextPage","customDataFormElementTypeOptions","between","maxValue","minLength","minValue","numeric","required","withI18nMessage","stringArrayItemLengthValidator","url","fixValue","updateModelValue","stringArrayItemLength","dynamicRules","useVuelidate","counter","showAll","toggleForm","updated","elementsPinned","elementsOther","showHideButtonText","showHideButtonIcon","enableShowHide","dragoverHandler","checkReallyDraggingEnded","dragleaveHandler","dropHandler","dragEventContainsFiles","file","accept","maxSizes","acceptKeys","maxSizeKeys","checkFormatsAndSizes","files","disableAlert","incorrectFileNames","validFiles","isFileValid","checkFormats","checkSizes","accepts","splitType","dropZoneRef","onDrop","isOverDropZone","isDraggingFile","image","random","damConfigExtSystem","createSizesByAssetType","uploadSizes","uploadAccept","UploadQueueItemType","UploadQueueItemStatus","AssetFileProcessStatus","AssetFileFailReason","AssetFileLinkType","status","chunkSize","mimeType","outputType","method","sharedMemory","notString","blocks","h0","h1","h2","h3","h4","buffer","dataView","apiTimeout","damPrvConfig","lastChunkSize","minUploadTimeThreshold","idealUploadTimeThreshold","maxUploadTimeThreshold","updateChunkSize","expectedChunkUploadSpeed","returnFromRange","imageId","size","onUploadProgressCallback","formData","sha","angle","uploadStatusFallback","uploadQueuesStore","queueItem","errorMessages","partial","reader","uploadCallback","fileSize","progress","speedStack","lastTimestamp","endTimestamp","lastLoaded","assetAlgo","getCurrentTimestamp","progressCallback","progressEvent","currentStamp","dataSent","uploadChunk","chunkFile","exception","processAndUploadChunk","arrayBuffer","cancelToken","sleepTime","attempt","speedCheck","speedCheckRun","avgSpeed","remainingBytes","filesize","uploadedChunk","cancelTokenSource","notification","enabled","ws","eventBus","suggestions","newNames","conflicts","mapFullToMinimal","mapIdToMinimal","fetchCallback","idProp","cache","toFetch","toAdd","arg","addManual","updateMap","updateToFetch","apiFetch","debouncedFetch","END_POINT_LIST","keyword","has","get","isLoaded","author","addToCachedKeywords","fetchCachedKeywords","addToCachedAuthors","fetchCachedAuthors","queues","createDefault","addDamNotificationListener","queueItemProcessed","queueItemFailed","queueItemDuplicate","queueItemMetadataProcessed","getQueue","queueKey","getQueueItems","addByFiles","assetLicence","createQueue","addQueueItem","recalculateQueueCounts","processUpload","queue","getQueueItemsByStatus","waitingItems","queueItemUploadStart","upload","uploadInit","estimate","setUploadSpeed","originAssetFile","updateNewNames","getAuthorConflicts","assetRes","failReason","stopItemUpload","updateFromDetail","getQueueTotalCount","getQueueProcessedCount","stopUpload","currentItems","clearQueue","forceReloadFileInput","getQueueFileInputKey","getQueueItemsTypes","types","inputRef","fileInputKeyLocal","blockDoubleClick","clickInput","validateData","checked","onDropzoneDrop","onInputFileChange","payload","onFileDropzoneClick","images","reqData","imageOptions","imageClient","widgetImageToDamImageUrl","resImage","resolvedSrc","newImage","newImageId","imageDetail","maxPosition","setImageDetail","setImages","addImages","updateMaxPositionIfGreater","newPosition","removeImageByIndex","validationScope","imageStore","onDialogModelUpdate","onEditAsset","AssetDetailTabImageWithRoi","authorConflicts","metadataAreTouched","activeTab","updateUploadStore","setAsset","toolbarColor","remainingTime","short","prefix","checkDimensions","icons","titles","checkDistributions","iconPath","onLoad","uploadingPercentage","backgroundColorComputed","iconColor","remainingTimeShort","assetFileFailReasonOptions","getAssetFileFailReasonOption","reasonOption","mounted","unMounted","canTeleport","elements","pinnedCount","getCachedAuthor","displayNewIcon","clickClose","mapToMinimal","mapToValueObject","mapToValueObjects","authors","mapToMinimals","AuthorType","authorTypeOptions","reviewed","fetchItemsMinimal","addAuthor","addNewAuthorText","searchChange","addManualToCachedAuthors","afterCreate","itemSlotIsSelected","keywords","getCachedKeyword","addNewKeywordText","addManualToCachedKeywords","panels","assetDetailStore","isTypeImage","assetMainFile","onAnyMetadataChange","uploadQueueStore","saveButtonLoading","onSave","roi","rotate","imageRoiStore","loadRois","afterRotate","ownKeys","_objectSpread2","_defineProperty","_typeof","_classCallCheck","instance","Constructor","_defineProperties","descriptor","_toPropertyKey","_createClass","protoProps","staticProps","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","iter","minLen","len","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","isNumber","isPositiveNumber","isUndefined","isObject","hasOwnProperty","isPlainObject","_constructor","prototype","isFunction","slice","toArray","forEach","assign","REGEXP_DECIMALS","normalizeDecimalNumber","times","REGEXP_SUFFIX","setStyle","styles","property","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","dispatchEvent","getOffset","box","location","REGEXP_ORIGINS","isCrossOriginURL","parts","addTimestamp","getTransforms","getMaxZoomRatio","pointers","pointers2","maxRatio","pointer","pointerId","pointer2","x1","y1","x2","y2","z1","z2","ratio","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","REGEXP_DATA_URL_HEAD","dataURLToArrayBuffer","dataURL","base64","binary","uint8","arrayBufferToDataURL","chunks","resetAndGetOrientation","orientation","littleEndian","app1Start","ifdStart","exifIDCode","tiffOffset","endianness","firstIFDOffset","_length","_offset","parseOrientation","render","cropper","containerData","imageData","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","clone","_parseOrientation","crossOriginUrl","_this2","isIOSWebKit","done","sizingImage","body","cropBox","parentNode","require$$1","crossorigin","_$options$props","initCrop","replace","onlyColorChanged","enable","disable","move","moveTo","relativeZoom","zoomTo","rotateTo","getContainerData","getImageData","getCanvasData","setCanvasData","getCropBoxData","setCropBoxData","getCroppedCanvas","setAspectRatio","setDragMode","regionOfInterest","originalImageWidth","originalImageHeight","pointX","pointY","percentageWidth","validateWidth","percentageHeight","validateHeight","cropperContainerStyle","cropperOpacityHide","imageUrl","enableCropper","disableCropper","applyRegionOfInterest","saveRoi","cropperReady","cropperEnd","showCropper","sidebar","onImageLoad","isTypeVideo","isTypeAudio","isTypeDocument","toolbarTitle","onSaveAndApply","IMAGE_ASPECT_RATIO","assetDetail","enableRoiTab","uploadQueueDialog","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","removeItem","customData","imageSrc","cancelItem","showCancel","showDetail","fillEmptyField","elementProperty","replaceField","forceReplace","massOperationsData","massOperationsKeywords","massOperationsAuthors","replaceEmptyCustomDataValue","replaceEmptyAuthors","replaceEmptyKeywords","fillEmptyKeywords","replaceKeywords","fillEmptyAuthors","replaceAuthors","fillAll","clearForm","assetTypes","uploadQueueSidebar","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","columnsHidden","disableActions","customPagination","customI18n","localI18n","columnsAll","columnsVisible","columns","column","datatableConfig","datatableHiddenColumns","selected","updateSortBy","resetState","getList","sortByChange","onFetchNextPage","firstTd","resourceName","_system","_resourceName","axiosConfig","rowsPerPage","orderField","orderDesc","sortDesc","batchSize","forceElastic","urlPart","results","nextPageData","numPages","pageResponse","customJobs","jobResourceOptions","app","Acl","Notification","array1","array2","sortedArray1","sortedArray2","resolved","alert","anzuUser","job","log","permissionGroup","assetSelect","subjectSelect","vuetify","apiValidation","apiForbiddenOperation","jsValidation","VBtn","VChip","createBase","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,188,259,260]}
|