@anzusystems/common-admin 1.20.0 → 1.22.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib-7c282c19.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/services/api/coreDam/assetApi.ts","../src/model/coreDam/filter/AssetFilter.ts","../src/types/coreDam/AssetSelect.ts","../src/services/stores/coreDam/assetSelectStore.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/utils/boolean.ts","../src/model/factory/AnzuUserFactory.ts","../src/model/factory/PermissionConfigFactory.ts","../src/model/factory/PermissionGroupFactory.ts","../src/utils/response.ts","../src/services/api/apiHelper.ts","../src/services/api/apiAnyRequest.ts","../src/services/api/apiCreateOne.ts","../src/services/api/apiDeleteOne.ts","../src/services/api/queryBuilder.ts","../src/services/api/apiFetchByIds.ts","../src/types/ApiResponse.ts","../src/services/api/apiFetchList.ts","../src/services/api/apiFetchOne.ts","../src/services/api/apiUpdateOne.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/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/composables/system/datatableColumns.ts","../src/model/commonVuetifyConfig.ts","../src/composables/system/defineCached.ts","../src/plugins/webfontloader.ts","../src/model/factory/JobFactory.ts","../src/composables/system/loginStatus.ts","../src/composables/datetime/remainingTime.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","import type { InjectionKey } from 'vue'\nimport type { AxiosInstance } from 'axios'\nimport type { CommonAdminImageOptions, CurrentUserType, CustomAclResolver } from '@/AnzuSystemsCommonAdmin'\nimport type { LanguageCode } from '@/composables/languageSettings'\nimport type { IntegerId } from '@/types/common'\n\nexport const SystemScopeSymbol: InjectionKey<string | undefined> = Symbol.for('anzu:SystemScope')\nexport const SubjectScopeSymbol: InjectionKey<string | undefined> = Symbol.for('anzu:SubjectScope')\nexport const DamClientSymbol: InjectionKey<(() => AxiosInstance) | undefined> = Symbol.for('anzu:DamClient')\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')\nexport const DefaultLicenceIdSymbol: InjectionKey<IntegerId | undefined> = Symbol.for('anzu:DefaultLicenceId')\nexport const ImageOptions: InjectionKey<CommonAdminImageOptions | undefined> = Symbol.for('anzu:ImageOptions')\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.containerClass + props.wrapText ? ' a-chip--wrap' : ''\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, 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 DistributionServiceName = 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: DistributionServiceName[]\n slotNames: string[]\n fromRss: boolean\n width: number\n height: number\n}\n\nexport interface AssetSearchListItemDto extends AnzuUserAndTimeTrackingAware, ResourceNameSystemAware {\n id: DocId\n texts: Texts\n attributes: Attributes\n licence: IntegerId\n mainFile: null | AssetFile\n keywords: DocId[]\n authors: DocId[]\n podcasts: DocId[]\n assetFileProperties: AssetFileProperties\n}\n","import type { AxiosInstance } from 'axios'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { apiFetchList } from '@/lib'\nimport type { AssetSearchListItemDto } from '@/types/coreDam/Asset'\n\nconst END_POINT = '/adm/v1/asset'\nexport const ENTITY = 'asset'\nexport const SYSTEM_CORE_DAM = 'coreDam'\n\nexport function useAssetApi(client: () => AxiosInstance) {\n const fetchAssetList = (licenceId: number, pagination: Pagination, filterBag: FilterBag) =>\n apiFetchList<AssetSearchListItemDto[]>(\n client,\n END_POINT + '/licence/:licenceId',\n { licenceId },\n pagination,\n filterBag,\n SYSTEM_CORE_DAM,\n ENTITY\n )\n\n return {\n fetchAssetList,\n }\n}\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 { useAssetApi } from '@/services/api/coreDam/assetApi'\nimport { 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 { inject, ref } from 'vue'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport type { AxiosInstance } from 'axios'\nimport { DamClientSymbol } from '@/components/injectionKeys'\nimport { usePagination } from '@/composables/system/pagination'\nimport { isUndefined } from '@/utils/common'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { useAlerts } from '@/composables/system/alerts'\nimport type { DocId } from '@/types/common'\n\nconst filter = useAssetListFilter()\nconst pagination = usePagination()\nconst filterIsTouched = ref(false)\n\nexport function useAssetListActions() {\n const damClient = inject<(() => AxiosInstance) | undefined>(DamClientSymbol, undefined)\n\n if (isUndefined(damClient)) {\n throw new Error(\"Composable useAssetListActions can't be used without properly configured common admin.\")\n }\n\n const { fetchAssetList: apiFetchAssetList } = useAssetApi(damClient)\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(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(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/VirFMVd336YqnWieXk1GAzPIyEMVooB/XiqYf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFXf4Li/wB/Sf8AAjFWv8Fxf7/f/gRirHdQtRaXEkAJYI1ATtXFVDFW0+0PmP14q9MrXFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/9LuGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvM3+0fmf14q1iqO0L/e6H/XxVn4xV2Ksc86/3MH/GRv1YqxXFWj0xVmPk3/eNv+Mh/UMVT3FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXHFWAa9/vfP/r4qgcVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8zf7R+Z/XirWKo7Qv97of9fFWfjFXYqxzzr/cwf8ZG/VirFcVabpirMfJv+8bf8ZD+oYqnuKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku9sVdirsVdirsVdirsVdirjirAde/wB7pv8AXxVAYq2n2l+Y/Xir0wYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUq1LzJbWRMY/eyj9leg/1mxVIJ/N17L9jjGPACp+/FUL/AIg1CtfXb7hiqKt/Nl5Gf3nGVfAih+8Yqn+meY7e+IjNY5j+y3Q/JsVTWlOuKuxV2KuxV2KuxVxxVgOvf73Tf6+KoDFW0+0vzH68VemDFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8zf7R+Z/XirWKo7Qv97of9fFWfjFXYqxzzr/cwf8ZG/VirFcVabpirMfJv+8bf8ZD+oYqnuKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV3XbFWLeYvMLcmtLQ0A2dx4/yp/xtirGqAbDpireKuxV2KtUrirJ/LnmFnZbK7apOyOe/+S2Ksn98VdirsVdirsVccVYDr3+903+viqAxVtPtL8x+vFXpgxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV/9buGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvM3+0fmf14q1iqO0L/e6H/XxVn4xV2Ksc86/3MH/GRv1YqxXFWm6YqzHyb/vG3/GQ/qGKp7irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVS3zDqP1G0ZlP7x/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 :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\"\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 cursor: pointer;\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:not(.img-svg) {\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\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, inject, ref, 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 { DefaultLicenceIdSymbol } from '@/components/injectionKeys'\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 }>(),\n {\n modelValue: undefined,\n assetLicenceId: undefined,\n returnType: 'mainFileId',\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\nconst defaultLicenceId = inject<number | undefined>(DefaultLicenceIdSymbol, undefined)\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\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.assetSelect.meta.controls.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.assetSelect.meta.controls.confirm') }}\n </slot>\n </ABtnPrimary>\n </div>\n </VCard>\n </VDialog>\n</template>\n","/**!\n * Sortable 1.15.0\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\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\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\n return target;\n}\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\n return _typeof(obj);\n}\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\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\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\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\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\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\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}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\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.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\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};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\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\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\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\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\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}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\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\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\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\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\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\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\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\n } while (container = container.parentNode);\n }\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\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\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\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\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\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\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\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\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\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\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\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\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\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\n return dst;\n}\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}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\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}\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}\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}\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\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\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\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\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\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // 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 } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\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\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\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}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\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\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\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\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; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\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\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\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; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\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); // Support for new CustomEvent feature\n\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\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\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\n\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\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};\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}\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\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\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\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\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\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\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\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\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\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\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\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\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}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\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}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\n\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\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\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); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\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\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\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(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\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\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\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\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\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\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\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\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\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); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\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\n\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(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\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\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(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\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\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\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\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\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\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\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n 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); // only set the status to dragging, when we are actually dragging\n\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\n this._onDragStart(evt, true);\n }\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\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\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; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\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\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\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); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\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\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\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(\n /**Event*/\n 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\n if (_silent) return;\n\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 } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\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\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\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\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\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // if there is a last element, it is the target\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n\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\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\n if (firstChild === dragEl) {\n return completed(false);\n }\n\n target = firstChild;\n targetRect = getRect(target);\n\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\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\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\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\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(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\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 }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\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\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\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\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\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(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\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\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\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\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\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\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\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\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\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\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\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\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\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\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\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; // Support for new CustomEvent feature\n\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\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\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var rect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var spacer = 10;\n return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\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\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\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\n invert = invert || invertSwap;\n\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\n return 0;\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 */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\n\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\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\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/**\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 */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\n\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\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\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\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\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\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\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\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\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; // 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\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\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\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\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; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\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\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\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\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\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\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\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 }\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\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\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\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\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\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\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\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\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\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\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\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\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}\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\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\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)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\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\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\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\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\n dataTransfer.setData('Text', data);\n }\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\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\n sortable._hideClone();\n\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\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\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\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\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\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\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\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 sortable.captureAnimationState();\n\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\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\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\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\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\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\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); // 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\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\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\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; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\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 }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\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\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\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\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 } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n folding = false; // Do not \"unfold\" after around dragEl if reverted\n\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\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\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\n\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\n multiDragIndex++;\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\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\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\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\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; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\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\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\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\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\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\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\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\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\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\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 */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\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)\n return;\n sortable = new Sortable(target, { ...defaultOptions, ...resetOptions });\n };\n const stop = () => sortable == null ? void 0 : sortable.destroy();\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 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 position: number\n id: DocId | IntegerId\n}\n\nexport interface SortableItemWithParentDataAware {\n position: number\n id: DocId | IntegerId\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","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 { HTTP_STATUS_VALID_ALL } from '@/composables/statusCodes'\n\nexport const isValidHTTPStatus = (statusCode: number) => {\n return HTTP_STATUS_VALID_ALL.includes(statusCode)\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 { 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 { 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 { 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 { 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 { 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 { 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 T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiFetchList = <T, R = T>(\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(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 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 { 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 { 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 DamClientSymbol,\n DefaultLanguageSymbol,\n DefaultLicenceIdSymbol,\n ImageOptions,\n} from '@/components/injectionKeys'\nimport type { AxiosInstance } from 'axios'\nimport type { ImageWidgetImage } from '@/types/ImageWidgetImage'\nimport type { IntegerId } from '@/types/common'\n\nexport type PluginOptions<T extends AclValue = AclValue> = {\n currentUser: CurrentUserType\n languages: { available: LanguageCode[]; default: LanguageCode }\n customAclResolver?: CustomAclResolver<T>\n coreDam?: { client: () => AxiosInstance; defaultLicenceId?: IntegerId }\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 getImage: (id: IntegerId) => Promise<ImageWidgetImage>\n imageUrl: string\n width: number\n height: number\n}\n\nexport type CommonAdminImageOptions =\n | undefined\n | {\n configs: { [key: string]: CommonAdminImageConfig }\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<(() => AxiosInstance) | undefined>(DamClientSymbol, options.coreDam?.client)\n app.provide(CustomAclResolverSymbol, options.customAclResolver)\n app.provide(AvailableLanguagesSymbol, options.languages.available)\n app.provide(DefaultLanguageSymbol, options.languages.default)\n app.provide(DefaultLicenceIdSymbol, options.coreDam?.defaultLicenceId)\n app.provide(ImageOptions, options.image)\n app.component('Acl', Acl)\n app.use(Notification, { componentName: 'Notifications' })\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 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 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 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 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 time from '@/locales/sk/common/time.json'\nimport sortable from '@/locales/sk/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 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 { 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","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 { 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","import { 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>>>(new Map())\n const toFetch = ref<Set<I>>(new Set())\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","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","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"],"names":["t","useI18n","booleanValue","computed","props","text","color","loadingComputed","isUndefined","value","isDefined","isNull","isNumber","isString","isArray","isFunction","isBoolean","isDocId","isInt","x","isObject","isEmptyObject","isEmptyArray","isEmpty","cloneDeep","object","isProxy","toRaw","isRef","unref","stringToInt","fallbackValue","check","stringToFloat","stringSplitOnFirstOccurrence","delimiter","index","stringToSlug","stringToKebabCase","stringTrimLength","maxLength","stringUrlTemplateReplace","template","params","newParts","part","key","stringUrlTemplateReplaceVueRouter","regex","match","stringNormalizeForSlotName","name","SystemScopeSymbol","SubjectScopeSymbol","DamClientSymbol","CurrentUserSymbol","CustomAclResolverSymbol","AvailableLanguagesSymbol","DefaultLanguageSymbol","DefaultLicenceIdSymbol","ImageOptions","system","inject","subject","onUpdate","newValue","emit","onBlur","_a","errorMessageComputed","_b","item","labelComputed","path","requiredComputed","provide","modelValueComputed","lastPage","displayedFrom","displayedTo","disabledFirstAndPrev","disabledLast","disabledNext","computedTotalCountText","rowsPerPageComputed","watch","oldValue","pageComputed","onClickFirst","onClickLast","onClickPrev","onClickNext","isVisible","toggleVisibility","cloned","active","ref","defaultItems","defaultItemsMostRelevant","activeTitle","found","options","onItemClick","onCancel","computedData","o","e","i","F","pt","n","s","dt","r","w","G","mt","yt","j","ht","gt","vt","k","_t","$","c","f","l","A","z","I","b","xt","Tt","Dt","Et","wt","kt","$t","At","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","L","It","Ct","REQUIRED_LOCALES","i18n","createI18n","locale","isAnzuFatalError","error","AnzuFatalError","cause","message","HTTP_STATUS_OK","HTTP_STATUS_CREATED","HTTP_STATUS_NO_CONTENT","HTTP_STATUS_BAD_REQUEST","HTTP_STATUS_UNAUTHORIZED","HTTP_STATUS_FORBIDDEN","HTTP_STATUS_UNPROCESSABLE_ENTITY","HTTP_STATUS_VALID_ALL","axiosErrorResponseIsForbidden","axios","isAnzuApiForbiddenError","AnzuApiForbiddenError","ERROR_VALIDATION","axiosErrorResponseHasValidationData","_c","isAnzuApiValidationError","AnzuApiValidationError","resolveResponseData","axiosError","entity","data","items","values","__publicField","isAnzuApiResponseCodeError","AnzuApiResponseCodeError","code","ERROR_FORBIDDEN_OPERATION","axiosErrorResponseHasForbiddenOperationData","isAnzuApiForbiddenOperationError","AnzuApiForbiddenOperationError","DEFAULT_DURATION_SECONDS","NEW_LINE_MARK","useAlerts","showSuccess","duration","notify","showSuccessT","translation","showError","showErrorT","showInfo","showInfoT","showWarning","showWarningT","showValidationError","showRecordWas","variant","showApiValidationError","errors","fieldIsTranslated","te","texts","fieldText","errorsTexts","showApiForbiddenOperationError","detail","showUnknownError","showForbiddenError","buttonLoading","onOpen","onClose","router","useRouter","showErrorsDefault","onConfirm","res","config","onMounted","useFetch","module","this","dayjs","utc","SUFFIX","FORMAT","DATETIME_MIN","DATETIME_MAX","dateNow","dateTimeToDate","isoDate","timestampCurrent","dateTimeNow","ignoreFractionalSeconds","ignoreSeconds","dateTimeStartOfDay","days","dateTimeEndOfDay","dateModifyMinutes","minutes","date","dateToUtc","yearNow","dateTimePretty","edgeDateValue","dateTimeFriendly","displayYear","displayDayMonth","now","datePretty","timePretty","dateDiff","date1","date2","unit","date1dayjs","date2dayjs","createdAt","modifiedAt","makeFilterHelper","defaultValue","titleT","useFilterHelpers","clearOne","filter","clearAll","filterBag","filterName","clearAllErrors","pagination","callback","label","placeholderComputed","model","filterId","filterText","filterDocId","filterUrl","filterOverrides","toRefs","filterActive","clearIfActive","clearAllActiveExcept","exceptFilter","_d","_e","_f","_g","_h","_i","overrideFilter","currentFilter","setFilters","newModel","autodetectFilter","filterLabels","currentFilterModel","eventClickBlur","event","onClick","icon","resetFilter","advancedFilter","toggleAdvancedFilter","Grant","useGrant","grantOptions","selectedGrant","newGrant","getGrantOption","GrantOrigin","useGrantOrigin","grantOriginOptions","grantOption","getGrantOriginOption","grantOriginOption","objectDeepFreeze","obj","propNames","objectGetValues","objectGetValueByPath","splitChar","objectSetValueByPath","objectDeletePropertyByPath","pathParts","lastIndex","recurse","isOwnerAware","isCreatedByAware","ROLE_SUPER_ADMIN","useAcl","shouldInject","currentUser","customAclProvider","can","acl","permission","canOwner","acls","allowed","pretty","HOOKS","defaults","err","givenDate","week1","english","nth","pad","number","length","int","bool","debounce","fn","wait","_this","args","arrayify","toggleClass","elem","className","createElement","tag","content","clearNode","node","findParent","condition","createNumberInput","inputClassName","opts","wrapper","numInput","arrowUp","arrowDown","getEventTarget","doNothing","monthToStr","monthNumber","shorthand","revFormat","dateObj","monthName","hour","day","amPM","shortMonth","seconds","unixSeconds","weekNum","weekNumber","year","ISODate","month","unixMillSeconds","tokenRegex","formats","createDateFormatter","l10n","isMobile","frmt","overrideLocale","arr","createDateParser","givenFormat","timeless","customLocale","parsedDate","dateOrig","format","datestr","matched","ops","matchIndex","regexStr","token","isBackSlash","escaped","val","compareDates","isBetween","ts","ts1","ts2","calculateSecondsSinceMidnight","hours","parseSeconds","secondsSinceMidnight","getDefaultHours","minHour","minMinutes","minSeconds","maxHr","maxMinutes","target","_loop_1","source","args_1","__assign","__spreadArrays","il","jl","DEBOUNCED_CHANGE_MS","FlatpickrInstance","element","instanceConfig","self","defaultOptions","flatpickr","English","bind","setHoursFromDate","positionCalendar","changeMonth","changeYear","clear","close","onMouseOver","createDay","destroy","isEnabled","jumpToDate","updateValue","open","redraw","set","setDate","toggle","setupHelperFunctions","yr","init","parseConfig","setupLocale","setupInputs","setupDates","build","bindEvents","setCalendarWidth","isSafari","triggerEvent","getClosestActiveElement","bindToInstance","daysWidth","updateTime","defaultDate","timeWrapper","prevValue","setHoursFromInputs","ampm2military","military2ampm","limitMinHours","limitMaxHours","minBound","maxBound","currentTime","result","maxTime","minTime","setHours","onYearInput","eventTarget","handler","ev","el","triggerChange","evt","setupMobile","debouncedResize","onResize","onKeyDown","documentClick","onMonthNavClick","selectDate","selText","timeIncrement","jumpDate","jumpTo","oldYear","oldMonth","buildMonthSwitch","incrementNumInput","delta","inputElem","input","createEvent","fragment","buildMonthNav","buildWeeks","weekWrapper","weekNumbers","buildWeekdays","buildDays","buildTime","customAppend","_dayNumber","dateIsEnabled","dayElement","isDateSelected","isDateInRange","focusOnDayElem","targetNode","getFirstAvailableDay","startMonth","endMonth","startIndex","endIndex","getNextAvailableDay","current","givenMonth","loopDelta","numMonthDays","focusOnDay","offset","activeElement","dayFocused","isInView","startElem","buildMonthDays","firstOfMonth","prevMonthDays","daysInMonth","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayNumber","dayIndex","dayNum","dayContainer","frag","shouldBuildMonth","buildMonth","container","monthNavFragment","monthElement","selectedMonth","yearInput","yearElement","currentMonth","buildMonths","updateNavigationCurrentMonth","separator","hourInput","minuteInput","secondInput","updateWeekdays","firstDayOfWeek","weekdays","isOffset","triggerChangeEvent","toInitial","isCalendarElem","eventTarget_1","isCalendarElement","isInput","lostFocus","isIgnored","newYear","newYearNum","isNewYear","dateToCheck","array","parsed","valueChanged","getDateStr","allowInput","allowKeydown","allowInlineKeydown","isTimeObj","focusAndClose","delta_1","elems","cellClass","hoverDate","initialDate","rangeStartDate","rangeEndDate","containsDisabled","minRange","maxRange","hoverableCells","dayElem","timestamp","outOfRange","positionElement","wasOpen","minMaxDateSetter","type","inverseDateObj","boolOpts","userConfig","dates","parseDateRules","timeMode","defaultDateFormat","defaultAltFormat","minMaxTimeSetter","hook","pluginConf","getInputElem","customPositionElement","calendarHeight","acc","child","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","distanceFromBottom","showOnTop","top","left","isCenter","isRight","right","rightMost","centerMost","doc","getDocumentStyleSheet","bodyWidth","centerLeft","centerBefore","centerAfter","centerIndex","centerStyle","editableSheet","sheet","createStyleSheet","style","isSelectable","selectedDate","shouldChangeMonth","selectedIndex","single","range","CALLBACKS","updatePositionElement","option","setSelectedDate","inputDate","rule","preloadedDate","inputType","hooks","specificFormat","dObj","isPrevMonth","isNextMonth","isKeyDown","min","max","step","curValue","isHourElem","isMinuteElem","_flatpickr","nodeList","nodes","instances","selector","includedEvents","excludedEvents","camelToKebab","string","nullify","allEvents","configCallbacks","Component","defineComponent","safeConfig","globalCallbacks","localCallback","onCloseCb","nextTick","selectedDates","dateStr","newState","newConfig","global","factory","exports","fp","Slovak","sk","Czech","cs","useValidateRequiredIf","createI18nMessage","requiredIf","ALL_LANGUAGES","storedSettings","useStorage","modifyLanguageSettings","configAvailableLanguages","configDefaultLanguage","addMessages","language","messages","setLanguage","readonly","useLanguageSettings","shortcutButtonsPlugin","pluginsImported","flatickrRefIsInitialized","flatickrRef","textFieldRef","isOpened","textFieldValue","flatpickrValue","initialized","fixFormat","checkIfReallyEmitChange","onFlatpickrUpdate","onFlatpickrOpen","onTextFieldBlur","onFlatpickrClose","onFlatpickrChange","filtered","altFormat","v$","onClear","enableComputed","defaultValueComputed","pluginsComputed","languages","currentLanguageCode","flatpickrConfig","onCalendarClick","rules","useVuelidate","checkboxModel","onCheckboxClick","usePagination","sortBy","reactive","usePaginationAutoHide","modelValue","search","isFocused","autoFetchTimer","innerFilter","multipleComputedVuetifyTypeFix","fetchedItems","selectedItemsCache","allItems","final","loadingLocal","apiSearch","query","filterField","findLocalDataByValues","tryToLoadFromLocalData","count","foundItems","autoFetched","clearAutoFetchTimer","autoFetch","onFocus","singleItemSelectedTitle","onSearchUpdate","onClickClear","watchDebounced","loading","hasError","uniqueId","internalModelValue","success","returnValue","JobStatus","useJobStatus","jobStatusOptions","getJobStatusOption","commonConfig","COMMON_CONFIG","cached","shallowRef","loaded","containerClassComputed","displayTitle","LogLevel","useLogLevel","logLevelOptions","getLogLevelOption","levelOption","numberToString","copy","isSupported","useClipboard","customColorClass","routerToComputed","variantComputed","dialog","closeDialog","__expose","ThemeSettings","Theme","QUERY","settings","theme","systemHasDarkPreference","setTheme","setThemeSettings","toolbarColor","useTheme","setThemeAuto","setThemeDark","setThemeLight","toggleTheme","isOpen","_hoisted_1","_hoisted_6","_sfc_render","_ctx","_cache","_hoisted_2","_createElementVNode","_hoisted_3","currentFlagComponent","FlagSk","FlagEn","FlagEmpty","onLanguageChange","currentLocale","availableLocales","reloadAdmin","AnzuNewVersionFetchError","showSystemBar","checkNewVersion","contentType","json","systemBarComponent","ASystemBarNewVersion","pause","useIntervalFn","onBeforeUnmount","fontSize","firstNameLastName","swatches","generatedColor","generateRandomColor","randomRow","buttonColorComputed","onColorPickerChange","newColor","logoutDialog","fetch","add","addManualMinimal","fetchedItemsMinimal","tryToAddFromFetchedItems","ids","resolve","deleteWasPressedTime","onKeydownDelete","idsToFetch","DamAssetStatus","DamAssetType","damAssetTypeValueToEnum","END_POINT","ENTITY","SYSTEM_CORE_DAM","useAssetApi","client","licenceId","apiFetchList","makeFilter","useAssetListFilter","AssetSelectReturnType","assetSelectReturnTypeValuesToEnum","useAssetSelectStore","defineStore","assetListItems","loader","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","filterIsTouched","useAssetListActions","damClient","apiFetchAssetList","assetListStore","storeToRefs","fetchAssetList","fetchNextPage","resetAssetList","filterTouch","filterUnTouch","initStoreContext","IMAGE_HEIGHT","IMAGE_BG_COLOR_DEFAULT","useAssetItemActions","assetStatus","imageProperties","tableImageProperties","placeholder16x9","onError","srcComputed","showIconComputed","prettyBytes","bytes","decimals","dm","sizes","IMAGE_WIDTH","toRef","AssetSelectGridView","gridView","useGridView","setGridView","sidebarLeft","useSidebar","toggleSidebar","closeSidebar","openSidebar","onAnyFilterUpdate","submitFilter","componentComputed","AssetSelectFilterFormImage","AssetSelectFilterFormDefault","dialogLocal","defaultLicenceId","autoloadOnIntersect","isIntersecting","AssetSelectListTable","AssetSelectListTiles","disabledSubmit","ownKeys","enumerableOnly","keys","symbols","sym","_objectSpread2","_defineProperty","_typeof","_extends","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","version","userAgent","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","on","off","matches","getParentOrHost","closest","ctx","includeCTX","R_SPACE","state","css","prop","matrix","selfOnly","appliedTransforms","transform","matrixFn","find","tagName","iterator","list","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","elRect","bottom","height","width","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","visible","getChild","childNum","includeDragEl","currentChild","children","Sortable","lastChild","last","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","indexOfObject","includeSelf","gotSelf","elemCSS","extend","dst","src","isRectEqual","rect1","rect2","_throttleTimeout","throttle","ms","cancelThrottle","scrollBy","clone","Polymer","expando","AnimationStateManager","animationStates","animationCallbackId","fromRect","childMatrix","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","currentRect","translateX","translateY","repaint","plugins","PluginManager","plugin","eventName","sortable","eventNameGlobal","pluginName","modified","eventProperties","modifiedValue","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","allEventProperties","_excluded","pluginEvent","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","moved","_hideGhostForTarget","_unhideGhostForTarget","_dispatchEvent","info","activeGroup","awaitingDragStarted","ignoreNextClick","sortables","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","pastFirstInvertThresh","isCircumstantialInvert","targetMoveDistance","ghostRelativeParent","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","_detectDirection","elCSS","elWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","ret","threshold","rect","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","to","from","sameGroup","otherGroup","group","originalGroup","nearestEmptyInsertDetectEvent","nearest","_checkOutsideTargetEl","dataTransfer","preventOnFilter","touch","originalTarget","_saveInputCheckedState","criteria","ownerDocument","dragStartFn","_disableDraggable","_nextTick","fallback","inserted","fallbackTolerance","fallbackOffset","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","revert","activeSortable","isOwner","canSort","fromSortable","completedFired","dragOverEvent","extra","completed","after","_onMove","changed","capture","insertion","elLastChild","_ghostIsLast","_ghostIsFirst","firstChild","direction","targetBeforeFirstSwap","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","_getSwapDirection","sibling","dragIndex","nextSibling","moveVector","_unsilent","_cancelNextTick","_globalDragOver","order","_generateId","useAnimation","id","store","willInsertAfter","onMoveFn","retVal","spacer","swapThreshold","invertedSwapThreshold","invertSwap","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","str","sum","root","inputs","idx","_len","_key","autoScrolls","scrollEl","scrollRootEl","scrolling","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","AutoScrollPlugin","AutoScroll","_ref2","clearPointerElemChangedInterval","clearAutoScrolls","autoScroll","ogElemScroller","newElem","isFallback","sens","speed","scrollThisInstance","scrollCustomFn","layersOut","currentParent","canScrollX","canScrollY","scrollWidth","scrollHeight","scrollPosX","scrollPosY","vx","vy","scrollOffsetY","scrollOffsetX","drop","dispatchSortableEvent","hideGhostForTarget","unhideGhostForTarget","toSortable","Revert","_ref3","Remove","_ref4","parentSortable","useSortable","document","defaultDocument","resetOptions","moveArrayElement","start","unrefElement","stop","tryOnMounted","tryOnScopeDispose","_valueIsRef","toValue","getRandomValues","rnds8","rng","byteToHex","unsafeStringify","_nodeId","_clockseq","_lastMSecs","_lastNSecs","v1","buf","clockseq","seedBytes","msecs","nsecs","tl","tmh","randomUUID","native","v4","rnds","generateUUIDv1","uuidv1","generateUUIDv4","uuidv4","HANDLE_CLASS","GHOST_CLASS","DRAG_CLASS","CHOSEN_CLASS","GROUP_CLASS","useSortableActions","initSortableCallback","removeDialog","itemToRemove","widgetEl","randomUuid","sortableInstance","forceRerender","dirtyLocal","transformItem","forceRerenderWidgetHtml","emitData","touchDirty","untouchDirty","updatePositions","updatedPositions","position","clonedData","returnData","findItemIndexById","updateDataCommon","dirty","updateData","foundIndex","updateDataAtIndex","addAfterIndex","targetIndex","addAfterId","targetId","removeById","removeByIndex","WIDGET_HTML_ID_PREFIX","onAddAfterClick","onDeleteClick","onEditClick","onAddLastClick","widgetHtmlId","initSortable","nestedSortable","needsRefresh","refresh","onRemoveDialogConfirm","NESTED_HANDLE_CLASS","NESTED_GHOST_CLASS","NESTED_DRAG_CLASS","NESTED_CHOSEN_CLASS","NESTED_GROUP_CLASS","SortableLevel","useSortableNestedActions","initSortablesCallback","sortableInstances","dragging","nestedData","updatePositionsSameParent","updatePositionsDifferentParent","itemsTarget","itemsSource","indexTarget","indexSource","calculateParentDepth","depth","parentItem","calculateChildDepth","childDepth","currentDepth","calculateNodeMaxDepth","parentDepth","findItemById","foundInChildren","currentId","maxDepth","itemToMove","itemToMoveParentItem","targetItem","childrenAllowed","insertData","targetItemParentItem","itemFound","onAddChildClick","level","showAddChildButtonComputed","widgetClass","initSortables","nestedSortables","parentId","addChildToId","booleanToInteger","useAnzuUserFactory","resourceName","_system","_resourceName","usePermissionConfigFactory","usePermissionGroupFactory","isValidHTTPStatus","statusCode","replaceUrlParameters","urlTemplate","urlParams","overrideUrlTemplate","apiAnyRequest","method","reject","axiosConfig","apiCreateOne","apiDeleteOne","useApiQueryBuilder","querySetLimit","queryAdd","querySetOffset","page","limit","querySetOrder","field","desc","formatValue","queryAddFilter","filterVariant","getValue","isSearchApi","generateByIdsApiQuery","queryBuild","apiFetchByIds","isApiResponseList","isApiInfiniteResponseList","generateListApiQuery","querySetFilters","searchApi","resData","apiFetchOne","apiUpdateOne","useErrors","useJobApi","JOB_RESOURCE_USER_DATA_DELETE","useJobBaseResource","customJobs","jobResourceOptions","AnzuSystemsCommonAdmin","app","Acl","Notification","arrayItemToggle","arrayToString","arrayFromArgs","arrayFlatten","arraysHaveSameElements","array1","array2","sortedArray1","sortedArray2","browserHistoryReplaceUrlByString","browserHistoryReplaceUrlByRouter","resolved","alert","button","anzuUser","job","log","permissionGroup","assetSelect","vuetify","apiValidation","apiForbiddenOperation","jsValidation","en","useValidateBetween","between","useValidateEmail","email","useValidateMaxLength","useValidateMaxValue","maxValue","useValidateMinLength","minLength","useValidateMinValue","minValue","useValidateNumeric","numeric","useValidateRequired","required","useValidateSlug","helpers","useValidateStringArrayItemLength","withI18nMessage","stringArrayItemLengthValidator","useValidateUrl","url","useValidate","DATETIME_AUTO_LABEL_TRACKING","defaultColumn","createDatatableColumnsConfig","columnsHidden","disableActions","customPagination","customI18n","localI18n","columnsAll","columnsVisible","columns","column","useCommonVuetifyConfig","VBtn","VChip","defineCached","mapFullToMinimal","mapIdToMinimal","fetchCallback","idProp","cache","toFetch","toAdd","arg","addManual","updateMap","updateToFetch","apiFetch","debouncedFetch","useDebounceFn","loadCommonFonts","useCommonJobFactory","createBase","status","useLoginStatus","isStatusNotDefined","isStatusLoginSuccess","isStatusSsoCommunicationFailure","isStatusInternalErrorFailure","isStatusUnauthorized","MINUTE_IN_SECONDS","HOUR_IN_SECONDS","DAY_IN_SECONDS","useRemainingTime","remainingTime","short","prefix"],"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,135,136,137,138,139,140,141]}