@anzusystems/common-admin 1.47.0-beta.336 → 1.47.0-beta.338

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":"AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-Cc4fwgQq.mjs","sources":["../src/components/ARow.vue","../src/utils/common.ts","../src/utils/string.ts","../src/components/injectionKeys.ts","../src/components/AAnzuUserAvatar.vue","../src/components/collab/components/ACollabLockedByUser.vue","../src/components/collab/composables/collabEventBus.ts","../src/components/collab/types/Collab.ts","../src/components/collab/composables/commonAdminCollabOptions.ts","../src/components/collab/composables/collabState.ts","../src/components/collab/composables/collabCurrentUserId.ts","../src/components/collab/composables/collabField.ts","../src/components/form/AFormTextField.vue","../src/plugins/i18n.ts","../src/composables/system/pagination.ts","../src/composables/system/datatableColumns.ts","../src/components/ADialogToolbar.vue","../node_modules/@kyvg/vue3-notification/dist/index.es.js","../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/model/error/AnzuApiDependencyExistsError.ts","../src/model/error/AnzuApiTimeoutError.ts","../src/model/error/AnzuApiAxiosError.ts","../src/composables/system/alerts.ts","../node_modules/dayjs/dayjs.min.js","../node_modules/dayjs/plugin/utc.js","../node_modules/dayjs/plugin/customParseFormat.js","../src/utils/datetime.ts","../src/utils/event.ts","../src/components/buttons/filter/AFilterSubmitButton.vue","../src/components/buttons/filter/AFilterResetButton.vue","../src/utils/object.ts","../src/services/api/apiHelper.ts","../src/utils/response.ts","../src/services/api/apiFetchOne.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/useValidateRequiredIf.ts","../src/validators/vuelidate/common/useValidateSlug.ts","../src/validators/vuelidate/common/useValidateStringArrayItemLength.ts","../src/validators/vuelidate/common/useValidateUrl.ts","../src/validators/vuelidate/common/useValidateCompareDates.ts","../src/validators/vuelidate/useValidate.ts","../src/components/datetime/TimePicker.vue","../src/components/datetime/ADatetimePicker.vue","../src/components/form/AFormDatetimePicker.vue","../src/components/form/AFormSwitch.vue","../src/labs/filters/filterFactory.ts","../src/labs/filters/filterTimeIntervalTools.ts","../src/labs/api/useApiQueryBuilder.ts","../src/types/ApiResponse.ts","../src/labs/api/useApiFetchList.ts","../src/labs/filters/pagination.ts","../src/services/api/apiCreateOne.ts","../src/labs/filters/filterInjectionKeys.ts","../src/labs/filters/AFilterBooleanSelect.vue","../src/labs/filters/AFilterString.vue","../src/labs/filters/AFilterRemoteAutocomplete.vue","../src/utils/enum.ts","../src/labs/filters/AFilterRemoteAutocompleteWithMinimal.vue","../src/labs/filters/AFilterValueObjectOptionsSelect.vue","../src/components/datatable/datatable.ts","../src/labs/filters/AFilterEmpty.vue","../src/labs/filters/AFilterDatetimePicker.vue","../src/labs/filters/AFilterInteger.vue","../src/labs/filters/FilterDetailItem.vue","../src/labs/filters/UserAdminConfigFilter.ts","../src/types/UserAdminConfig.ts","../src/labs/filters/bookmarksStore.ts","../src/labs/api/useApiRequest.ts","../src/labs/filters/userAdminConfig.ts","../src/labs/filters/FilterBookmarks.vue","../node_modules/sortablejs/modular/sortable.esm.js","../node_modules/@vueuse/integrations/dist/useSortable-jtnNPDb0.js","../node_modules/uuid/dist/stringify.js","../node_modules/uuid/dist/rng.js","../node_modules/uuid/dist/v1.js","../node_modules/uuid/dist/native.js","../node_modules/uuid/dist/v4.js","../src/utils/generator.ts","../src/components/sortable/sortableActions.ts","../src/components/sortable/sortableUtils.ts","../src/components/sortable/ASortable.vue","../src/model/factory/UserAdminConfigFactory.ts","../src/labs/filters/FilterBookmarkDialog.vue","../src/components/buttons/filter/AFilterBookmarkButton.vue","../src/labs/subjectSelect/AFilterWrapperSubjectSelect.vue","../src/services/api/apiDeleteOne.ts","../src/labs/form/AFormRemoteAutocomplete.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n// #region docs-props\nwithDefaults(\n defineProps<{\n title?: string\n value?: string | number | undefined | null\n dataCy?: string | undefined\n titleClass?: string | undefined\n }>(),\n {\n title: '',\n value: '',\n dataCy: undefined,\n titleClass: 'font-weight-bold text-subtitle-2',\n }\n)\n// #endregion docs-props\n</script>\n\n<template>\n <VRow :data-cy=\"dataCy\">\n <VCol>\n <h4\n v-if=\"title.length\"\n :class=\"titleClass\"\n >\n {{ title }}\n </h4>\n <slot>\n <span class=\"text-high-emphasis\">{{ value }}</span>\n </slot>\n </VCol>\n </VRow>\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 stringToNumber = (value: string, fallbackValue?: number): number | null => {\n const trimmedValue = value.trim()\n if (trimmedValue === '') {\n return fallbackValue !== undefined ? fallbackValue : null\n }\n const numericValue = Number(trimmedValue)\n if (!Number.isNaN(numericValue) && Number.isFinite(numericValue)) {\n return numericValue\n }\n\n return fallbackValue !== undefined ? fallbackValue : null\n}\n\nexport const stringToBooleanExact = (value: string): boolean | null => {\n const trimmedValue = value.trim()\n if (trimmedValue === 'true') return true\n if (trimmedValue === 'false') return false\n return null\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 [path, queryString] = template.split('?')\n const parts = path.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\n return newParts.join('/') + (queryString ? `?${queryString}` : '')\n}\n\n/**\n * Converts colon parameters to real values from params. Same as above but it additionally supports vue router regexp.\n *\n * @param template url containing colon parameters, example: '/:id(\\\\d+)/edit'\n * @param params object containing real values to be replaced, example: { id:5 }\n */\nexport const stringUrlTemplateReplaceVueRouter = (template: string, params: UrlParams) => {\n if (template.indexOf(':') === -1) return template\n const newParts: string[] = []\n const parts = template.split('/')\n parts.forEach((part: string, index: number) => {\n newParts[index] = part\n if (!part.startsWith(':')) return\n newParts[index] = part.substring(1)\n const regex = /^:([a-zA-Z0-9_-]+).*/\n const match = part.match(regex)\n if (isNull(match) || !match[1]) return\n if (!isUndefined(params[match[1]])) newParts[index] = params[match[1]] + ''\n })\n return newParts.join('/')\n}\n\n/**\n * Slot names with dots are not valid, Vue takes dots as modifiers, so we must replace dots with dash.\n */\nexport const stringNormalizeForSlotName = (name: string) => name.replace('.', '-')\n\nexport const stringIsValidEmail = (email: string): boolean => {\n const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,63}$/\n return emailRegex.test(email)\n}\n","import type { InjectionKey } from 'vue'\nimport type { LanguageCode } from '@/composables/languageSettings'\n\nexport const SystemScopeSymbol: InjectionKey<string | undefined> = Symbol.for('anzu:SystemScope')\nexport const SubjectScopeSymbol: InjectionKey<string | undefined> = Symbol.for('anzu:SubjectScope')\nexport const AvailableLanguagesSymbol: InjectionKey<LanguageCode[] | undefined> = Symbol.for('anzu:AvailableLanguages')\nexport const DefaultLanguageSymbol: InjectionKey<LanguageCode | undefined> = Symbol.for('anzu:DefaultLanguage')\n","<script lang=\"ts\" setup>\nimport { computed } 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 tooltip?: string | undefined\n }>(),\n {\n user: undefined,\n size: 36,\n containerClass: '',\n tooltip: undefined,\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 <VTooltip\n v-if=\"tooltip\"\n activator=\"parent\"\n >\n {{ tooltip }}\n </VTooltip>\n </VAvatar>\n <div />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, type Ref, shallowRef, unref, watch } from 'vue'\nimport AAnzuUserAvatar from '@/components/AAnzuUserAvatar.vue'\nimport { isNull, isNumber, isUndefined } from '@/utils/common'\nimport type { CollabCachedUsersMap } from '@/components/collab/composables/collabHelpers'\nimport type { IntegerId } from '@/types/common'\nimport type { AnzuUserMinimal } from '@/types/AnzuUser'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n id: null | undefined | IntegerId\n users: CollabCachedUsersMap | Ref<CollabCachedUsersMap>\n isModerator?: boolean\n }>(),\n {\n isModerator: false,\n }\n)\n\nconst cached = shallowRef<undefined | AnzuUserMinimal>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst cachedUsers = unref(props.users)\nconst { t } = useI18n()\n\nconst item = computed(() => {\n if (isNumber(props.id) && props.id > 0) {\n return cachedUsers.get(props.id)\n }\n return undefined\n})\n\nconst tooltip = computed(() => {\n let prefix = ''\n if (props.isModerator) {\n prefix = t('common.collab.moderator') + ': '\n }\n if (item.value) {\n return item.value.person.fullName.length\n ? prefix + item.value.person.fullName\n : prefix + item.value.email.split('@')[0]\n }\n return undefined\n})\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || !newValue._loaded) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div class=\"d-inline-flex\">\n <span v-if=\"isNull(id) || isUndefined(id)\" />\n <template v-else-if=\"loaded\">\n <VBadge\n v-if=\"isModerator\"\n location=\"top right\"\n color=\"white\"\n :width=\"12\"\n :min-width=\"12\"\n :height=\"14\"\n :offset-x=\"-5\"\n :offset-y=\"-5\"\n >\n <template #badge>\n <VIcon\n color=\"grey-darken-2\"\n :size=\"14\"\n icon=\"mdi-crown\"\n />\n </template>\n <AAnzuUserAvatar\n :user=\"cached ?? undefined\"\n :size=\"20\"\n :tooltip=\"tooltip\"\n />\n </VBadge>\n <AAnzuUserAvatar\n v-else\n :user=\"cached ?? undefined\"\n :size=\"20\"\n :tooltip=\"tooltip\"\n />\n </template>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"ml-auto mr-auto\"\n />\n </div>\n</template>\n","import type { EventBusKey } from '@vueuse/core'\nimport { useEventBus } from '@vueuse/core'\nimport type { CollabFieldDataEnvelope, CollabRoom, CollabRoomPlainData } from '@/components/collab/types/Collab'\n\nexport interface CollabRoomDataChangedEvent {\n room: CollabRoom\n field: string\n}\n\nexport interface CollabJoinRequestEvent {\n room: CollabRoom\n userId: number\n timestamp: number\n}\n\nexport interface CollabApprovedJoinRequestEvent {\n room: CollabRoom\n}\n\nexport interface CollabRejectedJoinRequestEvent {\n room: CollabRoom\n}\n\nexport interface CollabStartingEvent {\n room: CollabRoom\n startedCallback: (data: CollabRoomPlainData) => void\n}\n\nexport interface CollabGatheringBufferDataEvent {\n room: CollabRoom\n}\n\nexport interface CollabRequestToTakeModerationEvent {\n room: CollabRoom\n userId: number\n timestamp: number\n}\n\nexport interface CollabApprovedRequestToTakeModerationEvent {\n room: CollabRoom\n}\n\nexport interface CollabRejectedRequestToTakeModerationEvent {\n room: CollabRoom\n}\n\nexport interface CollabKickedFromRoomEvent {\n room: CollabRoom\n}\n\nexport interface CollabPurgeRoomEvent {\n room: CollabRoom\n}\n\nexport const collabRoomDataChangedEventBusKey: EventBusKey<CollabRoomDataChangedEvent> =\n Symbol('anzu:collabRoomDataChanged')\n\nexport const collabReconnectEventBusKey: EventBusKey<'reconnect'> = Symbol('anzu:collabReconnect')\n\nexport const collabStartingEventBusKey: EventBusKey<CollabStartingEvent> = Symbol('anzu:collabStarting')\n\nexport const collabGatheringBufferDataEventBusKey: EventBusKey<CollabGatheringBufferDataEvent> = Symbol(\n 'anzu:collabGatheringBufferData'\n)\n\nexport const collabApprovedJoinRequestEventBusKey: EventBusKey<CollabApprovedJoinRequestEvent> = Symbol(\n 'anzu:collabApprovedJoinRequest'\n)\n\nexport const collabRejectedJoinRequestEventBusKey: EventBusKey<CollabRejectedJoinRequestEvent> = Symbol(\n 'anzu:collabRejectedJoinRequest'\n)\n\nexport const collabJoinRequestEventBusKey: EventBusKey<CollabJoinRequestEvent> = Symbol('anzu:collabJoinRequest')\n\nexport const collabApprovedRequestToTakeModerationEventBusKey: EventBusKey<CollabApprovedRequestToTakeModerationEvent> =\n Symbol('anzu:collabApprovedRequestToTakeModeration')\n\nexport const collabRejectedRequestToTakeModerationEventBusKey: EventBusKey<CollabRejectedRequestToTakeModerationEvent> =\n Symbol('anzu:collabRejectedRequestToTakeModeration')\n\nexport const collabRequestToTakeModerationEventBusKey: EventBusKey<CollabRequestToTakeModerationEvent> = Symbol(\n 'anzu:collabRequestToTakeModeration'\n)\n\nexport const collabKickedFromRoomEventBusKey: EventBusKey<CollabKickedFromRoomEvent> =\n Symbol('anzu:collabKickedFromRoom')\n\nexport const collabPurgeRoomEventBusKey: EventBusKey<CollabPurgeRoomEvent> =\n Symbol('anzu:collabPurgeRoom')\n\nexport function useCollabRoomDataChangeEventBus() {\n return useEventBus<CollabRoomDataChangedEvent, CollabFieldDataEnvelope>(collabRoomDataChangedEventBusKey)\n}\n\nexport function useCollabReconnectEventBus() {\n return useEventBus(collabReconnectEventBusKey)\n}\n\nexport function useCollabStartingEventBus() {\n return useEventBus<CollabStartingEvent, { startedCallback: (data: CollabRoomPlainData) => void }>(\n collabStartingEventBusKey\n )\n}\n\nexport function useCollabGatheringBufferDataEventBus() {\n return useEventBus<CollabGatheringBufferDataEvent>(collabGatheringBufferDataEventBusKey)\n}\n\nexport function useCollabApprovedJoinRequestEventBus() {\n return useEventBus<CollabApprovedJoinRequestEvent>(collabApprovedJoinRequestEventBusKey)\n}\n\nexport function useCollabRejectedJoinRequestEventBus() {\n return useEventBus<CollabRejectedJoinRequestEvent>(collabRejectedJoinRequestEventBusKey)\n}\n\nexport function useCollabJoinRequestEventBus() {\n return useEventBus<CollabJoinRequestEvent>(collabJoinRequestEventBusKey)\n}\n\nexport function useCollabApprovedRequestToTakeModerationEventBus() {\n return useEventBus<CollabApprovedRequestToTakeModerationEvent>(collabApprovedRequestToTakeModerationEventBusKey)\n}\n\nexport function useCollabRejectedRequestToTakeModerationEventBus() {\n return useEventBus<CollabRejectedRequestToTakeModerationEvent>(collabRejectedRequestToTakeModerationEventBusKey)\n}\n\nexport function useCollabRequestToTakeModerationEventBus() {\n return useEventBus<CollabRequestToTakeModerationEvent>(collabRequestToTakeModerationEventBusKey)\n}\n\nexport function useCollabKickedFromRoomEventBus() {\n return useEventBus<CollabKickedFromRoomEvent>(collabKickedFromRoomEventBusKey)\n}\n\nexport function useCollabPurgeRoomEventBus() {\n return useEventBus<CollabPurgeRoomEvent>(collabPurgeRoomEventBusKey)\n}\n\nexport const CollabFieldLockType = {\n Acquire: 'acquire',\n Release: 'release',\n} as const\nexport type CollabFieldLockTypeType = (typeof CollabFieldLockType)[keyof typeof CollabFieldLockType]\n\nexport const CollabFieldLockStatus = {\n Success: 'success',\n Failure: 'failure',\n} as const\nexport type CollabFieldLockStatusType = (typeof CollabFieldLockStatus)[keyof typeof CollabFieldLockStatus]\n\nexport interface CollabFieldLockStatusPayload {\n type: CollabFieldLockTypeType\n status: CollabFieldLockStatusType\n}\n\nexport const createFieldLockStatusPayload = (\n type: CollabFieldLockTypeType,\n status: CollabFieldLockStatusType\n): CollabFieldLockStatusPayload => ({\n type,\n status,\n})\n\nexport interface CollabFieldLockStatusEvent {\n room: CollabRoom\n field: string\n}\n\nexport const collabFieldLockStatusEventBusKey: EventBusKey<CollabFieldLockStatusEvent> =\n Symbol('anzu:collabFieldLockStatus')\n\nexport function useCollabFieldLockStatusEventBus() {\n return useEventBus<CollabFieldLockStatusEvent, CollabFieldLockStatusPayload>(collabFieldLockStatusEventBusKey)\n}\n","import type { RouteParams } from 'vue-router'\nimport type { CollabCachedUsersMap } from '@/components/collab/composables/collabHelpers'\n\nexport type CollabUserId = number\nexport type CollabUserIdNullable = number | null\n\nexport type CollabRoom = string\n\nexport type CollabComponentConfig =\n | undefined\n | {\n room: CollabRoom\n field: CollabFieldName\n cachedUsers: CollabCachedUsersMap\n }\n\nexport const CollabStatus = {\n Inactive: 'inactive',\n Active: 'active',\n} as const\nexport type CollabStatusType = (typeof CollabStatus)[keyof typeof CollabStatus]\n\nexport interface CollabRoomInfo {\n name: CollabRoom\n moderator: CollabUserIdNullable\n users: CollabUserId[]\n status: CollabStatusType\n options: CollabRoomOptions\n}\n\nexport interface CollabRoomsInfo extends Record<CollabRoom, CollabRoomInfo> {}\n\nexport interface CollabFieldDataEnvelope {\n type: 'scalar' | 'json'\n user: CollabUserId\n value: CollabFieldData\n}\n\nexport type CollabFieldData = unknown\nexport type CollabFieldName = string\nexport type CollabFieldLock = CollabUserIdNullable\n\nexport interface CollabRoomLocks extends Record<CollabFieldName, CollabFieldLock> {}\n\nexport interface CollabRoomData extends Record<CollabFieldName, CollabFieldDataEnvelope> {}\n\nexport interface CollabRoomPlainData extends Record<CollabFieldName, CollabFieldData> {}\n\nexport const CollabAccessRoomStatus = {\n Ok: 'ok',\n Occupied: 'occupied',\n Failed: 'failed',\n} as const\nexport type CollabAccessRoomStatusType = (typeof CollabAccessRoomStatus)[keyof typeof CollabAccessRoomStatus]\n\nexport interface CollabRoomInfoCallback {\n room: CollabRoomInfo\n}\n\ninterface CollabAccessRoomCallback {\n status: CollabAccessRoomStatusType\n}\n\nexport interface CollabSuccessAccessRoomCallback extends CollabAccessRoomCallback, CollabRoomInfoCallback {\n status: typeof CollabAccessRoomStatus.Ok\n}\n\nexport interface CollabOccupiedAccessRoomCallback extends CollabAccessRoomCallback, CollabRoomInfoCallback {\n status: typeof CollabAccessRoomStatus.Occupied\n}\n\nexport interface CollabFailedAccessRoomCallback extends CollabAccessRoomCallback {\n status: typeof CollabAccessRoomStatus.Failed\n reason: string\n}\n\nexport type CollabAccessRoomCallbackTypes =\n | CollabSuccessAccessRoomCallback\n | CollabOccupiedAccessRoomCallback\n | CollabFailedAccessRoomCallback\n\nexport function isCollabSuccessAccessRoomCallback(\n callback: CollabAccessRoomCallbackTypes\n): callback is CollabSuccessAccessRoomCallback {\n return callback.status === CollabAccessRoomStatus.Ok\n}\n\nexport function isCollabOccupiedAccessRoomCallback(\n callback: CollabAccessRoomCallbackTypes\n): callback is CollabSuccessAccessRoomCallback {\n return callback.status === CollabAccessRoomStatus.Occupied\n}\n\nexport const CollabChangeRoomLockStatus = {\n Ok: 'ok',\n Failed: 'failed',\n} as const\nexport type CollabChangeRoomLockStatusType =\n (typeof CollabChangeRoomLockStatus)[keyof typeof CollabChangeRoomLockStatus]\n\nexport interface CollabRoomLocksInfoCallback {\n locks: CollabRoomLocks | undefined | null\n}\n\ninterface CollabChangeRoomLocksInfoCallback {\n status: CollabChangeRoomLockStatusType\n}\n\nexport interface CollabSuccessChangeRoomLockCallback\n extends CollabChangeRoomLocksInfoCallback,\n CollabRoomLocksInfoCallback {\n status: typeof CollabChangeRoomLockStatus.Ok\n locks: CollabRoomLocks | undefined | null\n}\n\nexport interface CollabFailedChangeRoomLockCallback extends CollabChangeRoomLocksInfoCallback {\n status: typeof CollabChangeRoomLockStatus.Failed\n reason: string\n}\n\nexport type CollabChangeRoomLockCallbackTypes = CollabSuccessChangeRoomLockCallback | CollabFailedChangeRoomLockCallback\n\nexport function isCollabSuccessChangeRoomLockCallback(\n callback: CollabChangeRoomLockCallbackTypes\n): callback is CollabSuccessChangeRoomLockCallback {\n return callback.status === CollabChangeRoomLockStatus.Ok\n}\n\nexport function isCollabFailedChangeRoomLockCallback(\n callback: CollabChangeRoomLockCallbackTypes\n): callback is CollabFailedChangeRoomLockCallback {\n return callback.status === CollabChangeRoomLockStatus.Failed\n}\n\nexport interface CollabFieldLockOptions {\n forceFailure?: boolean\n}\n\nexport const CollabRoomJoinStrategy = {\n Free: 'free',\n Moderated: 'moderated',\n} as const\nexport type CollabRoomJoinStrategyType = (typeof CollabRoomJoinStrategy)[keyof typeof CollabRoomJoinStrategy]\n\nexport interface CollabRoomOptions {\n joinStrategy?: CollabRoomJoinStrategyType\n allowedSameUser?: boolean\n editors?: CollabFieldName[]\n}\n\nexport const CollabRequestToTakeModerationStatus = {\n Ok: 'ok',\n AlreadyRequested: 'alreadyRequested',\n Failed: 'failed',\n} as const\nexport type CollabRequestToTakeModerationStatusType =\n (typeof CollabRequestToTakeModerationStatus)[keyof typeof CollabRequestToTakeModerationStatus]\n\nexport interface CollabRequestToTakeModerationStatusCallback {\n status: CollabRequestToTakeModerationStatusType\n}\n\nexport const CollabRequestToJoinStatus = {\n Ok: 'ok',\n AlreadyRequested: 'alreadyRequested',\n Failed: 'failed',\n} as const\nexport type CollabRequestToJoinStatusType = (typeof CollabRequestToJoinStatus)[keyof typeof CollabRequestToJoinStatus]\n\nexport interface CollabRequestToJoinStatusCallback {\n status: CollabRequestToJoinStatusType\n}\n\nexport interface CollabClientToServerEvents {\n subscribeCollabRoomInfo: (room: CollabRoom, callback: (data: CollabRoomInfoCallback) => void) => void\n unsubscribeCollabRoomInfo: (room: CollabRoom, callback: (data: CollabRoomInfoCallback) => void) => void\n joinCollabRoom: (\n room: CollabRoom,\n options: CollabRoomOptions,\n callback: (data: CollabAccessRoomCallbackTypes) => void\n ) => void\n leaveCollabRoom: (room: CollabRoom, callback: (data: CollabAccessRoomCallbackTypes) => void) => void\n acquireFieldLock: (\n room: CollabRoom,\n field: CollabFieldName,\n options: CollabFieldLockOptions,\n callback: (data: CollabChangeRoomLockCallbackTypes) => void\n ) => void\n releaseFieldLock: (\n room: CollabRoom,\n field: CollabFieldName,\n changedData: unknown,\n options: CollabFieldLockOptions,\n callback: (data: CollabChangeRoomLockCallbackTypes) => void\n ) => void\n changeFieldData: (\n room: CollabRoom,\n field: CollabFieldName,\n changedData: unknown,\n callback: (data: CollabChangeRoomLockCallbackTypes) => void\n ) => void\n requestToJoin: (\n room: CollabRoom,\n timestamp: number,\n callback: (data: CollabRequestToJoinStatusCallback) => void\n ) => void\n approveRequestToJoin: (room: CollabRoom, userId: CollabUserId) => void\n rejectRequestToJoin: (room: CollabRoom, userId: CollabUserId) => void\n enteredCollabRoom: (room: CollabRoom) => void\n requestToTakeModeration: (\n room: CollabRoom,\n timestamp: number,\n callback: (data: CollabRequestToTakeModerationStatusCallback) => void\n ) => void\n approveRequestToTakeModeration: (room: CollabRoom) => void\n rejectRequestToTakeModeration: (room: CollabRoom) => void\n kickUserFromRoom: (room: CollabRoom, userId: CollabUserId) => void\n purgeRoom: (room: CollabRoom) => void\n transferModeration: (room: CollabRoom, userId: CollabUserId) => void\n fetchRoomsInfo: (rooms: CollabRoom[], callback: (data: CollabRoomsInfo) => void) => void\n}\n\nexport interface CollabServerToClientEvents {\n collabRoomChanged: (room: CollabRoomInfo) => void\n collabRoomLocksChanged: (room: CollabRoom, locks: CollabRoomLocks) => void\n collabRoomDataChanged: (room: CollabRoom, data: CollabRoomData) => void\n requestToJoin: (room: CollabRoom, user: CollabUserId, timestamp: number) => void\n approvedRequestToJoin: (room: CollabRoom) => void\n rejectedRequestToJoin: (room: CollabRoom) => void\n startCollab: (room: CollabRoom, callback: (data: CollabRoomPlainData) => void) => void\n requestToTakeModeration: (room: CollabRoom, user: CollabUserId, timestamp: number) => void\n transferredModeration: (room: CollabRoom) => void\n approvedRequestToTakeModeration: (room: CollabRoom) => void\n rejectedRequestToTakeModeration: (room: CollabRoom) => void\n kickedFromRoom: (room: CollabRoom) => void\n}\n\nexport interface CollabConfig extends CollabRoomOptions {\n room: CollabRoom\n joinStrategy: CollabRoomJoinStrategyType\n occupiedOrKickedRedirectToRoute: string\n editors: CollabFieldName[]\n}\nexport type CollabRouteMeta = (params: RouteParams) => CollabConfig\n\nexport interface CollabDelayedRequest {\n userId: CollabUserId\n timestamp: number\n}\n","import { ref } from 'vue'\nimport type { CommonAdminCollabOptions } from '@/AnzuSystemsCommonAdmin'\nimport { isUndefined } from '@/utils/common'\n\nconst collabOptions = ref<CommonAdminCollabOptions>({\n enabled: false,\n socketUrl: '',\n beforeReconnect: () => new Promise((resolve) => resolve()),\n})\n\nexport function initCommonAdminCollabOptions(data: CommonAdminCollabOptions | undefined) {\n if (isUndefined(data)) return\n collabOptions.value = data\n}\n\nexport function useCommonAdminCollabOptions() {\n if (isUndefined(collabOptions.value)) {\n throw new Error(\"Composable can't be used without properly configured common admin.\")\n }\n\n return {\n collabOptions,\n }\n}\n","import type { Socket } from 'socket.io-client'\nimport type {\n CollabClientToServerEvents,\n CollabFieldData,\n CollabFieldLock,\n CollabFieldName,\n CollabRoom,\n CollabRoomInfo,\n CollabRoomPlainData,\n CollabServerToClientEvents,\n} from '@/components/collab/types/Collab'\nimport { computed, reactive, ref, type Ref, toRaw } from 'vue'\nimport { useCollabGatheringBufferDataEventBus } from '@/components/collab/composables/collabEventBus'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\n\nconst collabConnected = ref(true)\nconst collabSocket: Ref<Socket<CollabServerToClientEvents, CollabClientToServerEvents> | undefined> = ref()\nconst collabRoomInfoState = reactive(new Map<CollabRoom, CollabRoomInfo>())\nconst collabFieldLocksState = reactive(new Map<CollabRoom, Map<CollabFieldName, CollabFieldLock>>())\nconst collabFieldDataBufferState = reactive(new Map<CollabRoom, Map<CollabFieldName, CollabFieldData>>())\n\nexport function useCollabState() {\n const { collabOptions } = useCommonAdminCollabOptions()\n\n const collabReconnecting = computed(() => collabOptions.value.enabled && !collabConnected.value)\n\n const gatherBufferData = (room: CollabRoom): CollabRoomPlainData => {\n const collabGatheringBufferDataEventBus = useCollabGatheringBufferDataEventBus()\n collabGatheringBufferDataEventBus.emit({ room })\n let dataBuffer: CollabRoomPlainData = {}\n const dataBufferMap = collabFieldDataBufferState.get(room)\n if (dataBufferMap) {\n dataBuffer = toRaw(Object.fromEntries(dataBufferMap.entries()))\n collabFieldDataBufferState.delete(room)\n }\n return dataBuffer\n }\n\n return {\n collabReconnecting,\n collabConnected,\n collabSocket,\n collabRoomInfoState,\n collabFieldLocksState,\n collabFieldDataBufferState,\n gatherBufferData,\n }\n}\n","import { ref } from 'vue'\nimport type { IntegerIdNullable } from '@/types/common'\n\nconst currentUserId = ref<IntegerIdNullable>(null)\n\nexport function useCollabCurrentUserId() {\n function setCollabUserCurrentId(value: IntegerIdNullable) {\n currentUserId.value = value\n }\n\n return {\n setCollabUserCurrentId,\n currentUserId,\n }\n}\n","import {\n type CollabChangeRoomLockCallbackTypes,\n type CollabFieldData,\n type CollabFieldDataEnvelope,\n type CollabFieldLockOptions,\n type CollabFieldName,\n type CollabRoom,\n CollabStatus,\n isCollabFailedChangeRoomLockCallback,\n isCollabSuccessChangeRoomLockCallback,\n} from '@/components/collab/types/Collab'\nimport { computed, ref } from 'vue'\nimport {\n CollabFieldLockStatus,\n type CollabFieldLockStatusEvent,\n type CollabFieldLockStatusPayload,\n CollabFieldLockType,\n type CollabGatheringBufferDataEvent,\n type CollabRoomDataChangedEvent,\n createFieldLockStatusPayload,\n useCollabFieldLockStatusEventBus,\n useCollabGatheringBufferDataEventBus,\n useCollabRoomDataChangeEventBus,\n} from '@/components/collab/composables/collabEventBus'\nimport { type Fn, tryOnBeforeUnmount } from '@vueuse/core'\nimport { useCollabState } from '@/components/collab/composables/collabState'\nimport { isDefined, isUndefined } from '@/utils/common'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\nimport { useCollabCurrentUserId } from '@/components/collab/composables/collabCurrentUserId'\n\nexport function useCollabField(room: CollabRoom, field: CollabFieldName, disableAutoUnsubscribe = false) {\n const { collabOptions } = useCommonAdminCollabOptions()\n const { currentUserId } = useCollabCurrentUserId()\n const { collabSocket, collabFieldLocksState, collabFieldDataBufferState, collabRoomInfoState } = useCollabState()\n\n const changeEventBus = useCollabRoomDataChangeEventBus()\n const unsubscribeCollabFieldDataChangeListener = ref<undefined | Fn>()\n const fieldChangeCallback = ref<undefined | ((payload: CollabFieldDataEnvelope) => void)>()\n\n const fieldLockStatusEventBus = useCollabFieldLockStatusEventBus()\n const unsubscribeCollabFieldLockStatusListener = ref<undefined | Fn>()\n const fieldLockStatusCallback = ref<undefined | ((payload: CollabFieldLockStatusPayload) => void)>()\n\n const collabGatheringBufferDataEventBus = useCollabGatheringBufferDataEventBus()\n const unsubscribeCollabGatheringBufferData = ref<undefined | Fn>()\n const collabGatheringBufferDataCallback = ref<undefined | Fn>()\n\n const fieldChangeEventBusListener = (event: CollabRoomDataChangedEvent, payload?: CollabFieldDataEnvelope) => {\n if (\n event.room !== room ||\n event.field !== field ||\n isUndefined(payload) ||\n isUndefined(fieldChangeCallback.value)\n ) {\n return\n }\n fieldChangeCallback.value(payload)\n }\n\n const fieldLockStatusEventBusListener = (\n event: CollabFieldLockStatusEvent,\n payload?: CollabFieldLockStatusPayload\n ) => {\n if (\n event.room !== room ||\n event.field !== field ||\n isUndefined(payload) ||\n isUndefined(fieldLockStatusCallback.value)\n ) {\n return\n }\n fieldLockStatusCallback.value(payload)\n }\n\n const collabGatheringBufferDataEventBusListener = (event: CollabGatheringBufferDataEvent) => {\n if (event.room === room && isDefined(collabGatheringBufferDataCallback.value)) {\n collabGatheringBufferDataCallback.value()\n }\n }\n\n const addCollabFieldDataChangeListener = (callback: (data: CollabFieldDataEnvelope) => void) => {\n fieldChangeCallback.value = callback\n unsubscribeCollabFieldDataChangeListener.value = changeEventBus.on(fieldChangeEventBusListener)\n }\n const addCollabFieldLockStatusListener = (callback: (data: CollabFieldLockStatusPayload) => void) => {\n fieldLockStatusCallback.value = callback\n unsubscribeCollabFieldLockStatusListener.value = fieldLockStatusEventBus.on(fieldLockStatusEventBusListener)\n }\n\n const addCollabGatheringBufferDataListener = (callback: () => void) => {\n collabGatheringBufferDataCallback.value = callback\n unsubscribeCollabGatheringBufferData.value = collabGatheringBufferDataEventBus.on(\n collabGatheringBufferDataEventBusListener\n )\n }\n\n tryOnBeforeUnmount(() => {\n if (disableAutoUnsubscribe) return\n if (isDefined(unsubscribeCollabFieldDataChangeListener.value)) {\n unsubscribeCollabFieldDataChangeListener.value()\n }\n if (isDefined(unsubscribeCollabFieldLockStatusListener.value)) {\n unsubscribeCollabFieldLockStatusListener.value()\n }\n if (isDefined(unsubscribeCollabGatheringBufferData.value)) {\n unsubscribeCollabGatheringBufferData.value()\n }\n })\n\n const lockedByUser = computed(() => {\n const roomLockData = collabFieldLocksState.get(room)\n if (roomLockData) {\n const lock = roomLockData.get(field)\n if (lock && currentUserId.value !== lock) {\n return lock\n }\n }\n return null\n })\n\n const acquireCollabFieldLock = (options: Partial<CollabFieldLockOptions> = {}) => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n const roomInfo = collabRoomInfoState.get(room)\n if (roomInfo && roomInfo.status === CollabStatus.Inactive) return\n collabSocket.value\n ?.timeout(1000)\n .emit('acquireFieldLock', room, field, options, (error, response: CollabChangeRoomLockCallbackTypes) => {\n const statusEvent: CollabFieldLockStatusEvent = { field, room }\n if (error || isCollabFailedChangeRoomLockCallback(response)) {\n return void fieldLockStatusEventBus.emit(\n statusEvent,\n createFieldLockStatusPayload(CollabFieldLockType.Acquire, CollabFieldLockStatus.Failure)\n )\n }\n if (isCollabSuccessChangeRoomLockCallback(response)) {\n if (!collabFieldLocksState.has(room)) {\n collabFieldLocksState.set(room, new Map())\n }\n const locks = new Map(response.locks ? Object.entries(response.locks) : [])\n for (const [field, lock] of locks.entries()) {\n collabFieldLocksState.get(room)?.set(field, lock)\n }\n\n return void fieldLockStatusEventBus.emit(\n statusEvent,\n createFieldLockStatusPayload(CollabFieldLockType.Acquire, CollabFieldLockStatus.Success)\n )\n }\n })\n }\n\n const releaseCollabFieldLock = (data: CollabFieldData, options: Partial<CollabFieldLockOptions> = {}) => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n const roomInfo = collabRoomInfoState.get(room)\n if (roomInfo && roomInfo.status === CollabStatus.Inactive) {\n if (!collabFieldDataBufferState.has(room)) {\n collabFieldDataBufferState.set(room, new Map())\n }\n collabFieldDataBufferState.get(room)?.set(field, data)\n return\n }\n collabSocket.value\n ?.timeout(1000)\n .emit('releaseFieldLock', room, field, data, options, (error, response: CollabChangeRoomLockCallbackTypes) => {\n const statusEvent: CollabFieldLockStatusEvent = { field, room }\n if (error || isCollabFailedChangeRoomLockCallback(response)) {\n return void fieldLockStatusEventBus.emit(\n statusEvent,\n createFieldLockStatusPayload(CollabFieldLockType.Release, CollabFieldLockStatus.Failure)\n )\n }\n if (isCollabSuccessChangeRoomLockCallback(response)) {\n if (!collabFieldLocksState.has(room)) {\n collabFieldLocksState.set(room, new Map())\n }\n if (response.locks) {\n for (const field of Object.keys(response.locks)) {\n collabFieldLocksState.get(room)?.delete(field)\n }\n }\n\n return void fieldLockStatusEventBus.emit(\n statusEvent,\n createFieldLockStatusPayload(CollabFieldLockType.Release, CollabFieldLockStatus.Success)\n )\n }\n })\n }\n\n const changeCollabFieldData = (data: CollabFieldData) => {\n if (!collabOptions.value.enabled || isUndefined(collabSocket.value)) return\n const roomInfo = collabRoomInfoState.get(room)\n if (roomInfo && roomInfo.status === CollabStatus.Inactive) return\n collabSocket.value.emit('changeFieldData', room, field, data, () => {\n return\n })\n }\n\n return {\n addCollabFieldDataChangeListener,\n addCollabFieldLockStatusListener,\n addCollabGatheringBufferDataListener,\n acquireCollabFieldLock,\n releaseCollabFieldLock,\n changeCollabFieldData,\n lockedByUser,\n collabFieldDataBufferState,\n unsubscribeCollabFieldDataChangeListener,\n unsubscribeCollabFieldLockStatusListener,\n unsubscribeCollabGatheringBufferData,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, inject, ref, watch } from 'vue'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport { isDefined, 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'\nimport ACollabLockedByUser from '@/components/collab/components/ACollabLockedByUser.vue'\nimport {\n CollabFieldLockStatus,\n type CollabFieldLockStatusPayload,\n CollabFieldLockType,\n} from '@/components/collab/composables/collabEventBus'\nimport type { CollabComponentConfig, CollabFieldData, CollabFieldLockOptions } from '@/components/collab/types/Collab'\nimport { useCollabField } from '@/components/collab/composables/collabField'\nimport type { IntegerIdNullable } from '@/types/common'\nimport type { VTextField } from 'vuetify/components/VTextField'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\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 collab?: CollabComponentConfig\n disabled?: boolean\n placeholder?: undefined | string\n persistentPlaceholder?: boolean\n help?: string | 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 collab: undefined,\n disabled: undefined,\n placeholder: undefined,\n persistentPlaceholder: false,\n help: 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 (e: 'focus', data: string | number | null | undefined): void\n}>()\n\nconst textFieldRef = ref<InstanceType<typeof VTextField> | null>(null)\n\n// Collaboration\nconst { collabOptions } = useCommonAdminCollabOptions()\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst releaseFieldLock = ref((data: CollabFieldData, options?: Partial<CollabFieldLockOptions>) => {})\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst acquireFieldLock = ref((options?: Partial<CollabFieldLockOptions>) => {})\nconst lockedByUserLocal = ref<IntegerIdNullable>(null)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (collabOptions.value.enabled && isDefined(props.collab)) {\n const {\n releaseCollabFieldLock,\n acquireCollabFieldLock,\n addCollabFieldLockStatusListener,\n addCollabGatheringBufferDataListener,\n lockedByUser,\n } = useCollabField(props.collab.room, props.collab.field)\n releaseFieldLock.value = releaseCollabFieldLock\n acquireFieldLock.value = acquireCollabFieldLock\n watch(\n lockedByUser,\n (newValue) => {\n lockedByUserLocal.value = newValue\n },\n { immediate: true }\n )\n addCollabFieldLockStatusListener((data: CollabFieldLockStatusPayload) => {\n if (data.status === CollabFieldLockStatus.Failure && data.type === CollabFieldLockType.Acquire) {\n textFieldRef.value?.blur()\n }\n })\n addCollabGatheringBufferDataListener(() => {\n textFieldRef.value?.blur()\n })\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 releaseFieldLock.value(props.modelValue)\n}\n\nconst onFocus = () => {\n emit('focus', props.modelValue)\n acquireFieldLock.value()\n}\n\nconst errorMessageComputed = computed(() => {\n if (isDefined(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 (isDefined(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 (isDefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n\nconst disabledComputed = computed(() => {\n if (isDefined(props.disabled)) return props.disabled\n return !!lockedByUserLocal.value\n})\n\nconst focus = () => {\n textFieldRef.value?.focus()\n}\n\ndefineExpose({\n focus,\n})\n</script>\n\n<template>\n <VTextField\n ref=\"textFieldRef\"\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 :disabled=\"disabledComputed\"\n :placeholder=\"placeholder\"\n :persistent-placeholder=\"persistentPlaceholder\"\n trim\n autocomplete=\"off\"\n @click:append=\"(event: any) => emit('click:append', event)\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\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 <template\n v-if=\"lockedByUserLocal\"\n #append-inner\n >\n <slot\n name=\"locked\"\n :user-id=\"lockedByUserLocal\"\n >\n <ACollabLockedByUser\n v-if=\"collab\"\n :id=\"lockedByUserLocal\"\n :users=\"collab.cachedUsers\"\n />\n </slot>\n </template>\n <template\n v-if=\"$slots.prepend\"\n #prepend\n >\n <slot name=\"prepend\" />\n </template>\n <template\n v-if=\"help\"\n #append\n >\n <VIcon\n v-tooltip=\"help\"\n icon=\"mdi-help-circle-outline\"\n />\n </template>\n </VTextField>\n</template>\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 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","import { computed, reactive } from 'vue'\nimport type { Pagination } from '@/types/Pagination'\n\nexport function usePagination(sortBy: string | null = 'id', sortDescending: boolean = true) {\n return reactive<Pagination>({\n sortBy: sortBy,\n descending: sortDescending,\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","import { computed, onMounted, type Ref, watch } from 'vue'\nimport { i18n } from '@/plugins/i18n'\nimport type { Pagination } from '@/types/Pagination'\nimport { usePagination } from '@/composables/system/pagination'\nimport { isArray, isObject, isUndefined } from '@/utils/common'\n\nexport const DATETIME_AUTO_LABEL_TRACKING = ['createdAt', 'modifiedAt']\n\nexport const SORT_BY_SCORE = '_score'\nexport const SORT_BY_ID = 'id'\nexport const SORT_BY_SCORE_DATE = 'score_date'\nexport const SORT_BY_SCORE_BEST = 'score_best'\nexport const SortOrder = {\n Asc: 'asc',\n Desc: 'desc',\n} as const\nexport type SortOrderType = (typeof SortOrder)[keyof typeof SortOrder]\n\nexport type DatatableSortBy =\n | {\n key: string\n order: SortOrderType\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 maxWidth?: number\n}\n\nexport type ColumnInternalValues = {\n key: string\n title?: string\n sortable: boolean\n fixed: boolean\n}\n\nexport type StoredData = {\n hidden?: string[]\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 customInitialPagination: Pagination | undefined = undefined,\n customI18n: undefined | any = undefined,\n showExpand: undefined | boolean = undefined,\n storeId: string | undefined = undefined\n) {\n const localI18n = customI18n ?? i18n\n const { t } = localI18n.global || localI18n\n const pagination: Pagination = usePagination()\n if (customInitialPagination) {\n for (const prop of Object.keys(pagination)) {\n if (prop in customInitialPagination) {\n // @ts-ignore\n pagination[prop] = customInitialPagination[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 if (showExpand) columns.push({ key: 'data-table-expand', sortable: false })\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: { key: string; order: SortOrderType } | undefined | null) => {\n if (!sortBy) {\n pagination.sortBy = null\n return\n }\n pagination.sortBy = sortBy.key\n pagination.descending = sortBy.order === SortOrder.Desc ? true : false\n }\n\n const loadStoredColumns = () => {\n if (!storeId || !localStorage) return\n const stored = localStorage.getItem(storeId)\n if (!stored) return\n const storedData = JSON.parse(stored) as StoredData\n if (!isObject(storedData)) return\n if (!isArray(storedData.hidden)) return\n columnsHidden.value = storedData.hidden as string[]\n }\n\n const storeColumns = (columns: string[]) => {\n if (!storeId || !localStorage) return\n localStorage.setItem(storeId, JSON.stringify({ hidden: columns }))\n }\n\n onMounted(() => {\n loadStoredColumns()\n })\n\n watch(columnsHidden, (newValue) => {\n storeColumns(newValue)\n })\n\n return {\n columnsAll,\n columnsVisible,\n columnsHidden,\n updateSortBy,\n pagination,\n }\n}\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","(function(){\"use strict\";var o;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:#fff;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(n){console.error(\"vite-plugin-css-injected-by-js\",n)}})();\nimport { defineComponent as Q, ref as X, computed as h, onMounted as Z, onUnmounted as tt, createVNode as l, TransitionGroup as et, mergeProps as nt, Fragment as H, isVNode as ot } from \"vue\";\nconst B = /* @__PURE__ */ new Map();\nfunction it(t) {\n return { all: t = t || /* @__PURE__ */ new Map(), on: function(o, i) {\n var a = t.get(o);\n a ? a.push(i) : t.set(o, [i]);\n }, off: function(o, i) {\n var a = t.get(o);\n a && (i ? a.splice(a.indexOf(i) >>> 0, 1) : t.set(o, []));\n }, emit: function(o, i) {\n var a = t.get(o);\n a && a.slice().map(function(r) {\n r(i);\n }), (a = t.get(\"*\")) && a.slice().map(function(r) {\n r(o, i);\n });\n } };\n}\nconst y = it(), T = \"[-+]?[0-9]*.?[0-9]+\", R = [\n {\n name: \"px\",\n regexp: new RegExp(`^${T}px$`)\n },\n {\n name: \"%\",\n regexp: new RegExp(`^${T}%$`)\n },\n /**\n * Fallback option\n * If no suffix specified, assigning \"px\"\n */\n {\n name: \"px\",\n regexp: new RegExp(`^${T}$`)\n }\n], at = (t) => {\n if (t === \"auto\")\n return {\n type: t,\n value: 0\n };\n for (let o = 0; o < R.length; o++) {\n const i = R[o];\n if (i.regexp.test(t))\n return {\n type: i.name,\n value: parseFloat(t)\n };\n }\n return {\n type: \"\",\n value: t\n };\n}, st = (t) => {\n switch (typeof t) {\n case \"number\":\n return { type: \"px\", value: t };\n case \"string\":\n return at(t);\n default:\n return { type: \"\", value: t };\n }\n}, j = {\n x: /* @__PURE__ */ new Set([\"left\", \"center\", \"right\"]),\n y: /* @__PURE__ */ new Set([\"top\", \"bottom\"])\n}, rt = /* @__PURE__ */ ((t) => () => t++)(0), lt = (t) => typeof t != \"string\" ? [] : t.split(/\\s+/gi).filter(Boolean), ct = (t) => {\n typeof t == \"string\" && (t = lt(t));\n let o = null, i = null;\n return t.forEach((a) => {\n j.y.has(a) && (i = a), j.x.has(a) && (o = a);\n }), { x: o, y: i };\n}, b = {\n position: [\"top\", \"right\"],\n cssAnimation: \"vn-fade\",\n velocityAnimation: {\n enter: (t) => ({\n height: [t.clientHeight, 0],\n opacity: [1, 0]\n }),\n leave: {\n height: 0,\n opacity: [0, 1]\n }\n }\n}, ut = (t, o) => {\n let i, a, r = o;\n const m = () => {\n a = Date.now(), i = setTimeout(t, r);\n }, g = () => {\n clearTimeout(i), r -= Date.now() - a;\n };\n return m(), {\n start: m,\n stop: g\n };\n};\nfunction ft(t) {\n return typeof t == \"function\" || Object.prototype.toString.call(t) === \"[object Object]\" && !ot(t);\n}\nconst v = {\n IDLE: 0,\n DESTROYED: 2\n}, dt = /* @__PURE__ */ Q({\n // eslint-disable-next-line vue/multi-word-component-names\n name: \"notifications\",\n props: {\n group: {\n type: String,\n default: \"\"\n },\n /** \n * Width of notification holder, can be `%`, `px` string or number.\n * @example '100%', '200px', 200 \n * */\n width: {\n type: [Number, String],\n default: 300\n },\n reverse: {\n type: Boolean,\n default: !1\n },\n position: {\n type: [String, Array],\n default: () => b.position\n },\n classes: {\n type: [String, Array],\n default: \"vue-notification\"\n },\n animationType: {\n type: String,\n default: \"css\",\n validator(t) {\n return t === \"css\" || t === \"velocity\";\n }\n },\n animation: {\n type: Object,\n default() {\n return b.velocityAnimation;\n }\n },\n animationName: {\n type: String,\n default: b.cssAnimation\n },\n speed: {\n type: Number,\n default: 300\n },\n /** Time (in ms) to keep the notification on screen (if **negative** - notification will stay **forever** or until clicked) */\n duration: {\n type: Number,\n default: 3e3\n },\n delay: {\n type: Number,\n default: 0\n },\n max: {\n type: Number,\n default: 1 / 0\n },\n ignoreDuplicates: {\n type: Boolean,\n default: !1\n },\n closeOnClick: {\n type: Boolean,\n default: !0\n },\n pauseOnHover: {\n type: Boolean,\n default: !1\n },\n /** Use [v-html](https://vuejs.org/api/built-in-directives.html#v-html) to set `title` and `text` */\n dangerouslySetInnerHtml: {\n type: Boolean,\n default: !1\n }\n },\n emits: {\n /* eslint-disable @typescript-eslint/no-unused-vars */\n click: (t) => !0,\n destroy: (t) => !0,\n start: (t) => !0\n /* eslint-enable @typescript-eslint/no-unused-vars */\n },\n slots: Object,\n setup: (t, {\n emit: o,\n slots: i,\n expose: a\n }) => {\n const r = X([]), m = B.get(\"velocity\"), g = h(() => t.animationType === \"velocity\"), c = h(() => r.value.filter((e) => e.state !== v.DESTROYED)), D = h(() => st(t.width)), S = h(() => {\n const {\n x: e,\n y: n\n } = ct(t.position), s = D.value.value, u = D.value.type, p = {\n width: s + u\n };\n return n && (p[n] = \"0px\"), e && (e === \"center\" ? p.left = `calc(50% - ${+s / 2}${u})` : p[e] = \"0px\"), p;\n }), L = h(() => g.value ? {\n onEnter: G,\n onLeave: W,\n onAfterLeave: A\n } : {}), k = (e) => {\n o(\"click\", e), t.closeOnClick && d(e);\n }, C = (e) => {\n var n;\n t.pauseOnHover && ((n = e.timer) == null || n.stop());\n }, P = (e) => {\n var n;\n t.pauseOnHover && ((n = e.timer) == null || n.start());\n }, N = (e = {}) => {\n if (e.group || (e.group = \"\"), e.data || (e.data = {}), t.group !== e.group)\n return;\n if (e.clean || e.clear) {\n F();\n return;\n }\n const n = typeof e.duration == \"number\" ? e.duration : t.duration, s = typeof e.speed == \"number\" ? e.speed : t.speed, u = typeof e.ignoreDuplicates == \"boolean\" ? e.ignoreDuplicates : t.ignoreDuplicates, {\n title: p,\n text: U,\n type: q,\n data: z,\n id: J\n } = e, f = {\n id: J || rt(),\n title: p,\n text: U,\n type: q,\n state: v.IDLE,\n speed: s,\n length: n + 2 * s,\n data: z,\n duplicates: 0\n };\n n >= 0 && (f.timer = ut(() => d(f), f.length));\n const I = \"bottom\" in S.value, K = t.reverse ? !I : I;\n let x = -1;\n const $ = c.value.find((M) => M.title === e.title && M.text === e.text);\n if (u && $) {\n $.duplicates++;\n return;\n }\n K ? (r.value.push(f), o(\"start\", f), c.value.length > t.max && (x = 0)) : (r.value.unshift(f), o(\"start\", f), c.value.length > t.max && (x = c.value.length - 1)), x !== -1 && d(c.value[x]);\n }, O = (e) => {\n _(e);\n }, Y = (e) => [\"vue-notification-template\", t.classes, e.type || \"\"], V = (e) => g.value ? void 0 : {\n transition: `all ${e.speed}ms`\n }, d = (e) => {\n var n;\n (n = e.timer) == null || n.stop(), e.state = v.DESTROYED, A(), o(\"destroy\", e);\n }, _ = (e) => {\n const n = r.value.find((s) => s.id === e);\n n && d(n);\n }, F = () => {\n c.value.forEach(d);\n }, w = (e, n) => {\n var u;\n const s = (u = t.animation) == null ? void 0 : u[e];\n return typeof s == \"function\" ? s(n) : s;\n }, G = (e, n) => {\n const s = w(\"enter\", e);\n m(e, s, {\n duration: t.speed,\n complete: n\n });\n }, W = (e, n) => {\n const s = w(\"leave\", e);\n m(e, s, {\n duration: t.speed,\n complete: n\n });\n };\n function A() {\n r.value = r.value.filter((e) => e.state !== v.DESTROYED);\n }\n return Z(() => {\n y.on(\"add\", N), y.on(\"close\", O);\n }), tt(() => {\n y.off(\"add\", N), y.off(\"close\", O);\n }), () => {\n let e;\n return l(\"div\", {\n class: \"vue-notification-group\",\n style: S.value\n }, [l(et, nt(L.value, {\n tag: \"div\",\n css: !g.value,\n name: t.animationName\n }), ft(e = c.value.map((n) => l(\"div\", {\n key: n.id,\n class: \"vue-notification-wrapper\",\n style: V(n),\n \"data-id\": n.id,\n onMouseenter: () => C(n),\n onMouseleave: () => P(n)\n }, [i.body ? i.body({\n item: n,\n class: [t.classes, n.type],\n close: () => d(n)\n }) : l(\"div\", {\n class: Y(n),\n onClick: () => k(n)\n }, [t.dangerouslySetInnerHtml ? l(H, null, [n.title ? l(\"div\", {\n class: \"notification-title\",\n innerHTML: n.title\n }, null) : null, l(\"div\", {\n class: \"notification-content\",\n innerHTML: n.text\n }, null)]) : l(H, null, [n.title ? l(\"div\", {\n class: \"notification-title\"\n }, [n.title]) : null, l(\"div\", {\n class: \"notification-content\"\n }, [n.text])])])]))) ? e : {\n default: () => [e]\n })]);\n };\n }\n}), E = (t) => {\n typeof t == \"string\" && (t = { title: \"\", text: t }), typeof t == \"object\" && y.emit(\"add\", t);\n};\nE.close = (t) => {\n y.emit(\"close\", t);\n};\nconst gt = () => ({ notify: E }), pt = \"Notifications\";\nfunction yt(t, o = {}) {\n Object.entries(o).forEach((a) => B.set(...a));\n const i = o.name || \"notify\";\n t.config.globalProperties[\"$\" + i] = E, t.component(o.componentName || pt, dt);\n}\nconst ht = {\n install: yt\n};\nexport {\n dt as Notifications,\n ht as default,\n E as notify,\n gt as useNotification\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_ACCEPTED = 202\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_NOT_FOUND = 404\nexport const HTTP_STATUS_UNPROCESSABLE_ENTITY = 422\n\nexport const HTTP_STATUS_VALID_ALL = [HTTP_STATUS_OK, HTTP_STATUS_CREATED, HTTP_STATUS_ACCEPTED, HTTP_STATUS_NO_CONTENT]\n","import axios, { type AxiosError } from 'axios'\nimport { HTTP_STATUS_FORBIDDEN } from '@/composables/statusCodes'\n\nexport const axiosErrorResponseIsForbidden = (error: Error): error is AxiosError => {\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\n/**\n * Check if AnzuApiValidationError error contain a specific error for a specific field\n *\n * @param error\n * @param errorName - Name of the error to check for (e.g., 'error_field_not_unique')\n * @param fieldName - Name of the field to check (e.g., 'cms.userAdminConfig.model.systemResource')\n */\n\nexport const hasAnzuApiValidationErrorSpecific = (\n error: AnzuApiValidationError,\n errorName: string,\n fieldName: string,\n) => {\n return error.fields.some((field) => field.field === fieldName && field.errors.includes(errorName))\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 axios, { type AxiosError } from 'axios'\nimport { HTTP_STATUS_UNPROCESSABLE_ENTITY } from '@/composables/statusCodes'\n\nexport interface AnzuApiDependencyExistsResponseData {\n contextId: string\n error: string\n dependencies: string[]\n}\n\nconst ERROR_VALIDATION = 'dependency_exists_error'\n\nexport const axiosErrorResponseHasDependencyExistsData = (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?.dependencies\n )\n}\n\nexport const isAnzuApiDependencyExistsError = (error: any): error is AnzuApiDependencyExistsError => {\n return error instanceof AnzuApiDependencyExistsError\n}\n\nfunction resolveResponseData(axiosError: AxiosError) {\n const data = axiosError.response?.data as AnzuApiDependencyExistsResponseData\n\n return data.dependencies\n}\n\nexport class AnzuApiDependencyExistsError extends Error {\n dependencies: string[]\n\n constructor(axiosError: AxiosError, system: string, entity: string, cause?: Error, message = '') {\n super(message)\n this.name = 'AnzuApiDependencyExistsError'\n this.cause = cause\n this.message = message\n this.dependencies = resolveResponseData(axiosError)\n }\n}\n","import axios from 'axios'\n\nexport const isAnzuApiTimeoutError = (error: any): error is AnzuApiTimeoutError => {\n return error instanceof AnzuApiTimeoutError\n}\n\nexport const axiosErrorIsTimeout = (error: Error) => {\n return (\n axios.isAxiosError(error) &&\n (error.code === 'ECONNABORTED' ||\n error.message.includes('timeout') ||\n (error.cause instanceof Error && error.cause.message.includes('timeout')))\n )\n}\n\n/**\n * Custom error class for timeout error\n */\nexport class AnzuApiTimeoutError extends Error {\n constructor(cause: Error | undefined = undefined) {\n super('API request timed out')\n this.name = 'AnzuApiAxiosError'\n this.cause = cause\n }\n}\n","export const isAnzuApiAxiosError = (error: any): error is AnzuApiAxiosError => {\n return error instanceof AnzuApiAxiosError\n}\n\n/**\n * Custom error class for Axios-related errors\n */\nexport class AnzuApiAxiosError extends Error {\n constructor(cause: Error) {\n super('API request failed')\n this.name = 'AnzuApiAxiosError'\n this.cause = cause\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'\nimport { isAnzuApiDependencyExistsError } from '@/model/error/AnzuApiDependencyExistsError'\nimport { isAnzuApiTimeoutError } from '@/model/error/AnzuApiTimeoutError'\nimport { isAnzuApiAxiosError } from '@/model/error/AnzuApiAxiosError'\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 } else if (errors[i].field.includes('[')) {\n fieldText += resolveListErrors(errors[i].field)\n } else {\n fieldText += errors[i].field.split('.').at(-1)\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, duration = -1) => {\n if (isAnzuApiForbiddenError(error)) {\n showForbiddenError(duration)\n return true\n }\n if (isAnzuApiValidationError(error)) {\n showApiValidationError(error.fields, duration)\n return true\n }\n if (isAnzuApiDependencyExistsError(error)) {\n showErrorT('error.apiDependencyExists.message', duration)\n return true\n }\n if (isAnzuApiForbiddenOperationError(error)) {\n showApiForbiddenOperationError(error.detail, duration)\n return true\n }\n if (isAnzuApiTimeoutError(error)) {\n showErrorT('error.apiTimedOut.message', duration)\n return true\n }\n if (isAnzuApiAxiosError(error)) {\n showUnknownError(duration)\n return true\n }\n if (isAnzuFatalError(error)) {\n showUnknownError(duration)\n return true\n }\n if (isAnzuApiResponseCodeError(error)) {\n showUnknownError(duration)\n return true\n }\n return false\n }\n\n const resolveListErrors = (error: string) => {\n const { t } = i18n.global\n const parsedField = error.split('[')\n const firstField = parsedField[0].trim()\n const parsedSecond = parsedField[1].split(']')\n const indexNumber = parsedSecond[0]\n const secondField: string = parsedSecond[1] ?? ''\n\n return t(firstField) + '[' + indexNumber + ']: ' + t(firstField.slice(0, -1) + secondField)\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","!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 r=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),r.call(this,t)};var o=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 o.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;if(0===u)return this.utc(f);var r=this.clone();if(f)return r.$offset=u,r.$u=!1,r;var o=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(r=this.local().add(u+o,t)).$offset=u,r.$x.$localOffset=o,r};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)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f<a;f+=1){var h=o[f],u=c[h],d=u&&u[0],l=u&&u[1];o[f]=l?{regex:d,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=o[n];if(\"string\"==typeof i)r+=i.length;else{var s=i.regex,f=i.parser,h=e.slice(r),u=s.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(a=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,o=e.args;this.$u=r;var a=o[1];if(\"string\"==typeof a){var f=!0===o[2],h=!0===o[3],u=f||h,d=o[2];h&&(d=o[2]),s=this.$locale(),!f&&d&&(s=n.Ls[d]),this.$d=function(e,t,n,r){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","import type { OpUnitType, QUnitType } from 'dayjs'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { stringToInt } from '@/utils/string'\nimport type { DatetimeUTC, DatetimeUTCNullable } from '@/types/common'\n\ndayjs.extend(utc)\ndayjs.extend(customParseFormat)\n\nexport const 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, suffix = SUFFIX) => {\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 showSeconds = false\n): string => {\n if (isoDate === DATETIME_MAX || isoDate === DATETIME_MIN || isoDate === '' || isNull(isoDate) || isUndefined(isoDate))\n return edgeDateValue\n return dayjs(isoDate).format(showSeconds ? 'DD.MM.YYYY HH:mm:ss' : 'DD.MM.YYYY HH:mm')\n}\n\nexport const dateTimeFriendly = (\n isoDate: DatetimeUTC | DatetimeUTCNullable | string | null,\n edgeDateValue = '',\n showSeconds = false\n) => {\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(showSeconds ? 'H:mm:ss' : 'H:mm')\n if (!displayYear) return dayjs(date).format(showSeconds ? 'D.M. H:mm:ss' : 'D.M. H:mm')\n return dayjs(date).format(showSeconds ? 'D.M.YYYY H:mm:ss' : '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\nexport const isDatetimeUTC = (value: unknown): value is DatetimeUTC => {\n return typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3,6})?Z$/.test(value)\n}\n\ntype MonthIntervalUTC = { from: DatetimeUTC; until: DatetimeUTC }\ntype MonthIntervalDate = { from: Date; until: Date }\ntype GetMonthIntervalFn = {\n (\n nowDate: Date,\n returnType: 'utc',\n monthOffset?: number,\n expandToCurrentMonth?: boolean\n ): MonthIntervalUTC;\n (\n nowDate: Date,\n returnType: 'date',\n monthOffset?: number,\n expandToCurrentMonth?: boolean\n ): MonthIntervalDate;\n}\nconst _getMonthInterval = (\n nowDate: Date,\n returnType: 'date' | 'utc',\n monthOffset: number = 0,\n expandToCurrentMonth: boolean = false\n): MonthIntervalUTC | MonthIntervalDate => {\n const from = new Date(nowDate)\n from.setMonth(from.getMonth() + monthOffset)\n from.setDate(1)\n from.setHours(0, 0, 0, 0)\n const until = new Date(nowDate)\n if (expandToCurrentMonth) {\n until.setMonth(until.getMonth() + 1, 0)\n } else {\n until.setMonth(until.getMonth() + monthOffset + 1, 0)\n }\n until.setHours(23, 59, 59, 999)\n if (returnType === 'utc') {\n return {\n from: dateToUtc(from),\n until: dateToUtc(until),\n }\n }\n return { from, until }\n}\nexport const getMonthInterval = _getMonthInterval as GetMonthIntervalFn\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 { 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)\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n}>()\n\nconst { t } = useI18n()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('submit')\n}\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=\"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","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 { stringUrlTemplateReplace } from '@/utils/string'\nimport { isEmptyObject } from '@/utils/common'\n\nexport type UrlParams = {\n [key: string]: number | string\n}\n\nexport const replaceUrlParameters = (urlTemplate: string, urlParams: UrlParams, overrideUrlTemplate = '') => {\n if (isEmptyObject(urlParams)) return urlTemplate\n return stringUrlTemplateReplace(overrideUrlTemplate === '' ? urlTemplate : overrideUrlTemplate, urlParams)\n}\n","import { HTTP_STATUS_VALID_ALL } from '@/composables/statusCodes'\n\nexport const isValidHTTPStatus = (statusCode: number) => {\n return HTTP_STATUS_VALID_ALL.includes(statusCode)\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\nimport {\n AnzuApiDependencyExistsError,\n axiosErrorResponseHasDependencyExistsData,\n} from '@/model/error/AnzuApiDependencyExistsError'\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, err.config?.url))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n return reject(new AnzuApiDependencyExistsError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n // todo catch another axios errors, for example timeout\n return reject(new AnzuFatalError(err))\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, 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 { 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 { createI18nMessage } from '@vuelidate/validators'\nimport { type ComputedRef, type Ref, type ShallowRef, unref, type WritableComputedRef } from 'vue'\nimport { i18n } from '@/plugins/i18n'\nimport type { DatetimeUTCNullable } from '@/types/common'\n\nconst { t } = i18n.global\n\ntype OtherDateType =\n | Ref<DatetimeUTCNullable>\n | ComputedRef<DatetimeUTCNullable>\n | ShallowRef<DatetimeUTCNullable>\n | WritableComputedRef<DatetimeUTCNullable>\n\nexport function useValidateCompareDates() {\n const withI18nMessage = createI18nMessage({ t })\n\n const datesCompareValidator = (\n otherDate: OtherDateType,\n otherDateName: string,\n variant: 'laterThan' | 'onOrAfter' | 'earlierThan' | 'onOrBefore'\n ) => {\n return (value: DatetimeUTCNullable) => {\n const unrefOtherDate = unref(otherDate)\n\n if (value === null && unrefOtherDate === null) {\n return true\n }\n\n if (value === null || unrefOtherDate === null) {\n return true\n }\n\n const dateValue = new Date(value)\n const dateOther = new Date(unrefOtherDate)\n\n switch (variant) {\n case 'laterThan':\n return dateValue > dateOther\n case 'onOrAfter':\n return dateValue >= dateOther\n case 'earlierThan':\n return dateValue < dateOther\n case 'onOrBefore':\n return dateValue <= dateOther\n default:\n return false\n }\n }\n }\n\n const datesCompareHelper = (\n otherDate: OtherDateType,\n otherDateName: string,\n variant: 'laterThan' | 'onOrAfter' | 'earlierThan' | 'onOrBefore'\n ) => {\n return {\n $validator: datesCompareValidator(otherDate, otherDateName, variant),\n $params: {\n otherDateName: unref(otherDateName),\n variant,\n type: 'validateDate',\n },\n }\n }\n\n return withI18nMessage(datesCompareHelper, {\n withArguments: true,\n messagePath: (params) => `error.jsValidation.datesCompare.${params.$params.variant}`,\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'\nimport { useValidateCompareDates } from '@/validators/vuelidate/common/useValidateCompareDates'\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 datesCompare: useValidateCompareDates(),\n }\n}\n","<script setup lang=\"ts\">\nimport { nextTick, ref, useTemplateRef, watch, computed } from 'vue'\n\nconst emit = defineEmits<{\n (e: 'onEnterKeyup'): void\n (e: 'focusConfirm'): void\n}>()\n\nconst modelValue = defineModel<null | { hours: number; minutes: number }>('modelValue', {\n required: true,\n})\n\nconst hours = ref<string | undefined>(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n modelValue.value ? String(modelValue.value.hours).padStart(2, '0') : '12'\n)\nconst minutes = ref<string | undefined>(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n modelValue.value ? String(modelValue.value.minutes).padStart(2, '0') : '00'\n)\n\nconst hoursRefInput = useTemplateRef<HTMLInputElement>('hoursRefInput')\nconst minutesRefInput = useTemplateRef<HTMLInputElement>('minutesRefInput')\n\nconst hoursComputed = computed({\n get: () => hours.value,\n set: (value: string | number) => {\n let cleanValue = String(value).replace(/[^0-9]/g, '')\n\n if (cleanValue && parseInt(cleanValue) > 23) {\n hours.value = '23'\n nextTick(() => minutesRefInput.value?.focus())\n return\n }\n\n if (cleanValue.length > 2) {\n cleanValue = cleanValue.slice(0, 2)\n }\n\n hours.value = cleanValue\n\n if (cleanValue.length === 2) {\n nextTick(() => minutesRefInput.value?.focus())\n }\n }\n})\n\nconst minutesComputed = computed({\n get: () => minutes.value,\n set: (value: string | number) => {\n let cleanValue = String(value).replace(/[^0-9]/g, '')\n\n if (cleanValue && parseInt(cleanValue) > 59) {\n minutes.value = '59'\n emit('focusConfirm')\n return\n }\n\n if (cleanValue.length > 2) {\n cleanValue = cleanValue.slice(0, 2)\n }\n\n minutes.value = cleanValue\n\n if (cleanValue.length === 2) {\n emit('focusConfirm')\n }\n }\n})\n\nconst selectContent = async (event: FocusEvent) => {\n const target = event.target as HTMLInputElement | null\n await nextTick()\n target?.select()\n}\n\nconst onBlurHours = () => {\n const parsedHours = parseInt(hours.value || '0')\n hours.value = parsedHours >= 0 && parsedHours <= 23 ? String(parsedHours).padStart(2, '0') : '00'\n}\n\nconst onBlurMinutes = () => {\n const parsedMinutes = parseInt(minutes.value || '0')\n minutes.value = parsedMinutes >= 0 && parsedMinutes <= 59 ? String(parsedMinutes).padStart(2, '0') : '00'\n}\n\nconst onEnterHoursKeyup = () => {\n onBlurHours()\n emit('onEnterKeyup')\n}\n\nconst onEnterMinutesKeyup = () => {\n onBlurMinutes()\n emit('onEnterKeyup')\n}\n\nconst increaseHours = () => {\n const parsedHours = parseInt(hours.value || '0')\n const newHours = isNaN(parsedHours) ? 1 : (parsedHours + 1) % 24\n hours.value = String(newHours).padStart(2, '0')\n}\n\nconst decreaseHours = () => {\n const parsedHours = parseInt(hours.value || '0')\n const newHours = isNaN(parsedHours) ? 23 : (parsedHours - 1 + 24) % 24\n hours.value = String(newHours).padStart(2, '0')\n}\n\nconst increaseMinutes = () => {\n const parsedMinutes = parseInt(minutes.value || '0')\n const parsedHours = parseInt(hours.value || '0')\n\n if (isNaN(parsedMinutes)) {\n minutes.value = '01'\n return\n }\n\n if (parsedMinutes === 59) {\n minutes.value = '00'\n const newHours = isNaN(parsedHours) ? 1 : (parsedHours + 1) % 24\n hours.value = String(newHours).padStart(2, '0')\n } else {\n const newMinutes = parsedMinutes + 1\n minutes.value = String(newMinutes).padStart(2, '0')\n }\n}\n\nconst decreaseMinutes = () => {\n const parsedMinutes = parseInt(minutes.value || '0')\n const parsedHours = parseInt(hours.value || '0')\n\n if (isNaN(parsedMinutes)) {\n minutes.value = '59'\n return\n }\n\n if (parsedMinutes === 0) {\n minutes.value = '59'\n const newHours = isNaN(parsedHours) ? 23 : (parsedHours - 1 + 24) % 24\n hours.value = String(newHours).padStart(2, '0')\n } else {\n const newMinutes = parsedMinutes - 1\n minutes.value = String(newMinutes).padStart(2, '0')\n }\n}\n\nconst focusHour = () => {\n hoursRefInput.value?.focus()\n}\n\nwatch([hours, minutes], ([newHours, newMinutes], [oldHours, oldMinutes]) => {\n if (newHours === oldHours && newMinutes === oldMinutes) return\n const hoursInt = parseInt(newHours ?? (modelValue.value ? modelValue.value.hours.toString() : '12'))\n const minutesInt = parseInt(newMinutes ?? (modelValue.value ? modelValue.value.minutes.toString() : '0'))\n if (hoursInt >= 0 && hoursInt <= 23 && minutesInt >= 0 && minutesInt <= 59) {\n modelValue.value = { hours: hoursInt, minutes: minutesInt }\n }\n})\n\ndefineExpose({\n focusHour,\n})\n</script>\n\n<template>\n <div class=\"a-datetime-picker-time\">\n <div class=\"a-datetime-picker-time__item a-datetime-picker-time__item\">\n <input\n ref=\"hoursRefInput\"\n v-model=\"hoursComputed\"\n class=\"a-datetime-picker-time__input a-datetime-picker-time__input--hours\"\n type=\"text\"\n aria-label=\"Hour\"\n tabindex=\"1\"\n min=\"0\"\n max=\"23\"\n @focus=\"selectContent\"\n @blur=\"onBlurHours\"\n @keyup.enter=\"onEnterHoursKeyup\"\n >\n <div class=\"a-datetime-picker-time__arrows\">\n <VBtn\n tabindex=\"-1\"\n variant=\"text\"\n class=\"a-datetime-picker-time__arrow-up\"\n @click=\"increaseHours\"\n >\n <VIcon icon=\"mdi-chevron-up\" />\n </VBtn>\n <VBtn\n tabindex=\"-1\"\n variant=\"text\"\n class=\"a-datetime-picker-time__arrow-down\"\n @click=\"decreaseHours\"\n >\n <VIcon icon=\"mdi-chevron-down\" />\n </VBtn>\n </div>\n </div>\n <span class=\"a-datetime-picker-time__separator\">:</span>\n <div class=\"a-datetime-picker-time__item\">\n <input\n ref=\"minutesRefInput\"\n v-model=\"minutesComputed\"\n class=\"a-datetime-picker-time__input a-datetime-picker-time__input--minutes\"\n type=\"text\"\n aria-label=\"Minute\"\n tabindex=\"2\"\n min=\"0\"\n max=\"59\"\n @focus=\"selectContent\"\n @blur=\"onBlurMinutes\"\n @keyup.enter=\"onEnterMinutesKeyup\"\n >\n <div class=\"a-datetime-picker-time__arrows\">\n <VBtn\n tabindex=\"-1\"\n variant=\"text\"\n class=\"a-datetime-picker-time__arrow-up\"\n @click=\"increaseMinutes\"\n >\n <VIcon icon=\"mdi-chevron-up\" />\n </VBtn>\n <VBtn\n tabindex=\"-1\"\n variant=\"text\"\n class=\"a-datetime-picker-time__arrow-down\"\n @click=\"decreaseMinutes\"\n >\n <VIcon icon=\"mdi-chevron-down\" />\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n$hover-bg-color: rgb(0 0 0 / 5%);\n\n.a-datetime-picker-time {\n display: flex;\n\n &__item {\n flex-grow: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 40px;\n\n &:hover {\n background-color: $hover-bg-color;\n }\n }\n\n &__separator {\n font-weight: bold;\n font-size: 1.2rem;\n text-align: center;\n font-family: Roboto, sans-serif;\n min-height: 40px;\n padding: 0 5px;\n display: flex;\n align-items: center;\n }\n\n &__arrows {\n display: flex;\n flex-direction: column;\n opacity: 0;\n\n .v-btn {\n padding: 0 !important;\n min-width: 28px !important;\n width: 28px !important;\n height: 28px !important;\n }\n\n .a-datetime-picker-time__item:hover &,\n .a-datetime-picker-time__input:focus + &,\n &:focus-within {\n opacity: 1;\n }\n }\n\n &__input {\n width: 100%;\n max-width: 128px;\n height: 100%;\n display: inline-block;\n background: transparent;\n /* stylelint-disable-next-line */\n -webkit-box-shadow: none;\n box-shadow: none;\n border: 0;\n border-radius: 0;\n text-align: center;\n margin: 0;\n padding: 0;\n line-height: inherit;\n font-size: 1rem;\n position: relative;\n /* stylelint-disable-next-line */\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n /* stylelint-disable-next-line */\n -webkit-appearance: textfield;\n /* stylelint-disable-next-line */\n -moz-appearance: textfield;\n appearance: textfield;\n outline: none;\n\n &--hours {\n font-weight: bold;\n }\n }\n\n &__input::-webkit-inner-spin-button,\n &__input::-webkit-outer-spin-button {\n /* stylelint-disable-next-line */\n -webkit-appearance: none;\n margin: 0;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { DatetimeUTC } from '@/types/common'\nimport { computed, nextTick, ref, toRaw, useTemplateRef, watch } from 'vue'\nimport { isDefined, isNull, isUndefined } from '@/utils/common'\nimport useVuelidate, { type ErrorObject } from '@vuelidate/core'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport TimePicker from '@/components/datetime/TimePicker.vue'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport { SUFFIX } from '@/utils/datetime'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\nimport { useI18n } from 'vue-i18n'\nimport type { VTextField } from 'vuetify/components/VTextField'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DatetimeUTC | null | undefined\n type?: 'datetime'\n label?: string\n hideLabel?: boolean\n clearable?: boolean\n disabled?: boolean\n hideDetails?: boolean\n required?: boolean\n hideSetToNow?: boolean\n placeholder?: string\n dataCy?: string\n defaultValue?: DatetimeUTC | null | undefined\n errorMessages?: string[]\n lastMinuteMoment?: boolean\n }>(),\n {\n type: 'datetime',\n label: '',\n hideLabel: false,\n clearable: false,\n disabled: false,\n hideDetails: false,\n required: false,\n hideSetToNow: false,\n placeholder: '',\n dataCy: '',\n defaultValue: null,\n errorMessages: undefined,\n lastMinuteMoment: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'blur'): void\n (e: 'focus'): void\n (e: 'update:modelValue', data: DatetimeUTC | null | undefined): void\n (e: 'onOpen'): void\n (e: 'onClose'): void\n (e: 'afterClear'): void\n}>()\n\ndayjs.extend(utc)\ndayjs.extend(customParseFormat)\n\nconst pickerOpened = ref(false)\nconst pickerKey = ref(0)\nconst timeKey = ref(0)\nconst timePickerInstance = useTemplateRef<InstanceType<typeof TimePicker>>('timePickerInstance')\nconst inputInstance = useTemplateRef<InstanceType<typeof VTextField>>('inputInstance')\nconst confirmRefButton = useTemplateRef<HTMLButtonElement>('confirmRefButton')\nconst textFieldValue = ref('')\n\nconst datePickerValue = ref<null | Date>(null)\nconst timePickerValue = ref<null | { hours: number; minutes: number }>(null)\nconst datetimeInternal = ref<null | dayjs.Dayjs>(null)\n\nconst { t } = useI18n()\n\nconst placeholderComputed = computed(() => {\n return props.type === 'datetime' ? 'dd.mm.yyyy hh:mm' : 'dd.mm.yyyy'\n})\n\nconst { requiredIf } = useValidate()\nconst rules = computed(() => {\n return {\n textFieldValue: {\n required: requiredIf(props.required),\n },\n }\n})\nconst v$ = useVuelidate(rules, { textFieldValue })\n\nconst displayFormat = computed(() => {\n return props.type === 'datetime' ? 'DD.MM.YYYY HH:mm' : 'DD.MM.YYYY'\n})\n\nconst tryEmitNewValue = (newValue: DatetimeUTC | null | undefined) => {\n if (newValue === props.modelValue) return\n emit('update:modelValue', newValue)\n}\n\nconst updateDateAndTimePickerOnlyWhenChanged = (newValue: dayjs.Dayjs | null) => {\n if (isNull(newValue)) return\n if (\n isNull(timePickerValue.value) ||\n newValue.hour() !== timePickerValue.value.hours ||\n newValue.minute() !== timePickerValue.value.minutes\n ) {\n timePickerValue.value = { hours: newValue.hour(), minutes: newValue.minute() }\n }\n if (\n isNull(datePickerValue.value) ||\n newValue.year() !== datePickerValue.value.getFullYear() ||\n newValue.month() !== datePickerValue.value.getMonth() ||\n newValue.date() !== datePickerValue.value.getDate()\n ) {\n datePickerValue.value = newValue.toDate()\n }\n}\n\nwatch(\n () => props.modelValue,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue)) {\n datetimeInternal.value = null\n return\n }\n if (props.lastMinuteMoment) {\n datetimeInternal.value = dayjs(newValue, 'YYYY-MM-DDTHH:mm:ss.SSSSSSZ').millisecond(999)\n } else {\n datetimeInternal.value = dayjs(newValue, 'YYYY-MM-DDTHH:mm:ss.SSSSSSZ').millisecond(0)\n }\n },\n { immediate: true }\n)\n\nconst watchDatePicker = (newValue: null | Date, internal: dayjs.Dayjs) => {\n if (isNull(newValue)) return internal\n return internal.set('date', newValue.getDate()).set('month', newValue.getMonth()).set('year', newValue.getFullYear())\n}\n\nconst watchTimePicker = (newValue: null | { hours: number; minutes: number }, internal: dayjs.Dayjs) => {\n if (isNull(newValue)) return internal\n return internal.set('hour', newValue.hours).set('minute', newValue.minutes)\n}\n\nwatch([timePickerValue, datePickerValue], ([newTimePickerValue, newDatePickerValue]) => {\n let newDate: dayjs.Dayjs | null = null\n\n if (!isNull(datetimeInternal.value)) {\n newDate = datetimeInternal.value\n } else if (!isNull(props.modelValue)) {\n newDate = dayjs(props.modelValue, 'YYYY-MM-DDTHH:mm:ss.SSSSSSZ')\n } else {\n if (props.lastMinuteMoment) {\n newDate = dayjs().hour(0).minute(0).second(59).millisecond(999)\n } else {\n newDate = dayjs().hour(0).minute(0).second(0).millisecond(0)\n }\n }\n\n newDate = watchTimePicker(newTimePickerValue, newDate!)\n newDate = watchDatePicker(newDatePickerValue, newDate!)\n if (newDate.isSame(toRaw(datetimeInternal.value))) return\n datetimeInternal.value = newDate\n})\n\nwatch(\n datetimeInternal,\n (newValue) => {\n if (isNull(newValue)) {\n textFieldValue.value = ''\n tryEmitNewValue(null)\n return\n }\n const newUtcValue = newValue.utc().format('YYYY-MM-DDTHH:mm:ss') + SUFFIX\n textFieldValue.value = newValue.format(displayFormat.value)\n updateDateAndTimePickerOnlyWhenChanged(newValue)\n tryEmitNewValue(newUtcValue)\n },\n { immediate: true }\n)\n\nwatch(pickerOpened, (newValue) => {\n if (newValue) {\n onTextFieldBlur()\n if (isNull(datetimeInternal.value) && (isNull(props.defaultValue) || isUndefined(props.defaultValue))) {\n if (props.lastMinuteMoment) {\n datetimeInternal.value = dayjs().second(59).millisecond(999)\n } else {\n datetimeInternal.value = dayjs().second(0).millisecond(0)\n }\n }\n nextTick(() => {\n pickerKey.value++\n })\n emit('onOpen')\n return\n }\n emit('onClose')\n})\n\nconst errorMessageComputed = computed(() => {\n if (isDefined(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\nconst onTextFieldBlur = () => {\n const filtered = textFieldValue.value.replace(/[^\\s\\d.:]/g, '').trim()\n if (filtered.length === 0 && !props.required) {\n datetimeInternal.value = null\n emit('blur')\n return\n }\n const parsed = dayjs(filtered, ['DD.MM.YYYY HH:mm', 'DD.MM.YYYY'])\n if (parsed.isValid()) {\n // keep seconds from original model\n let seconds = 0\n if (!isNull(props.modelValue)) {\n const modelDate = dayjs(props.modelValue, 'YYYY-MM-DDTHH:mm:ss.SSSSSSZ')\n if (modelDate.isValid()) seconds = modelDate.second()\n }\n datetimeInternal.value = parsed.second(seconds)\n v$.value.textFieldValue.$touch()\n emit('blur')\n return\n }\n if (!isNull(datetimeInternal.value)) {\n textFieldValue.value = datetimeInternal.value.format(displayFormat.value)\n }\n v$.value.textFieldValue.$touch()\n emit('blur')\n}\n\nconst onClear = () => {\n if (isNull(props.defaultValue) || isUndefined(props.defaultValue)) {\n datetimeInternal.value = null\n datePickerValue.value = null\n timePickerValue.value = null\n emit('afterClear')\n return\n }\n datetimeInternal.value = dayjs(props.defaultValue, 'YYYY-MM-DDTHH:mm:ss.SSSSSSZ')\n emit('afterClear')\n}\n\nconst close = () => {\n pickerOpened.value = false\n inputInstance.value?.focus()\n inputInstance.value?.blur()\n emit('onClose')\n emit('blur')\n}\n\nconst onTextFieldFocus = () => {\n emit('focus')\n}\n\nconst onTimePickerEnterKeyup = () => {\n pickerOpened.value = false\n}\n\nconst onFocusConfirm = () => {\n confirmRefButton.value?.focus()\n}\n\nconst onDatePickerUpdate = () => {\n timePickerInstance.value?.focusHour()\n}\n\nconst now = () => {\n if (props.lastMinuteMoment) {\n datetimeInternal.value = dayjs().second(59).millisecond(999)\n } else {\n datetimeInternal.value = dayjs().second(0).millisecond(0)\n }\n nextTick(() => {\n pickerKey.value++\n timeKey.value++\n })\n}\n</script>\n\n<template>\n <VTextField\n ref=\"inputInstance\"\n v-model=\"textFieldValue\"\n :error-messages=\"errorMessageComputed\"\n :persistent-placeholder=\"true\"\n :placeholder=\"placeholderComputed\"\n class=\"a-datetime-picker\"\n hide-details=\"auto\"\n :disabled=\"disabled\"\n autocomplete=\"off\"\n @blur=\"onTextFieldBlur\"\n @focus=\"onTextFieldFocus\"\n @keyup.enter=\"onTextFieldBlur\"\n >\n <template #append-inner>\n <VIcon\n v-if=\"clearable && defaultValue !== modelValue\"\n class=\"a-datetime-picker__clearable-icon\"\n icon=\"mdi-close-circle\"\n @click.stop=\"onClear\"\n />\n <VMenu\n v-if=\"!disabled\"\n location=\"bottom end\"\n origin=\"top end\"\n :close-on-content-click=\"false\"\n :model-value=\"pickerOpened\"\n @update:model-value=\"(value: boolean) => (pickerOpened = value)\"\n >\n <template #activator=\"{ props: menuProps }\">\n <VIcon\n class=\"a-datetime-picker__calendar-icon\"\n icon=\"mdi-calendar\"\n size=\"small\"\n v-bind=\"menuProps\"\n />\n </template>\n\n <VCard v-if=\"pickerOpened\">\n <VBtn\n v-tooltip=\"t('common.button.close')\"\n icon\n variant=\"text\"\n :width=\"36\"\n :height=\"36\"\n class=\"position-absolute top-0 right-0\"\n @click.stop=\"close\"\n >\n <VIcon\n icon=\"mdi-close\"\n color=\"white\"\n />\n </VBtn>\n <VDatePicker\n :key=\"pickerKey\"\n v-model=\"datePickerValue\"\n class=\"a-datetime-picker-calendar\"\n color=\"primary\"\n show-adjacent-months\n v-bind=\"$attrs\"\n @update:model-value=\"onDatePickerUpdate\"\n />\n <TimePicker\n ref=\"timePickerInstance\"\n :key=\"timeKey\"\n v-model=\"timePickerValue\"\n @on-enter-keyup=\"onTimePickerEnterKeyup\"\n @focus-confirm=\"onFocusConfirm\"\n />\n <div class=\"d-flex\">\n <button\n type=\"button\"\n class=\"a-datetime-picker__bottom-button\"\n tabindex=\"8\"\n @click=\"now\"\n >\n {{ t('common.time.now') }}\n </button>\n <button\n ref=\"confirmRefButton\"\n type=\"button\"\n class=\"a-datetime-picker__bottom-button\"\n tabindex=\"7\"\n @click.stop=\"close\"\n >\n {{ t('common.button.confirm') }}\n </button>\n </div>\n </VCard>\n </VMenu>\n\n <div class=\"ml-1\">\n <slot name=\"append-inner\" />\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-icon {\n margin-top: 2px;\n opacity: 0.6 !important;\n }\n\n &__clearable-icon {\n opacity: 0 !important;\n }\n\n &:hover {\n .a-datetime-picker__clearable-icon {\n opacity: 0.6 !important;\n }\n }\n\n &__bottom-button {\n width: 100%;\n text-align: center;\n font-size: 0.86rem;\n font-family: Roboto, sans-serif;\n font-weight: bold;\n line-height: 1.8;\n padding: 6px 0;\n\n &:hover {\n background-color: rgb(0 0 0 / 5%);\n }\n }\n}\n\n.a-datetime-picker-calendar {\n :deep(.v-picker-title) {\n display: none;\n }\n\n :deep(.v-date-picker-header) {\n padding-top: 12px;\n }\n\n :deep(.v-date-picker-month) {\n padding-bottom: 2px;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, inject, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isDefined, isUndefined } from '@/utils/common'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { DatetimeUTCNullable, IntegerIdNullable } from '@/types/common'\nimport type { CollabComponentConfig, CollabFieldData } from '@/components/collab/types/Collab'\nimport { useCollabField } from '@/components/collab/composables/collabField'\nimport ACollabLockedByUser from '@/components/collab/components/ACollabLockedByUser.vue'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\nimport ADatetimePicker from '@/components/datetime/ADatetimePicker.vue'\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 collab?: CollabComponentConfig\n disabled?: boolean\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n dataCy: undefined,\n clearable: false,\n collab: undefined,\n disabled: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DatetimeUTCNullable | undefined): void\n (e: 'click:append', data: string | number | null | undefined): void\n (e: 'blur', data: string | number | null | undefined): void\n (e: 'focus', data: string | number | null | undefined): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DatetimeUTCNullable | undefined) {\n emit('update:modelValue', newValue)\n },\n})\n\n// Collaboration\nconst { collabOptions } = useCommonAdminCollabOptions()\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst releaseFieldLock = ref((data: CollabFieldData) => {})\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst changeFieldData = ref((data: CollabFieldData) => {})\nconst acquireFieldLock = ref(() => {})\nconst lockedByUserLocal = ref<IntegerIdNullable>(null)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (collabOptions.value.enabled && isDefined(props.collab)) {\n const { releaseCollabFieldLock, changeCollabFieldData, acquireCollabFieldLock, lockedByUser } = useCollabField(\n props.collab.room,\n props.collab.field\n )\n releaseFieldLock.value = releaseCollabFieldLock\n changeFieldData.value = changeCollabFieldData\n acquireFieldLock.value = acquireCollabFieldLock\n watch(\n lockedByUser,\n (newValue) => {\n lockedByUserLocal.value = newValue\n },\n { immediate: true }\n )\n}\n\nconst isOpened = ref(false)\nconst isFocused = ref(false)\n\nconst onOpen = () => {\n isOpened.value = true\n acquireFieldLock.value()\n}\n\nconst onClose = () => {\n releaseFieldLock.value(props.modelValue)\n isOpened.value = true\n}\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst onBlur = () => {\n isFocused.value = false\n emit('blur', isUndefined(props.modelValue) ? null : props.modelValue)\n props.v?.$touch()\n if (isOpened.value === false) releaseFieldLock.value(props.modelValue)\n}\n\nconst onFocus = () => {\n isFocused.value = true\n emit('focus', props.modelValue)\n acquireFieldLock.value()\n}\n\nconst errorMessageComputed = computed(() => {\n if (isDefined(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 (isDefined(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 (isDefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n\nconst disabledComputed = computed(() => {\n if (isDefined(props.disabled)) return props.disabled\n return !!lockedByUserLocal.value\n})\n\nwatch(modelValueComputed, (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (collabOptions.value.enabled && (isFocused.value || isOpened.value)) {\n changeFieldData.value(newValue)\n }\n})\n</script>\n\n<template>\n <ADatetimePicker\n v-model=\"modelValueComputed\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :required=\"requiredComputed\"\n :disabled=\"disabledComputed\"\n :label=\"labelComputed\"\n :clearable=\"clearable\"\n v-bind=\"$attrs\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @on-open=\"onOpen\"\n @on-close=\"onClose\"\n >\n <template #append-inner>\n <slot\n name=\"locked\"\n :user-id=\"lockedByUserLocal\"\n >\n <ACollabLockedByUser\n v-if=\"collab\"\n :id=\"lockedByUserLocal\"\n :users=\"collab.cachedUsers\"\n />\n </slot>\n </template>\n </ADatetimePicker>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport ACollabLockedByUser from '@/components/collab/components/ACollabLockedByUser.vue'\nimport { isDefined } from '@/utils/common'\nimport type { CollabComponentConfig, CollabFieldData } from '@/components/collab/types/Collab'\nimport { useCollabField } from '@/components/collab/composables/collabField'\nimport type { IntegerIdNullable } from '@/types/common'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean\n label?: string\n dataCy?: string\n hideLabel?: boolean\n collab?: CollabComponentConfig\n disabled?: boolean\n }>(),\n {\n label: undefined,\n dataCy: undefined,\n hideLabel: false,\n collab: undefined,\n disabled: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n (e: 'blur', data: boolean): void\n (e: 'focus', data: boolean): void\n}>()\n\n// Collaboration\nconst { collabOptions } = useCommonAdminCollabOptions()\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst releaseFieldLock = ref((data: CollabFieldData) => {})\nconst acquireFieldLock = ref(() => {})\nconst lockedByUserLocal = ref<IntegerIdNullable>(null)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (collabOptions.value.enabled && isDefined(props.collab)) {\n const { releaseCollabFieldLock, acquireCollabFieldLock, lockedByUser } = useCollabField(\n props.collab.room,\n props.collab.field\n )\n releaseFieldLock.value = releaseCollabFieldLock\n acquireFieldLock.value = acquireCollabFieldLock\n watch(\n lockedByUser,\n (newValue) => {\n lockedByUserLocal.value = newValue\n },\n { immediate: true }\n )\n}\n\nconst onClick = () => {\n acquireFieldLock.value()\n setTimeout(() => {\n releaseFieldLock.value(props.modelValue)\n }, 500)\n}\n\nconst onUpdate = (newValue: boolean) => {\n emit('update:modelValue', newValue)\n}\nconst onBlur = () => {\n emit('blur', props.modelValue)\n releaseFieldLock.value(props.modelValue)\n}\n\nconst onFocus = () => {\n emit('focus', props.modelValue)\n acquireFieldLock.value()\n}\n\nconst disabledComputed = computed(() => {\n if (isDefined(props.disabled)) return props.disabled\n return !!lockedByUserLocal.value\n})\n</script>\n\n<template>\n <VSwitch\n :data-cy=\"dataCy\"\n :model-value=\"modelValue\"\n :disabled=\"disabledComputed\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @update:model-value=\"onUpdate($event as unknown as boolean)\"\n @click.stop=\"onClick\"\n >\n <template\n v-if=\"!hideLabel\"\n #label\n >\n {{ label }}\n </template>\n <template\n v-if=\"lockedByUserLocal\"\n #append\n >\n <slot\n name=\"locked\"\n :user-id=\"lockedByUserLocal\"\n >\n <ACollabLockedByUser\n v-if=\"collab\"\n :id=\"lockedByUserLocal\"\n :users=\"collab.cachedUsers\"\n />\n </slot>\n </template>\n </VSwitch>\n</template>\n","import { reactive, type Ref, toRaw } from 'vue'\nimport {\n cloneDeep,\n isArray,\n isBoolean,\n isEmptyArray,\n isEmptyObject,\n isNull,\n isNumber,\n isObject,\n isString,\n isUndefined,\n} from '@/utils/common'\nimport type { AnyFn } from '@vueuse/core'\nimport type { Pagination } from '@/labs/filters/pagination'\nimport { type DatatableSortBy, SortOrder } from '@/composables/system/datatableColumns'\nimport { stringToBooleanExact, stringToNumber } from '@/utils/string'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport type FilterStoreIdentifier = { system: string; subject: string }\n\nconst SORT_URL_PARAM = '_sort'\n\nconst defaultRenderOptions: FilerRenderOptions = {\n skip: false,\n xs: undefined,\n sm: undefined,\n md: undefined,\n lg: undefined,\n xl: undefined,\n}\n\nexport function createFilterStore<F extends readonly MakeFilterOption<string>[]>(filterFields: F): FilterData<F> {\n return reactive(\n filterFields.reduce((acc, field) => {\n return {\n ...acc,\n [field.name]: cloneDeep(field.default),\n }\n }, {} as FilterData<F>)\n ) as FilterData<F>\n}\n\nexport function createFilter<F extends readonly MakeFilterOption<string>[]>(\n filterFields: F,\n store: FilterData<F>,\n options?: Partial<GeneralFilterOptions>\n): {\n filterConfig: FilterConfig<F>\n filterData: FilterData<F>\n} {\n const config = filterFields.reduce(\n (acc, filter) => {\n const key = filter.name as keyof FilterData<F>\n const defaultValue = cloneDeep(filter.default)\n\n return {\n ...acc,\n [key]: {\n name: key as string,\n variant: resolveValue(filter.variant, 'eq'),\n type: resolveValue(filter.type, 'custom'),\n titleT:\n filter.titleT ??\n (options?.system && options?.subject && filter.name\n ? `${options.system}.${options.subject}.filter.${filter.name}`\n : undefined),\n apiName: resolveValue(filter.apiName, filter.name),\n clearable: resolveValue(filter.clearable, true),\n mandatory: resolveValue(filter.mandatory, false),\n multiple: isArray(defaultValue),\n advanced: resolveValue(filter.advanced, false),\n related: resolveValue(filter.related, undefined),\n exclude: resolveValue(filter.exclude, false),\n default: defaultValue,\n render: { ...defaultRenderOptions, ...resolveValue(filter.render, {}) },\n },\n }\n },\n {} as FilterConfig<F>['fields']\n )\n\n const defaultGlobalOptions: GeneralFilterOptions = {\n elastic: false,\n system: undefined,\n subject: undefined,\n simpleFilters: false,\n ...options,\n }\n\n if (defaultGlobalOptions.elastic) {\n defaultGlobalOptions.simpleFilters = true\n }\n\n const filterConfig = reactive({\n general: defaultGlobalOptions,\n touched: false,\n fields: config,\n }) as FilterConfig<F>\n\n return {\n filterConfig,\n filterData: store as FilterData<F>,\n }\n}\n\nfunction resolveValue<T>(value: T | undefined, fallback: T): T {\n return isUndefined(value) ? fallback : value\n}\n\nexport function useFilterClearHelpers<\n F extends readonly MakeFilterOption<string>[] = readonly MakeFilterOption<string>[],\n>() {\n const clearOne = (name: keyof FilterData<F>, filterData: FilterData<F>, filterConfig: FilterConfig<F>) => {\n if (!filterConfig.fields[name]?.clearable) return\n filterData[name] = cloneDeep(filterConfig.fields[name].default)\n }\n\n const clearAll = (filterData: FilterData<F>, filterConfig: FilterConfig<F>) => {\n for (const filterName in filterConfig.fields) {\n clearOne(filterName as keyof FilterData<F>, filterData, filterConfig)\n }\n }\n const clearOneFilterSelected = (\n name: string,\n optionValue: number | string,\n filterData: FilterData<F>,\n filterConfig: FilterConfig<F>,\n filterSelected: Ref<Map<string, ValueObjectOption<string | number>[]>>\n ) => {\n if (!isClearable(name, filterConfig)) return\n // update selected\n const config = filterConfig.fields[name as keyof FilterConfig<F>['fields']]\n const selectedFound = filterSelected.value.get(name)\n if (selectedFound && selectedFound.length === 1) {\n filterSelected.value.delete(name)\n } else if (selectedFound) {\n const foundIndex = selectedFound.findIndex((item) => item.value === optionValue)\n selectedFound.splice(foundIndex, 1)\n }\n // update data\n if (config.type === 'timeInterval' && config.related) {\n filterData[name as keyof FilterData<F>] = config.default\n filterData[config.related as keyof FilterData<F>] =\n filterConfig.fields[config.related as keyof FilterConfig<F>['fields']].default\n } else if (\n isArray(filterData[name as keyof FilterData<F>]) &&\n (filterData[name as keyof FilterData<F>] as any[]).length > 0\n ) {\n const foundIndex = (filterData[name as keyof FilterData<F>] as any[]).findIndex((item) => item === optionValue)\n const newArray = [...toRaw(filterData[name as keyof FilterData<F>] as any[])]\n newArray.splice(foundIndex, 1)\n filterData[name as keyof FilterData<F>] = newArray as AllowedFilterValues\n } else if (isString(filterData[name as keyof FilterData<F>]) || isNumber(filterData[name as keyof FilterData<F>])) {\n filterData[name as keyof FilterData<F>] = config.default\n } else if (isBoolean(filterData[name as keyof FilterData<F>])) {\n filterData[name as keyof FilterData<F>] = config.default\n }\n }\n\n const clearAllFilterSelected = (\n filterData: FilterData<F>,\n filterConfig: FilterConfig<F>,\n filterSelected: Ref<Map<string, ValueObjectOption<string | number>[]>>\n ) => {\n for (const key of filterSelected.value.keys()) {\n if (isClearable(key, filterConfig)) {\n filterSelected.value.delete(key)\n }\n }\n }\n\n const isClearable = (name: string, filterConfig: FilterConfig<F>) => {\n const config = filterConfig.fields[name as keyof FilterConfig<F>['fields']]\n return !(config.mandatory || !config.clearable)\n }\n\n return {\n clearOne,\n clearAll,\n clearOneFilterSelected,\n clearAllFilterSelected,\n isClearable,\n }\n}\n\ninterface FilterHelpersMoreOptions {\n storeFiltersLocalStorage: string | boolean // false to disable, string to override store key\n populateUrlParams: boolean\n}\n\nconst FilterHelpersMoreOptionsDefault = {\n storeFiltersLocalStorage: true,\n populateUrlParams: true,\n}\n\nexport function useFilterHelpers<F extends readonly MakeFilterOption<string>[] = readonly MakeFilterOption<string>[]>(\n filterData: FilterData<F>,\n filterConfig: FilterConfig<F>,\n moreOptions: Partial<FilterHelpersMoreOptions> = {}\n) {\n const options = { ...FilterHelpersMoreOptionsDefault, ...moreOptions }\n const END_FILTER_MARKER = '~'\n\n let storeKey: undefined | string = undefined\n if (isString(options.storeFiltersLocalStorage)) {\n storeKey = options.storeFiltersLocalStorage\n } else if (\n isBoolean(options.storeFiltersLocalStorage) &&\n true === options.storeFiltersLocalStorage &&\n isString(filterConfig.general.system) &&\n isString(filterConfig.general.subject)\n ) {\n storeKey = 'tableFilter_' + filterConfig.general.system + '_' + filterConfig.general.subject\n }\n\n const getFilterDataForStoring = (): Record<string, AllowedFilterValues> => {\n const data: Record<string, AllowedFilterValues> = {}\n for (const filterName in filterData) {\n try {\n const key = filterName as keyof FilterData<F>\n const value = filterData[key]\n if (\n !isUndefined(value) &&\n !isNull(value) &&\n !isEmptyArray(value) &&\n value !== filterConfig.fields[key].default\n ) {\n data[filterName] = value\n }\n } catch (e) {\n // Ignore errors\n }\n }\n return data\n }\n\n const serializeFilters = (\n data: Record<string, AllowedFilterValues>,\n pagination: Ref<Pagination>,\n includeSort: boolean\n ): string => {\n const params = new URLSearchParams()\n for (const key in data) {\n const value = data[key]\n if (isUndefined(value) || isNull(value)) continue\n if (isArray(value) && isEmptyArray(value)) continue\n if (isObject(value) && isEmptyObject(value)) continue\n if (isString(value) && value.length === 0) continue\n if (isArray(value)) {\n params.set(key, value.join(','))\n } else {\n params.set(key, String(value))\n }\n }\n if (includeSort && pagination.value.sortBy) {\n params.set(SORT_URL_PARAM, `${pagination.value.sortBy.key},${pagination.value.sortBy.order}`)\n }\n if (params.size === 0) return ''\n return params.toString() + END_FILTER_MARKER\n }\n\n const deserializeFilters = (\n hash: string\n ): { filters: Record<string, AllowedFilterValues>; sortBy: DatatableSortBy } | null => {\n if (!hash) return null\n if (hash.startsWith('#')) hash = hash.substring(1)\n\n if (!hash.endsWith(END_FILTER_MARKER)) {\n const lastAmpersand = hash.lastIndexOf('&')\n if (lastAmpersand !== -1) {\n hash = hash.substring(0, lastAmpersand)\n } else {\n return null\n }\n } else {\n hash = hash.slice(0, -1)\n }\n\n const params = new URLSearchParams(hash)\n const result: Record<string, AllowedFilterValues> = {}\n let sortBy: DatatableSortBy = null\n\n const sortParam = params.get(SORT_URL_PARAM)\n if (sortParam) {\n const [key, order] = sortParam.split(',')\n if (key && (order === SortOrder.Asc || order === SortOrder.Desc)) {\n sortBy = { key, order }\n }\n params.delete(SORT_URL_PARAM)\n }\n\n for (const [key, value] of params.entries()) {\n const fieldConfig = filterConfig.fields[key as keyof typeof filterConfig.fields]\n if (isUndefined(fieldConfig)) {\n console.error(`Filter config not found for ${key}`)\n continue\n }\n const isMultiple = fieldConfig.multiple ?? false\n\n if (isMultiple) {\n const items = value.split(',')\n\n const allNumeric = items.every((item) => !isNaN(Number(item)))\n\n result[key] = allNumeric ? items.map(Number) : items\n } else {\n result[key] = value\n }\n }\n\n return { filters: result, sortBy }\n }\n\n const updateLocationHash = (serialized: string) => {\n if (options.populateUrlParams === false) return\n window.location.hash = serialized\n }\n\n const resetLocationHash = () => {\n if (options.populateUrlParams === false) return\n window.location.hash = ''\n }\n\n const parseLocationHash = () => {\n if (options.populateUrlParams === false) return null\n return deserializeFilters(window.location.hash)\n }\n\n const storeFilterLocalStorage = (serialized: string) => {\n if (!storeKey || !localStorage) return\n localStorage.setItem(storeKey, serialized)\n }\n\n const loadFilterLocalStorage = () => {\n if (!storeKey || !localStorage) return null\n const stored = localStorage.getItem(storeKey)\n if (!stored || !isString(stored)) return null\n return deserializeFilters(stored)\n }\n\n const resetFilter = (pagination: Ref<Pagination>, callback?: AnyFn) => {\n pagination.value = { ...pagination.value, page: 1 }\n if (storeKey && localStorage) {\n localStorage.removeItem(storeKey)\n }\n resetLocationHash()\n filterConfig.touched = false\n if (callback) callback()\n }\n\n const submitFilter = (pagination: Ref<Pagination>, callback?: AnyFn) => {\n const data = getFilterDataForStoring()\n const serialized = serializeFilters(data, pagination, true)\n updateLocationHash(serialized)\n storeFilterLocalStorage(serialized)\n pagination.value = { ...pagination.value, page: 1 }\n filterConfig.touched = false\n if (callback) callback()\n }\n\n const loadStoredFilters = (pagination: Ref<Pagination>, callback?: AnyFn) => {\n let source: 'hash' | 'localStorage' = 'hash'\n let storedFromHash = parseLocationHash()\n if (isNull(storedFromHash)) {\n source = 'localStorage'\n storedFromHash = loadFilterLocalStorage()\n }\n if (isNull(storedFromHash) || (isEmptyObject(storedFromHash.filters) && isEmptyObject(storedFromHash.sortBy))) {\n if (callback) callback()\n return false\n }\n\n for (const filterName in filterData) {\n const key = filterName as keyof FilterData<F>\n let value = storedFromHash.filters[key]\n if (isUndefined(value)) continue\n if (isString(value)) {\n const tryConvertNumber = stringToNumber(value)\n if (!isNull(tryConvertNumber)) {\n value = tryConvertNumber\n } else {\n const tryConvertBoolean = stringToBooleanExact(value)\n if (!isNull(tryConvertBoolean)) {\n value = tryConvertBoolean\n }\n }\n }\n filterData[key] = value\n }\n if (source === 'localStorage' && storeKey && localStorage) {\n const stored = localStorage.getItem(storeKey)\n if (stored) {\n updateLocationHash(stored)\n }\n }\n pagination.value = { ...pagination.value, sortBy: storedFromHash.sortBy }\n if (callback) callback()\n return true\n }\n\n return {\n loadStoredFilters,\n resetFilter,\n submitFilter,\n serializeFilters,\n deserializeFilters,\n }\n}\n\nexport type AllowedFilterValues = number | number[] | string | string[] | null | undefined | boolean\n\nexport interface GeneralFilterOptions {\n system?: string\n subject?: string\n elastic?: boolean\n simpleFilters?: boolean\n}\n\nexport interface FilerRenderOptions {\n skip: boolean\n xs: number | undefined\n sm: number | undefined\n md: number | undefined\n lg: number | undefined\n xl: number | undefined\n}\n\nexport type FilterVariant =\n | 'search'\n | 'lt'\n | 'in'\n | 'notIn'\n | 'endsWith'\n | 'startsWith'\n | 'memberOf'\n | 'neq'\n | 'gte'\n | 'gt'\n | 'eq'\n | 'lte'\n | 'custom'\n\nexport type FilterType = 'boolean' | 'datetime' | 'integer' | 'string' | 'custom' | 'timeInterval'\n\nexport interface MakeFilterOption<TName extends string = string> {\n name: TName\n default: AllowedFilterValues\n type?: FilterType\n variant?: FilterVariant\n titleT?: string\n apiName?: string\n clearable?: boolean\n mandatory?: boolean\n advanced?: boolean\n exclude?: boolean\n related?: string | undefined\n render?: Partial<FilerRenderOptions>\n}\n\nexport interface FilterField {\n name: string\n type: FilterType\n variant: FilterVariant\n titleT?: string\n default: AllowedFilterValues\n apiName: string\n clearable: boolean\n mandatory: boolean\n multiple: boolean\n advanced: boolean\n exclude: boolean\n related: string | undefined\n render: FilerRenderOptions\n}\n\nexport type FilterConfig<F extends readonly MakeFilterOption<string>[] = readonly MakeFilterOption<string>[]> = {\n general: GeneralFilterOptions\n touched: boolean\n fields: {\n [P in F[number]['name']]: FilterField\n }\n}\n\nexport type FilterData<F extends readonly MakeFilterOption<string>[] = readonly MakeFilterOption<string>[]> = {\n [P in F[number]['name']]: AllowedFilterValues\n}\n\nexport type FilterStore<T extends readonly { name: string }[]> = {\n [K in T[number]['name']]: AllowedFilterValues\n}\n","import { computed, type Ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport useVuelidate from '@vuelidate/core'\nimport type { DatetimeUTCNullable } from '@/types/common'\n\n/** note: number value represents time interval in minutes, null represent unselected */\nexport type TimeIntervalToolsValue = number | TimeIntervalSpecialOptionsType | null\n\nexport const TimeIntervalSpecialOptions = {\n CurrentMonth: 'cm',\n LastMonth: 'lm',\n Last3Months: 'l3m',\n Custom: 'custom',\n} as const\n\nexport type TimeIntervalSpecialOptionsType =\n (typeof TimeIntervalSpecialOptions)[keyof typeof TimeIntervalSpecialOptions]\n\nexport function useTimeIntervalOptions(allowed: TimeIntervalToolsValue[] | undefined = undefined) {\n const { t } = useI18n()\n\n const timeIntervalOptions = computed<ValueObjectOption<TimeIntervalToolsValue>[]>(() => {\n const values = [\n {\n value: null,\n title: t('common.model.all'),\n },\n {\n value: 60,\n title: '1 hodina',\n },\n {\n value: 1_440,\n title: '1 deň',\n },\n {\n value: 10_080,\n title: '7 dní',\n },\n {\n value: 40_320,\n title: '28 dní',\n },\n {\n value: TimeIntervalSpecialOptions.CurrentMonth,\n title: 'Prebiehajúci mesiac',\n },\n {\n value: TimeIntervalSpecialOptions.LastMonth,\n title: 'Minulý mesiac',\n },\n {\n value: TimeIntervalSpecialOptions.Last3Months,\n title: 'Posledné 3 mesiace',\n },\n {\n value: TimeIntervalSpecialOptions.Custom,\n title: 'Vlastné',\n },\n ]\n if (isUndefined(allowed)) return values\n\n return values.filter((item) => allowed.includes(item.value) || isNull(item.value))\n })\n\n const getTimeIntervalOption = (value: TimeIntervalToolsValue) => {\n return timeIntervalOptions.value.find((item) => item.value === value)\n }\n\n return {\n timeIntervalOptions,\n getTimeIntervalOption,\n }\n}\n\nexport function useFilterTimeIntervalValidators(\n dialogData: Ref<{\n from: DatetimeUTCNullable\n until: DatetimeUTCNullable\n }>\n) {\n // const { t } = useI18n()\n const { datesCompare, required } = useValidate()\n\n const fromComputed = computed(() => {\n return dialogData.value.from\n })\n\n const untilComputed = computed(() => {\n return dialogData.value.until\n })\n\n const rules = {\n dialogData: {\n from: {\n required,\n datesCompare: datesCompare(untilComputed, 'Until', 'onOrBefore'),\n },\n until: {\n required,\n datesCompare: datesCompare(fromComputed, 'From', 'laterThan'),\n },\n },\n }\n\n const v$ = useVuelidate(rules, { dialogData }, { $scope: 'AFilterTimeIntervalScope' })\n\n return {\n v$,\n }\n}\n\n","import { ref } from 'vue'\nimport { isArray, isBoolean, isNull, isNumber, isString, isUndefined } from '@/utils/common'\nimport type { FilterVariant } from '@/types/Filter'\nimport type { AllowedFilterValues, FilterConfig, FilterData, FilterField } from '@/labs/filters/filterFactory'\nimport type { DatetimeUTCNullable } from '@/types/common'\nimport { TimeIntervalSpecialOptions, type TimeIntervalToolsValue } from '@/labs/filters/filterTimeIntervalTools'\nimport { dateModifyMinutes, dateTimeNow, dateTimeToDate, dateToUtc, getMonthInterval } from '@/utils/datetime'\nimport { SortOrder } from '@/composables/system/datatableColumns'\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', Math.max(0, (page - 1) * limit))\n }\n\n const querySetOrder = (field: string | null, desc: boolean): void => {\n if (!isNull(field) && field.length > 0) queryAdd('order[' + field + ']', desc ? SortOrder.Desc : SortOrder.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 resolveTimeIntervalFilter = (\n fromName: string,\n untilName: string,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n mandatory: boolean,\n exclude: boolean\n ): null | {\n from: DatetimeUTCNullable\n until: DatetimeUTCNullable\n } => {\n let fromValue = filterData[fromName] as TimeIntervalToolsValue\n let untilValue = filterData[untilName] as DatetimeUTCNullable\n if (isNull(fromValue) && mandatory && !exclude) {\n fromValue = filterConfig.fields[fromName].default as TimeIntervalToolsValue\n }\n if (isNull(untilValue) && mandatory && !exclude) {\n untilValue = filterConfig.fields[fromName].default as DatetimeUTCNullable\n }\n if (isString(fromValue) && isString(untilValue)) {\n return {\n from: fromValue,\n until: untilValue,\n }\n }\n const now = dateTimeNow()\n const nowDate = dateTimeToDate(now)\n switch (fromValue) {\n case TimeIntervalSpecialOptions.CurrentMonth: {\n return getMonthInterval(nowDate, 'utc', 0, false)\n }\n case TimeIntervalSpecialOptions.LastMonth: {\n return getMonthInterval(nowDate, 'utc', -1, false)\n }\n case TimeIntervalSpecialOptions.Last3Months: {\n return getMonthInterval(nowDate, 'utc', -2, true)\n }\n default: {\n if (isNumber(fromValue)) {\n return {\n from: dateToUtc(dateModifyMinutes(fromValue * -1, nowDate)),\n until: now,\n }\n }\n }\n }\n return null\n }\n\n const getValue = (\n value: AllowedFilterValues,\n config: FilterField\n ): string | number | boolean | null => {\n if (isNull(value)) {\n if (config.mandatory && !config.exclude && !isUndefined(config.default)) {\n return isArray(config.default) ? config.default.join(',') : config.default\n }\n return null\n }\n if (isString(value)) {\n if (value.length === 0) {\n if (config.mandatory && !config.exclude && !isUndefined(config.default) && !isNull(config.default)) {\n return encodeURIComponent(isArray(config.default) ? config.default.join(',') : config.default)\n }\n return null\n }\n return encodeURIComponent(value)\n }\n if (isArray(value)) {\n if (value.length === 0) {\n if (config.mandatory && !config.exclude && isArray(config.default)) {\n return config.default.map((item) => (isString(item) ? encodeURIComponent(item) : item)).join(',')\n }\n return null\n }\n return value.map((item) => (isString(item) ? encodeURIComponent(item) : item)).join(',')\n }\n if (isNumber(value) || isBoolean(value)) {\n return value\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 = (filterData: FilterData<any>, filterConfig: FilterConfig<any>): void => {\n const isSimpleFilters = filterConfig.general.simpleFilters\n for (const filterName in filterData) {\n const filterFieldValue = filterData[filterName] as AllowedFilterValues\n const filterFieldConfig = filterConfig.fields[filterName]\n if (isUndefined(filterFieldConfig) || filterFieldConfig.exclude) {\n continue\n }\n const name = filterFieldConfig.apiName || filterName\n if (filterFieldConfig.type === 'timeInterval' && !isUndefined(filterFieldConfig.related)) {\n const data = resolveTimeIntervalFilter(\n filterName,\n filterFieldConfig.related,\n filterData,\n filterConfig,\n filterFieldConfig.mandatory,\n filterFieldConfig.exclude\n )\n if (isNull(data)) {\n continue\n }\n const filterFieldConfigRelated = filterConfig.fields[filterFieldConfig.related]\n const nameRelated = filterFieldConfigRelated.apiName || filterFieldConfig.related\n if (isSimpleFilters) {\n queryAdd(name, data.from)\n queryAdd(nameRelated, data.until)\n continue\n }\n if (data.from) queryAddFilter('gte', name, data.from)\n if (data.until) {\n queryAddFilter('lte', nameRelated, data.until)\n }\n continue\n }\n const value = getValue(filterFieldValue, filterFieldConfig)\n if (isNull(value)) {\n continue\n }\n if (isSimpleFilters) {\n queryAdd(name, value)\n continue\n }\n queryAddFilter(filterFieldConfig.variant, name, value)\n }\n }\n\n return {\n resolveTimeIntervalFilter,\n querySetLimit,\n querySetOffset,\n querySetOrder,\n queryAddFilter,\n querySetFilters,\n queryAdd,\n queryBuild,\n q,\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, isAnzuApiResponseCodeError } 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 { AxiosRequestConfig } from 'axios'\nimport axios from 'axios'\nimport { useApiQueryBuilder } from '@/labs/api/useApiQueryBuilder'\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'\nimport {\n AnzuApiDependencyExistsError,\n axiosErrorResponseHasDependencyExistsData,\n} from '@/model/error/AnzuApiDependencyExistsError'\nimport type { FilterConfig, FilterData } from '@/labs/filters/filterFactory'\nimport type { Ref } from 'vue'\nimport { AnzuApiAxiosError } from '@/model/error/AnzuApiAxiosError'\nimport { AnzuApiTimeoutError, axiosErrorIsTimeout } from '@/model/error/AnzuApiTimeoutError'\nimport { isDefined, isUndefined } from '@/utils/common'\nimport type { Pagination } from '@/labs/filters/pagination'\nimport { SortOrder } from '@/composables/system/datatableColumns'\nimport type { AxiosClientFn } from '@/labs/api/client'\n\nexport const generateListQuery = (\n pagination: Ref<Pagination>,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>\n): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, querySetFilters } = useApiQueryBuilder()\n querySetLimit(pagination.value.rowsPerPage)\n querySetOffset(pagination.value.page, pagination.value.rowsPerPage)\n if (pagination.value.sortBy) {\n querySetOrder(pagination.value.sortBy.key, pagination.value.sortBy.order === SortOrder.Desc)\n }\n querySetFilters(filterData, filterConfig)\n return queryBuild()\n}\n\n/**\n * @template R Response type override, optional\n */\nexport const useApiFetchList = <R>(\n client: AxiosClientFn,\n system: string,\n entity: string,\n urlTemplate: string | undefined = undefined,\n urlParams: UrlParams | undefined = undefined,\n options: AxiosRequestConfig = {}\n): UseApiFetchListReturnType<R> => {\n let abortController: AbortController | null = null\n\n const executeFetch = async (\n pagination: Ref<Pagination>,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n urlTemplateOverride: string | undefined = undefined,\n urlParamsOverride: UrlParams | undefined = undefined,\n forceElastic = false\n ): Promise<R> => {\n abortController = new AbortController()\n\n try {\n const searchApi = filterConfig.general.elastic || forceElastic ? '/search' : ''\n const params = isDefined(urlParamsOverride) ? urlParamsOverride : urlParams\n const template = isDefined(urlTemplateOverride) ? urlTemplateOverride : urlTemplate\n if (isUndefined(template)) throw new Error('Url template is undefined')\n const url =\n (isUndefined(params) ? template : replaceUrlParameters(template, params)) +\n searchApi +\n generateListQuery(pagination, filterData, filterConfig)\n\n const res = await client().get(url, {\n ...options,\n signal: abortController.signal,\n })\n\n if (!isValidHTTPStatus(res.status)) {\n throw new AnzuApiResponseCodeError(res.status)\n }\n\n if (res.data) {\n const resData = res.data as unknown as ApiResponseList<R> | ApiInfiniteResponseList<R>\n if (isApiInfiniteResponseList(resData)) {\n pagination.value = {\n ...pagination.value,\n ...{ hasNextPage: resData.hasNextPage, currentViewCount: res.data.data.length },\n }\n } else if (isApiResponseList(resData)) {\n pagination.value = {\n ...pagination.value,\n ...{ totalCount: resData.totalCount, currentViewCount: res.data.data.length },\n }\n }\n return resData.data\n }\n\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return [] as R\n }\n\n throw new AnzuFatalError()\n } catch (err: any) {\n if (err instanceof DOMException && err.name === 'AbortError') {\n return [] as R\n }\n\n if (isAnzuApiResponseCodeError(err)) {\n throw err\n }\n\n if (axiosErrorResponseIsForbidden(err)) {\n throw new AnzuApiForbiddenError(err, err.config?.url)\n }\n\n if (axiosErrorResponseHasValidationData(err)) {\n throw new AnzuApiValidationError(err, system, entity, err)\n }\n\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n throw new AnzuApiDependencyExistsError(err, system, entity, err)\n }\n\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n throw new AnzuApiForbiddenOperationError(err, err)\n }\n\n if (axiosErrorIsTimeout(err)) {\n throw new AnzuApiTimeoutError(err)\n }\n\n if (axios.isAxiosError(err)) {\n console.error('Axios error: ' + urlTemplateOverride, err.cause)\n throw new AnzuApiAxiosError(err)\n }\n\n console.error('AnzuFatalError: ', err)\n throw new AnzuFatalError(err)\n } finally {\n abortController = null\n }\n }\n\n const abortFetch = () => {\n if (abortController) {\n abortController.abort()\n }\n }\n\n return {\n executeFetch,\n abortFetch,\n }\n}\n\nexport type UseApiFetchListReturnType<R> = {\n executeFetch: (\n pagination: Ref<Pagination>,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n urlTemplateOverride?: string | undefined,\n urlParamsOverride?: UrlParams | undefined,\n forceElastic?: boolean\n ) => Promise<R>\n abortFetch: () => void\n}\n","import { type DatatableSortBy, SortOrder, type SortOrderType } from '@/composables/system/datatableColumns'\nimport { type Ref, ref } from 'vue'\nimport { isNull, isString, isUndefined } from '@/utils/common'\n\nexport interface Pagination {\n sortBy: DatatableSortBy\n page: number\n rowsPerPage: number\n rowsNumber: number\n hasNextPage: null | boolean\n currentViewCount: number\n totalCount: number\n}\n\ninterface PaginationOptions {\n rowsPerPage: number\n}\n\nconst createDefaultPaginationOptions = () => {\n return {\n rowsPerPage: 25,\n }\n}\n\nexport function usePagination(\n sortKey: string | null,\n sortOrder: SortOrderType = SortOrder.Desc,\n options: Partial<PaginationOptions> = {},\n externalPaginationRef?: Ref<Pagination>\n): UsePaginationReturnType {\n const mergedOptions = { ...createDefaultPaginationOptions(), ...options }\n\n const pagination =\n externalPaginationRef ??\n ref<Pagination>({\n sortBy: isNull(sortKey) ? null : { key: sortKey, order: sortOrder },\n page: 1,\n rowsPerPage: mergedOptions.rowsPerPage,\n rowsNumber: 0,\n hasNextPage: null,\n currentViewCount: 0,\n totalCount: 0,\n })\n\n /**\n * Update sorting for the datatable.\n * Supported call variants:\n * 1) setSortBy(sortBy: DatatableSortBy) — pass a DatatableSortBy object\n * 2) setSortBy(sortKey: string, sortOrder: SortOrderType) — pass key and order separately\n */\n function setSortBy(sortBy: DatatableSortBy): void\n function setSortBy(sortKey: string, sortOrder: SortOrderType): void\n function setSortBy(arg1: DatatableSortBy | string, arg2?: SortOrderType): void {\n if (isString(arg1)) {\n pagination.value = { ...pagination.value, sortBy: { key: arg1, order: arg2 as SortOrderType } }\n return\n }\n\n const sortBy = arg1\n if (isNull(sortBy) || isUndefined(sortBy)) {\n pagination.value = { ...pagination.value, sortBy }\n return\n }\n pagination.value = { ...pagination.value, sortBy: { key: sortBy.key, order: sortBy.order } }\n }\n\n const setPage = (page: number) => {\n pagination.value = { ...pagination.value, page }\n }\n\n const incrementPage = () => {\n pagination.value = { ...pagination.value, page: pagination.value.page + 1 }\n return pagination.value.page\n }\n\n return {\n pagination,\n setSortBy,\n setPage,\n incrementPage,\n }\n}\n\ninterface UsePaginationReturnType {\n pagination: Ref<Pagination>\n setSortBy: (sortBy: DatatableSortBy) => void\n setPage: (page: number) => void\n incrementPage: () => number\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'\nimport {\n AnzuApiDependencyExistsError,\n axiosErrorResponseHasDependencyExistsData,\n} from '@/model/error/AnzuApiDependencyExistsError'\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, err.config?.url))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n return reject(new AnzuApiDependencyExistsError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n // todo catch another axios errors, for example timeout\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import type { InjectionKey, Ref } from 'vue'\nimport type { FilterConfig, FilterData } from '@/labs/filters/filterFactory'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/labs/filters/pagination'\n\nexport const FilterDataKey: InjectionKey<FilterData> = Symbol.for('anzu:FilterDataKey')\nexport const FilterConfigKey: InjectionKey<FilterConfig> = Symbol.for('anzu:FilterConfigKey')\n\nexport const FilterInnerDataKey: InjectionKey<FilterData> = Symbol.for('anzu:FilterInnerDataKey')\nexport const FilterInnerConfigKey: InjectionKey<FilterConfig> = Symbol.for('anzu:FilterInnerConfigKey')\n\nexport const FilterSubmitResetCounterKey: InjectionKey<Ref<number>> = Symbol.for('anzu:FilterSubmitResetCounterKey')\nexport const FilterSelectedKey: InjectionKey<Ref<Map<string, ValueObjectOption<string | number>[]>>> =\n Symbol.for('anzu:FilterSelectedKey')\n\nexport const DatatablePaginationKey: InjectionKey<Ref<Pagination>> = Symbol.for('anzu:DatatablePaginationKey')\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed, inject } from 'vue'\nimport { isNull, isUndefined } from '@/utils/common'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport { useFilterClearHelpers } from '@/labs/filters/filterFactory'\n\ninterface BooleanSelectOption {\n value: 0 | 1 | -1\n title: string\n}\n\nconst props = withDefaults(\n defineProps<{\n name: string\n allT?: string\n trueT?: string\n falseT?: string\n dataCy?: string\n }>(),\n {\n dataCy: 'filter-boolean',\n allT: 'common.model.all',\n trueT: 'common.model.boolean.true',\n falseT: 'common.model.boolean.false',\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\nconst submitResetCounter = inject(FilterSubmitResetCounterKey)\nconst filterSelected = inject(FilterSelectedKey)\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\n\nif (\n isUndefined(submitResetCounter) ||\n isUndefined(filterSelected) ||\n isUndefined(filterConfig) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterConfig.fields[props.name]) ||\n isUndefined(filterData) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterData[props.name])\n) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst modelValue = computed({\n get(): BooleanSelectOption {\n if (isUndefined(filterData[props.name]) || isNull(filterData[props.name]))\n return {\n value: -1,\n title: t(props.allT),\n }\n return filterData[props.name] ? { value: 1, title: t(props.trueT) } : { value: 0, title: t(props.falseT) }\n },\n set(newValue: BooleanSelectOption) {\n let returnValue: null | boolean = null\n if (newValue?.value === 1) returnValue = true\n if (newValue?.value === 0) returnValue = false\n filterData[props.name] = returnValue\n updateSelected()\n filterConfig.touched = true\n emit('change')\n },\n})\n\nconst filterConfigCurrent = computed(() => filterConfig.fields[props.name])\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return filterConfigCurrent.value.titleT ? t(filterConfigCurrent.value.titleT) : undefined\n})\n\nconst items = computed<BooleanSelectOption[]>(() => {\n return [\n { value: -1, title: t(props.allT) },\n { value: 1, title: t(props.trueT) },\n { value: 0, title: t(props.falseT) },\n ]\n})\n\nconst { clearOne } = useFilterClearHelpers()\n\nconst clearField = () => {\n clearOne(props.name, filterData, filterConfig)\n filterSelected.value.delete(props.name)\n}\n\nconst updateSelected = () => {\n if (modelValue.value.value === -1) {\n filterSelected.value.delete(props.name)\n return\n }\n filterSelected.value.set(props.name, [{ title: modelValue.value.title, value: modelValue.value.value }])\n}\n</script>\n\n<template>\n <VSelect\n v-model=\"modelValue\"\n :data-cy=\"dataCy\"\n :label=\"label\"\n :items=\"items\"\n :clearable=\"!filterConfigCurrent.mandatory && modelValue.value !== -1\"\n return-object\n hide-details\n autocomplete=\"off\"\n @click:clear.stop=\"clearField\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { isBoolean, isNumber, isString, isUndefined } from '@/utils/common'\nimport { useFilterClearHelpers } from '@/labs/filters/filterFactory'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/labs/filters/filterInjectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n name: string\n placeholder?: string | undefined\n dataCy?: string\n }>(),\n {\n placeholder: undefined,\n dataCy: 'filter-string',\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\nconst submitResetCounter = inject(FilterSubmitResetCounterKey)\nconst filterSelected = inject(FilterSelectedKey)\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\n\nif (\n isUndefined(submitResetCounter) ||\n isUndefined(filterSelected) ||\n isUndefined(filterConfig) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterConfig.fields[props.name]) ||\n isUndefined(filterData) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterData[props.name])\n) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst modelValue = computed({\n get() {\n return filterData[props.name]\n },\n set(newValue) {\n filterData[props.name] = newValue\n filterConfig.touched = true\n emit('change')\n },\n})\n\nconst filterConfigCurrent = computed(() => filterConfig.fields[props.name])\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return filterConfigCurrent.value.titleT ? t(filterConfigCurrent.value.titleT) : undefined\n})\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (filterConfigCurrent.value.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (filterConfigCurrent.value.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (filterConfigCurrent.value.variant === 'search') return t('common.model.filterPlaceholder.contains')\n return ''\n})\n\nconst { clearOne } = useFilterClearHelpers()\n\nconst clearField = () => {\n clearOne(props.name, filterData, filterConfig)\n filterSelected.value.delete(props.name)\n}\n\nconst updateSelected = () => {\n if (isNumber(modelValue.value)) {\n filterSelected.value.set(props.name, [{ title: modelValue.value + '', value: modelValue.value }])\n return\n }\n if (!isString(modelValue.value)) return\n if (isString(modelValue.value) && modelValue.value.length === 0) {\n filterSelected.value.delete(props.name)\n return\n }\n filterSelected.value.set(props.name, [{ title: modelValue.value, value: modelValue.value }])\n}\n\nwatch(\n () => filterData[props.name],\n (newValue, oldValue) => {\n if (newValue === oldValue || isBoolean(newValue)) return\n updateSelected()\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VTextField\n v-model=\"modelValue\"\n :label=\"label\"\n :placeholder=\"placeholderComputed\"\n :clearable=\"!filterConfigCurrent.mandatory\"\n :data-cy=\"dataCy\"\n hide-details\n autocomplete=\"off\"\n @blur=\"updateSelected\"\n @click:clear.stop=\"clearField\"\n />\n</template>\n","<script lang=\"ts\" setup generic=\"T extends string | number\">\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, getCurrentInstance, inject, type Ref, ref, watch } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { isArray, isBoolean, isEmpty, isNull, isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { type FilterConfig, type FilterData, useFilterClearHelpers } from '@/labs/filters/filterFactory'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterInnerConfigKey,\n FilterInnerDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport type { DatatableSortBy } from '@/composables/system/datatableColumns'\nimport { type Pagination, usePagination } from '@/labs/filters/pagination'\nimport { useAlerts } from '@/composables/system/alerts'\n\ntype ModelValueType = T | T[] | null | undefined\n\nconst props = withDefaults(\n defineProps<{\n name: string\n fetchItems: (\n pagination: Ref<Pagination>,\n filterData: FilterData,\n filterConfig: FilterConfig\n ) => Promise<ValueObjectOption<T>[]>\n fetchItemsByIds: (ids: T[]) => Promise<ValueObjectOption<T>[]>\n filterByField: string\n filterSortBy?: DatatableSortBy\n prefetch?: 'hover' | 'focus' | 'mounted' | false\n minSearchChars?: number\n minSearchText?: string | undefined\n placeholder?: string | undefined\n }>(),\n {\n filterSortBy: null,\n prefetch: false,\n minSearchChars: 2,\n minSearchText: undefined,\n placeholder: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\nconst submitResetCounter = inject(FilterSubmitResetCounterKey)\nconst filterSelected = inject(FilterSelectedKey)\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nconst filterInnerConfig = inject(FilterInnerConfigKey)\nconst filterInnerData = inject(FilterInnerDataKey)\n\nconst componentName = getCurrentInstance()?.type.__name\n\nif (\n isUndefined(submitResetCounter) ||\n isUndefined(filterSelected) ||\n isUndefined(filterData) ||\n isUndefined(filterConfig) ||\n isUndefined(filterInnerConfig) ||\n isUndefined(filterInnerData)\n) {\n throw new Error(`[${componentName}] Incorrect provide/inject config.`)\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst filterByFieldProp = props.filterByField\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst filterSortByProp = props.filterSortBy\n\nif (isUndefined(filterInnerConfig.fields[filterByFieldProp]) || isUndefined(filterInnerData[filterByFieldProp])) {\n throw new Error(\n `[${componentName}] Incorrect filter inner config. ` +\n `FilterByField is '${filterByFieldProp}' and available options are ${Object.keys(filterInnerData).join(', ')}.`\n )\n}\n\nconst filterConfigCurrent = computed(() => filterConfig.fields[props.name])\n\nconst SEARCH_DEBOUNCE_MS = 300\n\nconst selected = ref<any>([])\nconst search = ref('')\nconst isFocused = ref(false)\nconst modelValueAutocomplete = ref<ValueObjectOption<T> | ValueObjectOption<T>[] | null>(null)\nconst apiRequestCounter = ref(0)\n\nconst { t } = useI18n()\n\nconst onBlur = () => {\n isFocused.value = false\n}\n\nconst label = computed(() => {\n return filterConfigCurrent.value.titleT ? t(filterConfigCurrent.value.titleT) : undefined\n})\n\nconst { pagination } = usePagination(isNull(filterSortByProp) ? null : filterSortByProp.key, filterSortByProp?.order)\n\nconst fetchedItems = ref<ValueObjectOption<T>[]>([])\nconst selectedItemsCache = ref<ValueObjectOption<T>[]>([])\nconst isFirstLoad = ref(true)\nconst prefetchCompleted = ref(false)\n\nconst allItems = computed<ValueObjectOption<T>[]>(() => {\n const itemsMap = new Map<T, ValueObjectOption<T>>()\n const addToMap = (items: ValueObjectOption<T>[]) => {\n items.forEach((item) => {\n itemsMap.set(item.value, {\n value: item.value,\n title: item.title,\n subtitle: item.subtitle,\n } as ValueObjectOption<T>)\n })\n }\n\n addToMap(selectedItemsCache.value as ValueObjectOption<T>[])\n addToMap(fetchedItems.value as ValueObjectOption<T>[])\n\n return Array.from(itemsMap.values())\n})\n\nconst loading = ref(false)\n\nconst resetToEmptyState = (value: ModelValueType) => {\n selectedItemsCache.value = []\n selected.value = isArray(value) ? [] : null\n modelValueAutocomplete.value = isArray(value) ? [] : null\n updateFilterSelected(selected.value)\n}\n\nconst updateSelected = (value: T[] | T) => {\n const findItem = (id: T): ValueObjectOption<T> =>\n allItems.value.find((obj) => obj.value === id) ?? ({ title: `${id}`, value: id } as ValueObjectOption<T>)\n return isArray(value) ? value.map(findItem) : findItem(value)\n}\n\nconst loadListItems = async (ids: T[] | T) => {\n loading.value = true\n\n try {\n const idsArray = isArray(ids) ? ids : [ids]\n try {\n selectedItemsCache.value = await props.fetchItemsByIds(idsArray)\n const selectedNewValue = updateSelected(ids)\n selected.value = selectedNewValue\n modelValueAutocomplete.value = selectedNewValue\n updateFilterSelected(selected.value)\n } catch (e) {\n showErrorsDefault(e)\n }\n return selectedItemsCache.value\n } finally {\n loading.value = false\n }\n}\n\nconst { showErrorsDefault } = useAlerts()\n\nconst apiSearch = async (query: string, requestCounter: number) => {\n loading.value = true\n filterInnerData[filterByFieldProp] = query\n try {\n const res = await props.fetchItems(pagination, filterInnerData, filterInnerConfig)\n if (requestCounter === apiRequestCounter.value) fetchedItems.value = res\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n loading.value = false\n }\n}\n\nconst tryAutoFetch = async (mode: 'focus' | 'hover' | 'mounted') => {\n if (props.prefetch === false || props.prefetch !== mode) return\n if (loading.value) return\n if (prefetchCompleted.value) return\n\n loading.value = true\n try {\n const res = await props.fetchItems(pagination, filterInnerData, filterInnerConfig)\n if (apiRequestCounter.value === 0) {\n fetchedItems.value = res\n }\n prefetchCompleted.value = true\n } finally {\n loading.value = false\n }\n}\n\nconst onFocus = async () => {\n isFocused.value = true\n await tryAutoFetch('focus')\n}\n\nconst onMouseEnter = async () => {\n await tryAutoFetch('hover')\n}\n\nconst singleItemSelectedTitle = computed(() => {\n if (!filterConfigCurrent.value.multiple && selectedItemsCache.value[0]) {\n return selectedItemsCache.value[0].title\n }\n return undefined\n})\n\nconst onSearchUpdate = (query: string) => {\n if (!filterConfigCurrent.value.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n if (singleItemSelectedTitle.value === query) return\n search.value = query\n}\n\nconst { clearOne } = useFilterClearHelpers()\n\nconst clearField = () => {\n clearOne(props.name, filterData, filterConfig)\n filterSelected.value.delete(props.name)\n}\n\nconst onClickClear = async () => {\n try {\n fetchedItems.value = await props.fetchItems(pagination, filterInnerData, filterInnerConfig)\n } catch (e) {\n showErrorsDefault(e)\n }\n clearField()\n}\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (newValue.length > 0 && newValue.length < props.minSearchChars) return\n if (newValue.length === 0 && props.prefetch === false) {\n fetchedItems.value = []\n return\n }\n apiRequestCounter.value++\n apiSearch(newValue, apiRequestCounter.value)\n },\n { debounce: SEARCH_DEBOUNCE_MS }\n)\n\nconst checkFirstLoad = async () => {\n await tryAutoFetch('mounted')\n}\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (filterConfigCurrent.value.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (filterConfigCurrent.value.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (filterConfigCurrent.value.variant === 'search') return t('common.model.filterPlaceholder.contains')\n return ''\n})\n\nconst noDataText = computed(() => {\n if (loading.value) {\n return '$vuetify.loading'\n }\n if (fetchedItems.value.length === 0 && search.value.length < props.minSearchChars) {\n return isUndefined(props.minSearchText)\n ? t('common.filter.filterMinChars', { min: props.minSearchChars })\n : props.minSearchText\n }\n return undefined\n})\n\nconst onSelectedUpdate = (newValue: any) => {\n filterConfig.touched = true\n let final: null | string | number | string[] | number[] = null\n if (isArray(newValue)) {\n final = newValue.map((item: any) => item.value) as string[] | number[]\n } else if (!isNull(newValue)) {\n final = newValue.value\n }\n filterData[props.name] = final\n emit('change')\n}\n\nconst updateFilterSelected = (\n newValue: ValueObjectOption<string | number> | ValueObjectOption<string | number>[] | null\n) => {\n filterSelected.value.delete(props.name)\n if ((isArray(newValue) && newValue.length === 0) || isNull(newValue)) {\n filterSelected.value.delete(props.name)\n return\n }\n if (isArray(newValue)) {\n filterSelected.value.set(\n props.name,\n newValue.map((item) => ({ title: item.title, value: item.value }))\n )\n return\n }\n filterSelected.value.set(props.name, [{ title: newValue.title, value: newValue.value }])\n}\n\nwatch(\n () => filterData[props.name],\n async (newValueFilterData, oldValueFilterData) => {\n if (newValueFilterData === oldValueFilterData || isBoolean(newValueFilterData)) return\n const newValue = newValueFilterData as ModelValueType\n if (isFirstLoad.value) {\n isFirstLoad.value = false\n await checkFirstLoad()\n }\n if (isEmpty(newValue)) {\n resetToEmptyState(newValue)\n if (!isUndefined(oldValueFilterData)) {\n apiRequestCounter.value++\n await apiSearch('', apiRequestCounter.value)\n }\n return\n }\n await loadListItems(newValue as T[] | T)\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"selected\"\n :items=\"allItems\"\n no-filter\n :placeholder=\"placeholderComputed\"\n :multiple=\"filterConfigCurrent.multiple\"\n :clearable=\"!filterConfigCurrent.mandatory\"\n :label=\"label\"\n :chips=\"filterConfigCurrent.multiple\"\n :loading=\"loading\"\n hide-details\n return-object\n autocomplete=\"off\"\n :no-data-text=\"noDataText\"\n @update:search=\"onSearchUpdate\"\n @update:model-value=\"onSelectedUpdate\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @mouseenter=\"onMouseEnter\"\n @click:clear=\"onClickClear\"\n >\n <template\n v-if=\"loading\"\n #no-data\n >\n <VListItem :title=\"t('$vuetify.loading')\" />\n </template>\n <template #item=\"{ props: itemProps, item }\">\n <VListItem\n v-bind=\"itemProps\"\n :title=\"item.raw.title\"\n :subtitle=\"item.raw.subtitle\"\n />\n </template>\n <template #chip=\"{ props: chipProps, item }\">\n <VChip\n :closable=\"chipProps.closable as boolean\"\n size=\"small\"\n :text=\"`${item.title} (${item.raw.subtitle})`\"\n :disabled=\"item.props.disabled\"\n >\n {{ item.raw.title }}\n <span\n v-if=\"item.raw.subtitle\"\n class=\"font-italic pl-1\"\n >\n ({{ item.raw.subtitle }})\n </span>\n </VChip>\n </template>\n </VAutocomplete>\n</template>\n","export function isOneOf<T>(value: T, enumValues: T[]): boolean {\n return enumValues.includes(value)\n}\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, getCurrentInstance, inject, type Ref, ref, watch } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { cloneDeep, isArray, isBoolean, isNull, isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId, IntegerId } from '@/types/common'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterInnerConfigKey,\n FilterInnerDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport { type FilterConfig, type FilterData, useFilterClearHelpers } from '@/labs/filters/filterFactory'\nimport { isOneOf } from '@/utils/enum'\nimport type { DatatableSortBy } from '@/composables/system/datatableColumns'\nimport { type Pagination, usePagination } from '@/labs/filters/pagination'\nimport { useAlerts } from '@/composables/system/alerts'\n\ntype FetchItemsMinimalByIdsType = ((ids: IntegerId[]) => Promise<any[]>) | ((ids: DocId[]) => Promise<any[]>)\n\ntype FetchItemsMinimalType = (\n pagination: Ref<Pagination>,\n filterData: FilterData,\n filterConfig: FilterConfig\n) => Promise<any[]>\n\nconst props = withDefaults(\n defineProps<{\n name: string\n fetchItemsMinimal: FetchItemsMinimalType\n fetchItemsMinimalByIds: FetchItemsMinimalByIdsType\n filterByField: string\n filterSortBy?: DatatableSortBy\n placeholder?: string | undefined\n prefetch?: 'hover' | 'focus' | 'mounted' | false\n searchMinChars?: number\n itemTitle?: string\n itemValue?: string\n }>(),\n {\n filterSortBy: null,\n placeholder: undefined,\n prefetch: false,\n searchMinChars: 2,\n itemTitle: 'name',\n itemValue: 'id',\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\nconst submitResetCounter = inject(FilterSubmitResetCounterKey)\nconst filterSelected = inject(FilterSelectedKey)\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nconst filterInnerConfig = inject(FilterInnerConfigKey)\nconst filterInnerData = inject(FilterInnerDataKey)\n\nconst componentName = getCurrentInstance()?.type.__name\n\nif (\n isUndefined(submitResetCounter) ||\n isUndefined(filterSelected) ||\n isUndefined(filterData) ||\n isUndefined(filterConfig) ||\n isUndefined(filterInnerConfig) ||\n isUndefined(filterInnerData)\n) {\n throw new Error(`[${componentName}] Incorrect provide/inject config.`)\n}\n\nif (\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterConfig.fields[props.name]) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterData[props.name])\n) {\n throw new Error(\n `[${componentName}] Incorrect filter config. ` +\n `Name is '${props.name}' and available options are ${Object.keys(filterData).join(', ')}.`\n )\n}\n\nif (\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterInnerConfig.fields[props.filterByField]) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterInnerData[props.filterByField])\n) {\n throw new Error(\n `[${componentName}] Incorrect filter inner config. ` +\n `FilterByField is '${props.filterByField}' and available options are ${Object.keys(filterInnerData).join(', ')}.`\n )\n}\n\nconst selected = ref<any>([])\nconst search = ref('')\nconst isFocused = ref(false)\nconst autoFetchTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nconst apiRequestCounter = ref(0)\n\nconst { t } = useI18n()\n\nconst filterConfigCurrent = computed(() => filterConfig.fields[props.name])\n\nconst onBlur = () => {\n isFocused.value = false\n}\n\nconst label = computed(() => {\n return filterConfigCurrent.value.titleT ? t(filterConfigCurrent.value.titleT) : undefined\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { pagination } = usePagination(\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isNull(props.filterSortBy) ? null : props.filterSortBy.key,\n props.filterSortBy?.order\n)\nconst fetchedItems = ref<any[]>([])\nconst selectedItemsCache = ref<any[]>([])\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final = new Map()\n const finalRaw: Map<IntegerId | DocId, any> = new Map()\n selectedItemsCache.value.forEach((value) => {\n if (value.raw) {\n final.set(value.raw[props.itemValue], value.raw[props.itemTitle])\n finalRaw.set(value.raw[props.itemValue], cloneDeep(value.raw))\n } else {\n final.set(value[props.itemValue], value[props.itemTitle])\n finalRaw.set(value[props.itemValue], cloneDeep(value))\n }\n })\n fetchedItems.value.forEach((value) => {\n if (value.raw) {\n final.set(value.raw[props.itemValue], value.raw[props.itemTitle])\n finalRaw.set(value.raw[props.itemValue], cloneDeep(value.raw))\n } else {\n final.set(value[props.itemValue], value[props.itemTitle])\n finalRaw.set(value[props.itemValue], cloneDeep(value))\n }\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value, raw: finalRaw.get(key) }\n })\n})\n\nconst loading = ref(false)\n\nconst { showErrorsDefault } = useAlerts()\n\nconst apiSearch = async (query: string, requestCounter: number) => {\n loading.value = true\n filterInnerData[props.filterByField] = query\n try {\n const res = await props.fetchItemsMinimal(pagination, filterInnerData, filterInnerConfig)\n if (requestCounter === apiRequestCounter.value) fetchedItems.value = res\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\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 (newValue: string | number | Array<string | number>) => {\n let count = 1\n let foundItems: ValueObjectOption<string | number>[] = []\n if (isArray(newValue)) {\n count = newValue.length\n foundItems = findLocalDataByValues(newValue)\n } else {\n foundItems = findLocalDataByValues([newValue])\n }\n selectedItemsCache.value = foundItems\n return foundItems.length === count\n}\n\nconst autoFetched = ref(false)\n\nconst clearAutoFetchTimer = () => {\n clearTimeout(autoFetchTimer.value)\n autoFetchTimer.value = undefined\n}\n\nconst autoFetch = async () => {\n clearAutoFetchTimer()\n if (autoFetched.value === true) return\n autoFetched.value = true\n loading.value = true\n try {\n const res = await props.fetchItemsMinimal(pagination, filterInnerData, filterInnerConfig)\n if (apiRequestCounter.value === 0) fetchedItems.value = res\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n}\n\nconst onFocus = () => {\n isFocused.value = true\n if (props.prefetch === false) return\n clearAutoFetchTimer()\n autoFetch()\n}\n\nconst onMouseEnter = () => {\n if (props.prefetch === 'focus' || props.prefetch === false) return\n clearAutoFetchTimer()\n autoFetch()\n}\n\nconst singleItemSelectedTitle = computed(() => {\n if (!filterConfigCurrent.value.multiple && selectedItemsCache.value[0]) {\n return selectedItemsCache.value[0].title\n }\n return undefined\n})\n\nconst onSearchUpdate = (query: string) => {\n if (!filterConfigCurrent.value.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n if (singleItemSelectedTitle.value === query) return\n search.value = query\n}\n\nconst onSelectedUpdate = (newValue: any) => {\n filterConfig.touched = true\n let final: null | string | number | string[] | number[] = null\n if (isArray(newValue)) {\n final = newValue.map((item: any) => item.value) as string[] | number[]\n } else if (!isNull(newValue)) {\n final = newValue.value\n }\n filterData[props.name] = final\n emit('change')\n}\n\nconst onClickClear = async () => {\n try {\n fetchedItems.value = await props.fetchItemsMinimal(pagination, filterInnerData, filterInnerConfig)\n } catch (e) {\n showErrorsDefault(e)\n }\n clearField()\n}\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (filterConfigCurrent.value.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (filterConfigCurrent.value.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (filterConfigCurrent.value.variant === 'search') return t('common.model.filterPlaceholder.contains')\n return ''\n})\n\nconst { clearOne } = useFilterClearHelpers()\n\nconst clearField = () => {\n clearOne(props.name, filterData, filterConfig)\n filterSelected.value.delete(props.name)\n}\n\nconst updateFilterSelected = (\n newValue: ValueObjectOption<string | number> | ValueObjectOption<string | number>[] | null\n) => {\n filterSelected.value.delete(props.name)\n if ((isArray(newValue) && newValue.length === 0) || isNull(newValue)) {\n filterSelected.value.delete(props.name)\n return\n }\n if (isArray(newValue)) {\n filterSelected.value.set(\n props.name,\n newValue.map((item) => ({ title: item.title, value: item.value }))\n )\n return\n }\n filterSelected.value.set(props.name, [{ title: newValue.title, value: newValue.value }])\n}\n\nwatch(\n () => filterData[props.name],\n async (newValue, oldValue) => {\n if (newValue === oldValue || isBoolean(newValue)) return\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n selectedItemsCache.value = []\n if (filterConfigCurrent.value.multiple) {\n selected.value = []\n } else {\n selected.value = null\n }\n updateFilterSelected(selected.value)\n if (autoFetched.value === true || isOneOf(props.prefetch, ['hover', 'focus', false])) return\n autoFetchTimer.value = setTimeout(() => {\n autoFetch()\n }, 3000)\n return\n }\n const found = await tryToLoadFromLocalData(newValue)\n if (found) {\n selected.value = selectedItemsCache.value.map((item) => ({ title: item.title, value: item.value }))\n updateFilterSelected(selected.value)\n return\n }\n if (isArray(newValue)) {\n loading.value = true\n try {\n selectedItemsCache.value = await props.fetchItemsMinimalByIds(newValue as Array<IntegerId & DocId>)\n selected.value = selectedItemsCache.value.map((item) => ({ title: item.title, value: item.value }))\n updateFilterSelected(selected.value)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n return\n }\n loading.value = true\n try {\n selectedItemsCache.value = await props.fetchItemsMinimalByIds([newValue as DocId & IntegerId])\n selected.value = selectedItemsCache.value.map((item) => ({ title: item.title, value: item.value }))[0]\n updateFilterSelected(selected.value)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n },\n { immediate: true }\n)\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n if (newValue.length < props.searchMinChars) return\n if (newValue !== oldValue) {\n apiRequestCounter.value++\n apiSearch(newValue, apiRequestCounter.value)\n }\n },\n { debounce: 300 }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"selected\"\n :items=\"allItems\"\n no-filter\n :placeholder=\"placeholderComputed\"\n :multiple=\"filterConfigCurrent.multiple\"\n :clearable=\"!filterConfigCurrent.mandatory\"\n :label=\"label\"\n :chips=\"filterConfigCurrent.multiple\"\n :loading=\"loading\"\n hide-details\n return-object\n autocomplete=\"off\"\n @update:search=\"onSearchUpdate\"\n @update:model-value=\"onSelectedUpdate\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @mouseenter=\"onMouseEnter\"\n @click:clear=\"onClickClear\"\n >\n <!-- @vue-skip -->\n <template #item=\"{ props: itemProps, item: itemItem }\">\n <slot\n name=\"item\"\n :item=\"itemItem\"\n :props=\"itemProps\"\n >\n <VListItem\n v-bind=\"itemProps\"\n :title=\"itemItem.raw.title\"\n :subtitle=\"itemItem.raw.subtitle\"\n />\n </slot>\n </template>\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 </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { computed, inject, watch, getCurrentInstance } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport { isArray, isBoolean, isUndefined } from '@/utils/common'\nimport { type AllowedFilterValues, useFilterClearHelpers } from '@/labs/filters/filterFactory'\n\nconst props = withDefaults(\n defineProps<{\n name: string\n items: ValueObjectOption<string | number>[]\n }>(),\n {}\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\nconst submitResetCounter = inject(FilterSubmitResetCounterKey)\nconst filterSelected = inject(FilterSelectedKey)\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\n\nconst componentName = getCurrentInstance()?.type.__name\n\nif (\n isUndefined(submitResetCounter) ||\n isUndefined(filterSelected) ||\n isUndefined(filterData) ||\n isUndefined(filterConfig)\n) {\n throw new Error(`[${componentName}] Incorrect provide/inject config.`)\n}\n\nif (\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterConfig.fields[props.name]) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterData[props.name])\n) {\n throw new Error(\n `[${componentName}] Incorrect filter config. ` +\n `Name is '${props.name}' and available options are ${Object.keys(filterData).join(', ')}.`\n )\n}\n\nconst modelValue = computed({\n get() {\n return filterData[props.name]\n },\n set(newValue) {\n filterData[props.name] = newValue\n updateSelected(newValue)\n filterConfig.touched = true\n emit('change')\n },\n})\n\nconst filterConfigCurrent = computed(() => filterConfig.fields[props.name])\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return filterConfigCurrent.value.titleT ? t(filterConfigCurrent.value.titleT) : undefined\n})\n\nconst { clearOne } = useFilterClearHelpers()\n\nconst clearField = () => {\n clearOne(props.name, filterData, filterConfig)\n filterSelected.value.delete(props.name)\n}\n\nconst updateSelected = (newValue: AllowedFilterValues) => {\n if (isArray(newValue) && newValue.length === 0) return\n if (isArray(newValue)) {\n filterSelected.value.set(\n props.name,\n newValue.map((modelItemValue) => {\n const found = props.items.find((item) => item.value === modelItemValue)\n if (found) return { title: found.title, value: found.value }\n return { title: modelItemValue as string, value: modelItemValue as string }\n })\n )\n return\n }\n const found = props.items.find((item) => item.value === newValue)\n if (found) {\n filterSelected.value.set(props.name, [{ title: found.title as string, value: found.value as string }])\n }\n}\n\nwatch(\n () => filterData[props.name],\n (newValue, oldValue) => {\n if (newValue === oldValue || isBoolean(newValue)) return\n updateSelected(newValue)\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :items=\"items\"\n :chips=\"filterConfigCurrent.multiple\"\n :label=\"label\"\n :multiple=\"filterConfigCurrent.multiple\"\n :clearable=\"!filterConfigCurrent.mandatory\"\n data-cy=\"filter-value\"\n hide-details\n autocomplete=\"off\"\n @click:clear.stop=\"clearField\"\n />\n</template>\n","export const datatableSlotName = (columnName: string, prefix = 'item') => {\n return prefix + '.' + columnName\n}\n","<script setup lang=\"ts\">\nconst props = withDefaults(\n defineProps<{\n name: string\n }>(),\n {}\n)\n</script>\n\n<template>\n <div>{{ props.name }}</div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADatetimePicker from '@/components/datetime/ADatetimePicker.vue'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport { isString, isUndefined } from '@/utils/common'\nimport { useFilterClearHelpers } from '@/labs/filters/filterFactory'\nimport type { DatetimeUTCNullable } from '@/types/common'\nimport { dateTimePretty } from '@/utils/datetime'\n\nconst props = withDefaults(\n defineProps<{\n name: string\n dataCy?: string\n }>(),\n {\n dataCy: 'filter-datepicker',\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\nconst submitResetCounter = inject(FilterSubmitResetCounterKey)\nconst filterSelected = inject(FilterSelectedKey)\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\n\nif (\n isUndefined(submitResetCounter) ||\n isUndefined(filterSelected) ||\n isUndefined(filterConfig) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterConfig.fields[props.name]) ||\n isUndefined(filterData) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterData[props.name])\n) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst modelValue = computed({\n get() {\n return filterData[props.name] as DatetimeUTCNullable\n },\n set(newValue: DatetimeUTCNullable) {\n filterData[props.name] = newValue\n updateSelected()\n filterConfig.touched = true\n emit('change')\n },\n})\n\nconst { t } = useI18n()\n\nconst filterConfigCurrent = computed(() => filterConfig.fields[props.name])\n\nconst label = computed(() => {\n return filterConfigCurrent.value.titleT ? t(filterConfigCurrent.value.titleT) : undefined\n})\n\nconst { clearOne } = useFilterClearHelpers()\n\nconst clearField = () => {\n clearOne(props.name, filterData, filterConfig)\n filterSelected.value.delete(props.name)\n}\n\nconst updateSelected = () => {\n if (!isString(modelValue.value) || (isString(modelValue.value) && modelValue.value.length === 0)) return\n filterSelected.value.set(props.name, [{ title: dateTimePretty(modelValue.value), value: modelValue.value }])\n}\n</script>\n\n<template>\n <ADatetimePicker\n v-model=\"modelValue\"\n :data-cy=\"dataCy\"\n :clearable=\"!filterConfigCurrent.mandatory\"\n :default-value=\"filterConfigCurrent.default as DatetimeUTCNullable\"\n :label=\"label\"\n v-bind=\"$attrs\"\n @after-clear=\"clearField\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { useFilterClearHelpers } from '@/labs/filters/filterFactory'\nimport { computed, inject, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { isBoolean, isNumber, isString, isUndefined } from '@/utils/common'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/labs/filters/filterInjectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n name: string\n placeholder?: string | undefined\n dataCy?: string\n }>(),\n {\n placeholder: undefined,\n dataCy: 'filter-integer',\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\nconst submitResetCounter = inject(FilterSubmitResetCounterKey)\nconst filterSelected = inject(FilterSelectedKey)\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\n\nif (\n isUndefined(submitResetCounter) ||\n isUndefined(filterSelected) ||\n isUndefined(filterConfig) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterConfig.fields[props.name]) ||\n isUndefined(filterData) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterData[props.name])\n) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst modelValue = computed({\n get() {\n return filterData[props.name]\n },\n set(newValue) {\n filterData[props.name] = newValue\n filterConfig.touched = true\n emit('change')\n },\n})\n\nconst filterConfigCurrent = computed(() => filterConfig.fields[props.name])\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return filterConfigCurrent.value.titleT ? t(filterConfigCurrent.value.titleT) : undefined\n})\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (filterConfigCurrent.value.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (filterConfigCurrent.value.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (filterConfigCurrent.value.variant === 'search') return t('common.model.filterPlaceholder.contains')\n return ''\n})\n\nconst { clearOne } = useFilterClearHelpers()\n\nconst clearField = () => {\n clearOne(props.name, filterData, filterConfig)\n filterSelected.value.delete(props.name)\n}\n\nconst updateSelected = () => {\n if (isNumber(modelValue.value)) {\n filterSelected.value.set(props.name, [{ title: modelValue.value + '', value: modelValue.value }])\n return\n }\n if (!isString(modelValue.value)) return\n if (isString(modelValue.value) && modelValue.value.length === 0) {\n filterSelected.value.delete(props.name)\n return\n }\n filterSelected.value.set(props.name, [{ title: modelValue.value, value: modelValue.value }])\n}\n\nwatch(\n () => filterData[props.name],\n (newValue, oldValue) => {\n if (newValue === oldValue || isBoolean(newValue)) return\n updateSelected()\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VTextField\n v-model=\"modelValue\"\n :label=\"label\"\n :placeholder=\"placeholderComputed\"\n :clearable=\"!filterConfigCurrent.mandatory\"\n :data-cy=\"dataCy\"\n hide-details\n autocomplete=\"off\"\n @blur=\"updateSelected\"\n @click:clear.stop=\"clearField\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\nimport { FilterConfigKey } from '@/labs/filters/filterInjectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport AFilterEmpty from '@/labs/filters/AFilterEmpty.vue'\nimport AFilterString from '@/labs/filters/AFilterString.vue'\nimport AFilterBooleanSelect from '@/labs/filters/AFilterBooleanSelect.vue'\nimport AFilterDatetimePicker from '@/labs/filters/AFilterDatetimePicker.vue'\nimport AFilterInteger from '@/labs/filters/AFilterInteger.vue'\n\nconst props = withDefaults(\n defineProps<{\n name: string\n }>(),\n {}\n)\n\nconst filterConfig = inject(FilterConfigKey)\n\nif (\n isUndefined(filterConfig) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterConfig.fields[props.name])\n) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst filterConfigCurrent = computed(() => filterConfig.fields[props.name])\n\nconst componentComputed = computed(() => {\n if (filterConfigCurrent.value.render.skip) return AFilterEmpty\n switch (filterConfigCurrent.value.type) {\n case 'string':\n return AFilterString\n case 'datetime':\n return AFilterDatetimePicker\n case 'boolean':\n return AFilterBooleanSelect\n case 'integer':\n return AFilterInteger\n default:\n return AFilterEmpty\n }\n})\n</script>\n\n<template>\n <component\n :is=\"componentComputed\"\n :name=\"name\"\n />\n</template>\n","import { createFilter, createFilterStore, type MakeFilterOption } from '@/labs/filters/filterFactory'\n\nexport function useUserAdminConfigInnerFilter(system: string, subject: string = 'userAdminConfig') {\n const filterFields = [\n { name: 'user' as const, default: null },\n { name: 'configType' as const, default: null },\n { name: 'layoutType' as const, default: null },\n { name: 'systemResource' as const, default: null },\n { name: 'customName' as const, default: null },\n { name: 'defaultConfig' as const, default: null },\n ] satisfies readonly MakeFilterOption[]\n\n const { filterConfig, filterData } = createFilter(filterFields, createFilterStore(filterFields), {\n system,\n subject,\n })\n\n return {\n filterConfig,\n filterData,\n }\n}\n","import type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\nimport type { SortableItemDataAware } from '@/components/sortable/sortableUtils'\nimport type { IntegerId } from '@/types/common'\nimport type { DatatableSortBy } from '@/composables/system/datatableColumns'\n\nexport interface UserAdminConfig<TData = UserAdminConfigDataFilterBookmark | UserAdminConfigDataPinnedWidgets>\n extends AnzuUserAndTimeTrackingAware,\n SortableItemDataAware {\n id: IntegerId\n user: IntegerId\n configType: UserAdminConfigTypeType\n layoutType: UserAdminConfigLayoutTypeType\n systemResource: string\n customName: string\n defaultConfig: boolean\n data: TData\n position: number\n _resourceName: 'userAdminConfig'\n _system: string\n}\n\nexport const UserAdminConfigType = {\n PinnedWidgets: 'pinnedWidgets',\n FilterBookmark: 'filterBookmark',\n} as const\nexport const UserAdminConfigTypeDefault = UserAdminConfigType.PinnedWidgets\nexport type UserAdminConfigTypeType = (typeof UserAdminConfigType)[keyof typeof UserAdminConfigType]\n\nexport const UserAdminConfigLayoutType = {\n Desktop: 'desktop',\n Mobile: 'mobile',\n} as const\nexport const UserAdminConfigLayoutTypeDefault = UserAdminConfigLayoutType.Desktop\nexport type UserAdminConfigLayoutTypeType = (typeof UserAdminConfigLayoutType)[keyof typeof UserAdminConfigLayoutType]\n\nexport interface UserAdminConfigDataFilterBookmark {\n filter: string\n datatableHiddenColumns?: string[]\n sortBy?: DatatableSortBy\n}\n\nexport type UserAdminConfigDataPinnedWidgets<TVariant extends string = string> = Array<{\n variant: TVariant\n position: number\n}>\n","import { acceptHMRUpdate, defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport { useUserAdminConfigInnerFilter } from '@/labs/filters/UserAdminConfigFilter'\nimport { type UserAdminConfig, type UserAdminConfigLayoutTypeType, UserAdminConfigType } from '@/types/UserAdminConfig'\nimport type { IntegerId } from '@/types/common'\nimport type { UseApiFetchListReturnType } from '@/labs/api/useApiFetchList'\nimport { usePagination } from '@/labs/filters/pagination'\nimport { SortOrder } from '@/composables/system/datatableColumns'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\n\ninterface CacheItem<T = UserAdminConfig> {\n lastUsed: number\n items: T[]\n}\n\nconst MAX_BOOKMARKS = 3\nexport const MAX_BOOKMARK_ITEMS = 8\n\nexport const useFilterBookmarkStore = defineStore('filterBookmarkStore', () => {\n const bookmarks = ref(new Map<string, CacheItem>())\n const error = ref(false)\n\n function generateKey(layoutType: UserAdminConfigLayoutTypeType, systemResource: string) {\n return `userAdminConfig/${systemResource}/${layoutType}/`\n }\n\n function removeOldestBookmark() {\n let oldestKey: string | null = null\n let oldestTime = Infinity\n bookmarks.value.forEach((value, bookmarkKey) => {\n if (value.lastUsed < oldestTime) {\n oldestTime = value.lastUsed\n oldestKey = bookmarkKey\n }\n })\n if (oldestKey !== null) {\n bookmarks.value.delete(oldestKey)\n }\n }\n\n async function getBookmarks(\n identifier: {\n user: IntegerId\n layoutType: UserAdminConfigLayoutTypeType\n systemResource: string\n },\n useApiFetch: () => UseApiFetchListReturnType<UserAdminConfig[]>,\n forceFetch: boolean = false\n ): Promise<UserAdminConfig[]> {\n error.value = false\n const key = generateKey(identifier.layoutType, identifier.systemResource)\n const now = Date.now()\n\n if (!forceFetch) {\n const cached = bookmarks.value.get(key)\n if (cached) {\n cached.lastUsed = now\n return cached.items\n }\n }\n\n const { pagination } = usePagination('position', SortOrder.Asc, {\n rowsPerPage: MAX_BOOKMARK_ITEMS,\n })\n const { start: system, end: resource } = stringSplitOnFirstOccurrence(identifier.systemResource, '_')\n const { filterConfig, filterData } = useUserAdminConfigInnerFilter(system, resource)\n filterData.configType = UserAdminConfigType.FilterBookmark\n filterData.layoutType = identifier.layoutType\n filterData.systemResource = identifier.systemResource\n filterData.user = identifier.user\n\n let items: UserAdminConfig[] = []\n try {\n const { executeFetch } = useApiFetch()\n items = await executeFetch(pagination, filterData, filterConfig)\n bookmarks.value.set(key, { lastUsed: now, items })\n } catch (e) {\n error.value = true\n }\n\n if (bookmarks.value.size > MAX_BOOKMARKS) {\n removeOldestBookmark()\n }\n\n return items\n }\n\n async function fetchBookmarksCount(\n identifier: {\n user: IntegerId\n layoutType: UserAdminConfigLayoutTypeType\n systemResource: string\n },\n useApiFetch: () => UseApiFetchListReturnType<UserAdminConfig[]>\n ): Promise<number> {\n error.value = false\n const { pagination } = usePagination('position', SortOrder.Asc, {\n rowsPerPage: MAX_BOOKMARK_ITEMS + 1,\n })\n const { start: system, end: resource } = stringSplitOnFirstOccurrence(identifier.systemResource, '_')\n const { filterConfig, filterData } = useUserAdminConfigInnerFilter(system, resource)\n filterData.configType = UserAdminConfigType.FilterBookmark\n filterData.layoutType = identifier.layoutType\n filterData.systemResource = identifier.systemResource\n filterData.user = identifier.user\n\n let length = Infinity\n try {\n const { executeFetch } = useApiFetch()\n const res = await executeFetch(pagination, filterData, filterConfig)\n length = res.length\n } catch (e) {\n error.value = true\n }\n\n return length\n }\n\n function addOne(key: string, data: UserAdminConfig) {\n bookmarks.value.get(key)?.items.push(data)\n }\n\n return {\n bookmarks,\n error,\n getBookmarks,\n generateKey,\n addOne,\n fetchBookmarksCount,\n }\n})\n\nif (import.meta.hot) {\n import.meta.hot.accept(acceptHMRUpdate(useFilterBookmarkStore, import.meta.hot))\n}\n","import { AnzuApiResponseCodeError, isAnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isDefined, isNull, isUndefined } from '@/utils/common'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport axios, { type AxiosRequestConfig, type 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'\nimport {\n AnzuApiDependencyExistsError,\n axiosErrorResponseHasDependencyExistsData,\n} from '@/model/error/AnzuApiDependencyExistsError'\nimport { AnzuApiTimeoutError, axiosErrorIsTimeout } from '@/model/error/AnzuApiTimeoutError'\nimport { AnzuApiAxiosError } from '@/model/error/AnzuApiAxiosError'\nimport type { AxiosClientFn } from '@/labs/api/client'\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 useApiRequest = <R, T = R>(\n client: AxiosClientFn,\n method: Method,\n system: string,\n entity: string,\n urlTemplate: string | undefined = undefined,\n urlParams: UrlParams | undefined = undefined,\n options: AxiosRequestConfig = {}\n): UseApiAnyRequestReturnType<R, T> => {\n let abortController: AbortController | null = null\n\n const executeRequest = async (\n urlTemplateOverride: string | undefined = undefined,\n urlParamsOverride: UrlParams | undefined = undefined,\n object: T | undefined = undefined\n ): Promise<R> => {\n abortController = new AbortController()\n\n try {\n const axiosConfig: AxiosRequestConfig = { method: method }\n const params = isDefined(urlParamsOverride) ? urlParamsOverride : urlParams\n const template = isDefined(urlTemplateOverride) ? urlTemplateOverride : urlTemplate\n if (isUndefined(template)) throw new Error('Url template is undefined')\n axiosConfig.url = template\n if (template !== '' && !isUndefined(params)) {\n axiosConfig.url = replaceUrlParameters(template, params)\n }\n if (!isNull(object)) {\n axiosConfig.data = JSON.stringify(object)\n }\n const res = await client().request({\n ...options,\n ...axiosConfig,\n signal: abortController.signal,\n })\n\n if (!isValidHTTPStatus(res.status)) {\n throw new AnzuApiResponseCodeError(res.status)\n }\n\n if (res.data) {\n return res.data as R\n }\n\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return undefined as R\n }\n\n throw new AnzuFatalError()\n } catch (err: any) {\n if (err instanceof DOMException && err.name === 'AbortError') {\n return [] as R\n }\n\n if (isAnzuApiResponseCodeError(err)) {\n throw err\n }\n\n if (axiosErrorResponseIsForbidden(err)) {\n throw new AnzuApiForbiddenError(err, err.config?.url)\n }\n\n if (axiosErrorResponseHasValidationData(err)) {\n throw new AnzuApiValidationError(err, system, entity, err)\n }\n\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n throw new AnzuApiDependencyExistsError(err, system, entity, err)\n }\n\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n throw new AnzuApiForbiddenOperationError(err, err)\n }\n\n if (axiosErrorIsTimeout(err)) {\n throw new AnzuApiTimeoutError(err)\n }\n\n if (axios.isAxiosError(err)) {\n console.error('Axios error: ' + urlTemplate, err.cause)\n throw new AnzuApiAxiosError(err)\n }\n\n console.error('AnzuFatalError: ', err)\n throw new AnzuFatalError(err)\n } finally {\n abortController = null\n }\n }\n\n const abortRequest = () => {\n if (abortController) {\n abortController.abort()\n }\n }\n\n return {\n executeRequest,\n abortRequest,\n }\n}\n\nexport type UseApiAnyRequestReturnType<R, T = R> = {\n executeRequest: (\n urlTemplateOverride?: string,\n urlParamsOverride?: UrlParams | undefined,\n object?: T | undefined\n ) => Promise<R>\n abortRequest: () => void\n}\n","import type { AxiosInstance } from 'axios'\nimport { useApiFetchList } from '@/labs/api/useApiFetchList'\nimport type { IntegerId } from '@/types/common'\nimport type { UserAdminConfig } from '@/types/UserAdminConfig'\nimport { useApiRequest } from '@/labs/api/useApiRequest'\n\nexport const END_POINT = '/adm/v1/user-admin-config'\nconst ENTITY = 'userAdminConfig'\n\nexport function useUserAdminConfigApi(\n client: () => AxiosInstance,\n system: string,\n entity: string = ENTITY,\n endPoint: string = END_POINT\n) {\n const useFetchUserAdminConfigList = () => useApiFetchList<UserAdminConfig[]>(client, system, entity, END_POINT)\n\n const fetchUserAdminConfig = (id: IntegerId) => {\n const { executeRequest } = useApiRequest<UserAdminConfig>(client, 'GET', system, entity)\n return executeRequest(endPoint + '/:id', { id })\n }\n\n const createUserAdminConfig = (data: UserAdminConfig) => {\n const { executeRequest } = useApiRequest<UserAdminConfig>(client, 'POST', system, entity)\n return executeRequest(endPoint, undefined, data)\n }\n\n const updateUserAdminConfig = (id: IntegerId, data: UserAdminConfig) => {\n const { executeRequest } = useApiRequest<UserAdminConfig>(client, 'PUT', system, entity)\n return executeRequest(endPoint + '/:id', { id }, data)\n }\n\n const deleteUserAdminConfig = (id: IntegerId) => {\n const { executeRequest } = useApiRequest(client, 'DELETE', system, entity)\n return executeRequest(endPoint + '/:id', { id })\n }\n\n const updateUserAdminConfigPositions = (ids: IntegerId[]) => {\n const { executeRequest } = useApiRequest<{ userAdminConfigs: IntegerId[] }>(client, 'PATCH', system, entity)\n return executeRequest(endPoint + '/update-positions', undefined, { userAdminConfigs: ids })\n }\n\n return {\n useFetchUserAdminConfigList,\n fetchUserAdminConfig,\n createUserAdminConfig,\n updateUserAdminConfig,\n deleteUserAdminConfig,\n updateUserAdminConfigPositions,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, inject, nextTick, onMounted, ref, useTemplateRef, watch } from 'vue'\nimport { useFilterBookmarkStore } from '@/labs/filters/bookmarksStore'\nimport { useUserAdminConfigApi } from '@/labs/filters/userAdminConfig'\nimport type { AxiosInstance } from 'axios'\nimport {\n type UserAdminConfig,\n type UserAdminConfigDataFilterBookmark,\n UserAdminConfigLayoutType,\n} from '@/types/UserAdminConfig'\nimport type { IntegerId } from '@/types/common'\nimport { useResizeObserver, watchThrottled } from '@vueuse/core'\nimport { cloneDeep, isDefined, isNull, isString, isUndefined } from '@/utils/common'\nimport {\n DatatablePaginationKey,\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport { type FilterData, useFilterHelpers } from '@/labs/filters/filterFactory'\nimport { stringToBooleanExact, stringToNumber } from '@/utils/string'\n\nconst props = withDefaults(\n defineProps<{\n client: () => AxiosInstance\n userId: IntegerId\n system: string\n subject: string\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n}>()\n\nconst datatableHiddenColumns = defineModel<string[] | undefined>('datatableHiddenColumns', {\n default: undefined,\n required: true,\n})\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nconst pagination = inject(DatatablePaginationKey)\nconst filterSelected = inject(FilterSelectedKey)\n\nif (isUndefined(pagination) || isUndefined(filterConfig) || isUndefined(filterData) || isUndefined(filterSelected)) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst loading = ref(false)\nconst toolbarRef = useTemplateRef('toolbar')\nconst toolbarWidth = ref(300)\nconst visibleItemsCount = ref(1000)\n\nconst filterBookmarkStore = useFilterBookmarkStore()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { useFetchUserAdminConfigList } = useUserAdminConfigApi(props.client, props.system)\n\nconst systemResource = props.system + '_' + props.subject\n\nconst loadBookmarks = async (force = false) => {\n loading.value = true\n await filterBookmarkStore.getBookmarks(\n {\n user: props.userId,\n layoutType: UserAdminConfigLayoutType.Desktop,\n systemResource: systemResource,\n },\n useFetchUserAdminConfigList,\n force\n )\n loading.value = false\n}\n\nconst { deserializeFilters } = useFilterHelpers(filterData, filterConfig)\n\nconst onItemClick = (item: UserAdminConfig) => {\n const config = item.data as UserAdminConfigDataFilterBookmark\n if (isDefined(config.datatableHiddenColumns) && isDefined(datatableHiddenColumns.value)) {\n datatableHiddenColumns.value = config.datatableHiddenColumns\n }\n if (isDefined(config.sortBy)) {\n pagination.value = { ...pagination.value, sortBy: { key: config.sortBy!.key, order: config.sortBy!.order } }\n }\n const deserialized = deserializeFilters(config.filter)\n if (isNull(deserialized)) return\n for (const filterName in filterData) {\n const key = filterName as keyof FilterData\n let value = deserialized.filters[key]\n if (isUndefined(value) && filterConfig.fields[key]?.clearable) {\n filterData[key] = cloneDeep(filterConfig.fields[key].default)\n filterSelected.value.delete(key)\n continue\n }\n if (isString(value)) {\n const tryConvertNumber = stringToNumber(value)\n if (!isNull(tryConvertNumber)) {\n value = tryConvertNumber\n } else {\n // If not a number, try to convert to boolean\n const tryConvertBoolean = stringToBooleanExact(value)\n if (!isNull(tryConvertBoolean)) {\n value = tryConvertBoolean\n }\n }\n }\n filterData[key] = value\n }\n emit('submit')\n}\n\nconst THREE_DOTS_WIDTH = 32\n\nconst calculateVisible = async (totalWidth: number) => {\n const container = toolbarRef.value\n if (isNull(container)) return\n visibleItemsCount.value = 1000\n await nextTick()\n let cumulativeWidth = 0\n let visible = 0\n for (let i = 0; i < container.children.length; i++) {\n const child = container.children[i] as HTMLElement\n const childWidth = child.offsetWidth\n cumulativeWidth += childWidth\n if (cumulativeWidth >= totalWidth - THREE_DOTS_WIDTH) {\n break\n }\n visible++\n }\n visibleItemsCount.value = visible\n}\n\nuseResizeObserver(toolbarRef, (entries) => {\n if (entries[0]) {\n toolbarWidth.value = entries[0].contentRect.width\n }\n})\n\nwatchThrottled(\n toolbarWidth,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n calculateVisible(newValue)\n },\n { throttle: 1000 }\n)\n\nconst items = computed(() => {\n const key = filterBookmarkStore.generateKey(UserAdminConfigLayoutType.Desktop, systemResource)\n const result = filterBookmarkStore.bookmarks.get(key)\n return result?.items ?? []\n})\n\nconst itemsComputed = computed(() => {\n const visible = visibleItemsCount.value\n return {\n visible: items.value.slice(0, visible),\n hidden: items.value.slice(visible),\n }\n})\n\nwatch([loading, () => items.value.length], ([newLoading]) => {\n if (newLoading === true || isNull(toolbarRef.value)) return\n toolbarWidth.value = toolbarRef.value.clientWidth\n nextTick(() => {\n calculateVisible(toolbarWidth.value)\n })\n})\n\nonMounted(() => {\n loadBookmarks()\n})\n</script>\n\n<template>\n <div\n ref=\"toolbar\"\n :key=\"items.length\"\n class=\"w-100 d-flex overflow-hidden align-center mb-1\"\n >\n <div v-if=\"loading\" />\n <template v-else>\n <div\n v-for=\"item in itemsComputed.visible\"\n :key=\"item.id\"\n class=\"white-space-nowrap\"\n >\n <VBtn\n text\n prepend-icon=\"mdi-bookmark-outline\"\n size=\"small\"\n class=\"mr-1 mb-1 bg-grey-lighten-4 text-grey-darken-3\"\n @click=\"onItemClick(item)\"\n >\n {{ item.customName }}\n </VBtn>\n </div>\n <VMenu\n v-if=\"itemsComputed.hidden.length > 0\"\n bottom\n offset-y\n >\n <template #activator=\"{ props: activatorProps }\">\n <VBtn\n icon=\"mdi-menu-down\"\n size=\"x-small\"\n :width=\"28\"\n :height=\"28\"\n v-bind=\"activatorProps\"\n />\n </template>\n <VList density=\"compact\">\n <VListItem\n v-for=\"item in itemsComputed.hidden\"\n :key=\"item.id\"\n @click=\"onItemClick(item)\"\n >\n <VListItemTitle>{{ item.customName }}</VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </template>\n </div>\n</template>\n","/**!\n * Sortable 1.15.6\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.6\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n // Disabled on Safari: #1571; Enabled on Safari IOS: #2244\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && (!Safari || IOS),\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._onDrop);\n // Native D&D triggers pointercancel\n !this.nativeDraggable && on(ownerDocument, 'pointercancel', _this._onDrop);\n } else {\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n }\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._disableDelayedDrag);\n on(ownerDocument, 'pointercancel', _this._disableDelayedDrag);\n } else {\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n }\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'pointerup', this._disableDelayedDrag);\n off(ownerDocument, 'pointercancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = getParentOrHost(parent));\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n window.getSelection().removeAllRanges();\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'pointercancel', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n (function () {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n var filter = options.filter;\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n // Check if element is draggable\n if (!closest(children[i], options.draggable, parentEl, false)) continue;\n // Check if element is filtered\n var filtered = filter && (typeof filter === 'function' ? filter.call(sortable, evt, children[i], sortable) : filter.split(',').some(function (criteria) {\n return closest(children[i], criteria.trim(), parentEl, false);\n }));\n if (filtered) 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 }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","import { isRef, nextTick, toValue } from \"vue\";\nimport { defaultDocument, tryOnMounted, tryOnScopeDispose, unrefElement } from \"@vueuse/core\";\nimport Sortable from \"sortablejs\";\n\n//#region useSortable/index.ts\n/**\n* Wrapper for sortablejs.\n* @param el\n* @param list\n* @param options\n*/\nfunction useSortable(el, list, options = {}) {\n\tlet sortable;\n\tconst { document = defaultDocument,...resetOptions } = options;\n\tconst defaultOptions = { onUpdate: (e) => {\n\t\tmoveArrayElement(list, e.oldIndex, e.newIndex, e);\n\t} };\n\tconst start = () => {\n\t\tconst target = typeof el === \"string\" ? document === null || document === void 0 ? void 0 : document.querySelector(el) : unrefElement(el);\n\t\tif (!target || sortable !== void 0) return;\n\t\tsortable = new Sortable(target, {\n\t\t\t...defaultOptions,\n\t\t\t...resetOptions\n\t\t});\n\t};\n\tconst stop = () => {\n\t\tsortable === null || sortable === void 0 || sortable.destroy();\n\t\tsortable = void 0;\n\t};\n\tconst option = (name, value) => {\n\t\tif (value !== void 0) sortable === null || sortable === void 0 || sortable.option(name, value);\n\t\telse return sortable === null || sortable === void 0 ? void 0 : sortable.option(name);\n\t};\n\ttryOnMounted(start);\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tstop,\n\t\tstart,\n\t\toption\n\t};\n}\n/**\n* Inserts a element into the DOM at a given index.\n* @param parentElement\n* @param element\n* @param {number} index\n* @see https://github.com/Alfred-Skyblue/vue-draggable-plus/blob/a3829222095e1949bf2c9a20979d7b5930e66f14/src/utils/index.ts#L81C1-L94C2\n*/\nfunction insertNodeAt(parentElement, element, index) {\n\tconst refElement = parentElement.children[index];\n\tparentElement.insertBefore(element, refElement);\n}\n/**\n* Removes a node from the DOM.\n* @param {Node} node\n* @see https://github.com/Alfred-Skyblue/vue-draggable-plus/blob/a3829222095e1949bf2c9a20979d7b5930e66f14/src/utils/index.ts#L96C1-L102C2\n*/\nfunction removeNode(node) {\n\tif (node.parentNode) node.parentNode.removeChild(node);\n}\nfunction moveArrayElement(list, from, to, e = null) {\n\tif (e != null) {\n\t\tremoveNode(e.item);\n\t\tinsertNodeAt(e.from, e.item, from);\n\t}\n\tconst _valueIsRef = isRef(list);\n\tconst array = _valueIsRef ? [...toValue(list)] : toValue(list);\n\tif (to >= 0 && to < array.length) {\n\t\tconst element = array.splice(from, 1)[0];\n\t\tnextTick(() => {\n\t\t\tarray.splice(to, 0, element);\n\t\t\tif (_valueIsRef) list.value = array;\n\t\t});\n\t}\n}\n\n//#endregion\nexport { useSortable as i, moveArrayElement as n, removeNode as r, insertNodeAt as t };","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nconst _state = {};\nfunction v1(options, buf, offset) {\n let bytes;\n const isV6 = options?._v6 ?? false;\n if (options) {\n const optionsKeys = Object.keys(options);\n if (optionsKeys.length === 1 && optionsKeys[0] === '_v6') {\n options = undefined;\n }\n }\n if (options) {\n bytes = v1Bytes(options.random ?? options.rng?.() ?? rng(), options.msecs, options.nsecs, options.clockseq, options.node, buf, offset);\n }\n else {\n const now = Date.now();\n const rnds = rng();\n updateV1State(_state, now, rnds);\n bytes = v1Bytes(rnds, _state.msecs, _state.nsecs, isV6 ? undefined : _state.clockseq, isV6 ? undefined : _state.node, buf, offset);\n }\n return buf ?? unsafeStringify(bytes);\n}\nexport function updateV1State(state, now, rnds) {\n state.msecs ??= -Infinity;\n state.nsecs ??= 0;\n if (now === state.msecs) {\n state.nsecs++;\n if (state.nsecs >= 10000) {\n state.node = undefined;\n state.nsecs = 0;\n }\n }\n else if (now > state.msecs) {\n state.nsecs = 0;\n }\n else if (now < state.msecs) {\n state.node = undefined;\n }\n if (!state.node) {\n state.node = rnds.slice(10, 16);\n state.node[0] |= 0x01;\n state.clockseq = ((rnds[8] << 8) | rnds[9]) & 0x3fff;\n }\n state.msecs = now;\n return state;\n}\nfunction v1Bytes(rnds, msecs, nsecs, clockseq, node, buf, offset = 0) {\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n if (!buf) {\n buf = new Uint8Array(16);\n offset = 0;\n }\n else {\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n }\n msecs ??= Date.now();\n nsecs ??= 0;\n clockseq ??= ((rnds[8] << 8) | rnds[9]) & 0x3fff;\n node ??= rnds.slice(10, 16);\n msecs += 12219292800000;\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n buf[offset++] = (tl >>> 24) & 0xff;\n buf[offset++] = (tl >>> 16) & 0xff;\n buf[offset++] = (tl >>> 8) & 0xff;\n buf[offset++] = tl & 0xff;\n const tmh = ((msecs / 0x100000000) * 10000) & 0xfffffff;\n buf[offset++] = (tmh >>> 8) & 0xff;\n buf[offset++] = tmh & 0xff;\n buf[offset++] = ((tmh >>> 24) & 0xf) | 0x10;\n buf[offset++] = (tmh >>> 16) & 0xff;\n buf[offset++] = (clockseq >>> 8) | 0x80;\n buf[offset++] = clockseq & 0xff;\n for (let n = 0; n < 6; ++n) {\n buf[offset++] = node[n];\n }\n return buf;\n}\nexport default v1;\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n","// @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: 'onStart'): 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 positionMultiplier: number\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 = props.positionMultiplier * start + props.positionMultiplier * 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 = position + props.positionMultiplier * 1\n updatedPositions.push({\n id: items[i].id,\n position: items[i].position,\n })\n }\n return updatedPositions\n }\n\n const moveArrayElement = (from: number, to: number): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n if (to >= 0 && to < clonedData.length) {\n let returnData: SortableItemNewPositions = []\n const element = clonedData.splice(from, 1)[0]\n clonedData.splice(to, 0, element)\n if (!isUndefined(props.updatePosition)) {\n returnData = updatePositions(clonedData, from, to)\n }\n forceRerenderWidgetHtml()\n emit('update:modelValue', clonedData)\n return returnData\n }\n return []\n }\n\n const findItemIndexById = (id: DocId | IntegerId, items: SortablePropItem[]) => {\n const idx = items.findIndex((item) => item[props.keyField] === id)\n if (idx === -1) return null\n return idx\n }\n\n const updateDataCommon = (\n item: SortablePropItem,\n data: SortablePropItem,\n position: number | null,\n dirty: null | boolean = null\n ) => {\n item.data = cloneDeep(data)\n if (!isNull(position)) item.data.position = position\n if (!isNull(dirty)) touchDirty(data.id)\n }\n\n /**\n * @param id - id of item\n * @param data - item data\n * @param position - item position, use null to skip update and keep original data\n * @param dirty - item dirty, use null to skip update and keep original data\n */\n const updateData = (\n id: DocId | IntegerId,\n data: SortablePropItem,\n position: number | null = null,\n dirty: null | boolean = null\n ) => {\n const clonedData = cloneDeep(model.value)\n const foundIndex = findItemIndexById(id, clonedData)\n if (!isNull(foundIndex) && clonedData[foundIndex]) {\n updateDataCommon(clonedData[foundIndex], data, position, dirty)\n forceRerenderWidgetHtml(clonedData)\n }\n }\n\n const updateDataAtIndex = (\n index: number,\n data: SortablePropItem,\n position: number | null,\n dirty: null | boolean = null\n ) => {\n const clonedData = cloneDeep(model.value)\n if (clonedData[index]) {\n updateDataCommon(clonedData[index], data, position, dirty)\n forceRerenderWidgetHtml(clonedData)\n }\n }\n\n /**\n * @template targetIndex null value is when push as last item\n */\n const addAfterIndex = (targetIndex: number | null, data: SortablePropItem): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n\n if (isNull(targetIndex) || targetIndex < 0) {\n clonedData.push(cloneDeep(data))\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n\n const returnData: SortableItemNewPositions = []\n\n if (clonedData[targetIndex]) {\n clonedData.splice(targetIndex + 1, 0, data)\n updatePositions(clonedData, targetIndex + 1, targetIndex + 1, returnData)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n return []\n }\n\n /**\n * @template targetId null value is when push as last item\n */\n const addAfterId = (targetId: DocId | IntegerId | null, data: SortablePropItem): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n\n if (isNull(targetId)) {\n clonedData.push(cloneDeep(data))\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n\n const foundIndex = findItemIndexById(targetId, clonedData)\n const returnData: SortableItemNewPositions = []\n\n if (!isNull(foundIndex) && clonedData[foundIndex]) {\n clonedData.splice(foundIndex + 1, 0, data)\n updatePositions(clonedData, foundIndex + 1, foundIndex + 1, returnData)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n return []\n }\n\n const removeById = (id: DocId | IntegerId): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n const foundIndex = findItemIndexById(id, clonedData)\n\n const returnData: SortableItemNewPositions = []\n\n if (!isNull(foundIndex) && clonedData[foundIndex]) {\n clonedData.splice(foundIndex, 1)\n updatePositions(clonedData, foundIndex, foundIndex, returnData)\n untouchDirty(id)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n return []\n }\n\n const removeByIndex = (index: number): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n\n const returnData: SortableItemNewPositions = []\n\n if (clonedData[index]) {\n const id = clonedData[index][props.keyField]\n clonedData.splice(index, 1)\n updatePositions(clonedData, index, index, returnData)\n untouchDirty(id)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n return []\n }\n\n const destroy = () => {\n if (!widgetEl.value) return\n if (!sortableInstance.value) return\n sortableInstance.value.stop()\n sortableInstance.value = null\n }\n\n const refresh = () => {\n destroy()\n initSortableCallback()\n }\n\n const onRemoveDialogConfirm = () => {\n if (isNull(itemToRemove.value)) return\n emit('onDelete', itemToRemove.value)\n removeDialog.value = false\n }\n\n return {\n items,\n forceRerender,\n dirtyLocal,\n widgetEl,\n randomUuid,\n removeDialog,\n itemToRemove,\n sortableInstance,\n refresh,\n onRemoveDialogConfirm,\n destroy,\n moveArrayElement,\n addAfterId,\n addAfterIndex,\n removeById,\n removeByIndex,\n updateData,\n updateDataAtIndex,\n }\n}\n","import type { DocId, IntegerId } from '@/types/common'\n\nexport const WIDGET_HTML_ID_PREFIX = 'a-sortable-'\n\nexport interface SortableItemDataAware {\n id?: DocId | IntegerId\n position: number\n}\n\nexport interface SortableItemWithParentDataAware {\n id: DocId | IntegerId\n position: number\n parent: DocId | IntegerId | null // if null, no parent\n}\n\nexport interface SortableItemNewPosition {\n id?: DocId | IntegerId\n position: number\n}\n\nexport type SortableItemNewPositions = Array<SortableItemNewPosition>\n","<script setup lang=\"ts\">\nimport { useSortable } from '@vueuse/integrations/useSortable'\nimport type { SortableEvent } from 'sortablejs'\nimport { computed, nextTick, onBeforeUnmount, toRef, watch, withModifiers } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { SortableEmit, SortableItem, SortablePropItem } from '@/components/sortable/sortableActions'\nimport {\n CHOSEN_CLASS,\n DRAG_CLASS,\n GHOST_CLASS,\n GROUP_CLASS,\n HANDLE_CLASS,\n useSortableActions,\n} from '@/components/sortable/sortableActions'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { cloneDeep, isUndefined } from '@/utils/common'\nimport { WIDGET_HTML_ID_PREFIX } from '@/components/sortable/sortableUtils'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: SortablePropItem[] | any\n dirty?: Set<DocId | IntegerId>\n keyField?: string\n disableDraggable?: boolean\n rootClassName?: string\n widgetIdentifierId?: string | undefined\n disableDefaultSort?: boolean\n updatePosition?: boolean\n positionField?: string\n positionMultiplier?: number\n showAddAfterButton?: boolean\n showAddLastButton?: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n addLastButtonT?: string\n chips?: boolean\n chipSize?: string\n disableDeleteDialog?: boolean\n permanentButtons?: boolean\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 positionMultiplier: 1,\n showAddAfterButton: false,\n showAddLastButton: false,\n showDeleteButton: false,\n showEditButton: false,\n addLastButtonT: 'common.sortable.addNewAtEnd',\n chips: false,\n chipSize: 'small',\n disableDeleteDialog: false,\n permanentButtons: false,\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 if (props.disableDeleteDialog) {\n onRemoveDialogConfirm()\n return\n }\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 rootClassNameComputed = computed(() => {\n return props.rootClassName + ' ' + (props.chips ? props.rootClassName + '--chips' : '')\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 onStart() {\n emit('onStart')\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=\"rootClassNameComputed\"\n >\n <div\n :key=\"forceRerender\"\n :class=\"GROUP_CLASS\"\n >\n <template\n v-for=\"(item, index) of items\"\n :key=\"item.key\"\n >\n <VChip\n v-if=\"chips\"\n :size=\"chipSize\"\n class=\"mr-1\"\n :prepend-icon=\"disableDraggable ? undefined : 'mdi-drag'\"\n :append-icon=\"showDeleteButton ? 'mdi-drag' : undefined\"\n @click:close=\"onDeleteClick(item)\"\n >\n <template\n v-if=\"!disableDraggable\"\n #prepend\n >\n <VIcon\n :class=\"{\n [HANDLE_CLASS]: true,\n [HANDLE_CLASS + '--disabled']: disableDraggable,\n }\"\n icon=\"mdi-drag\"\n />\n </template>\n <template\n v-if=\"showDeleteButton\"\n #append\n >\n <VIcon\n class=\"ml-2\"\n icon=\"mdi-close-circle\"\n size=\"large\"\n @click.stop=\"onDeleteClick(item)\"\n />\n </template>\n <slot\n name=\"item\"\n :item=\"item\"\n />\n </VChip>\n <div v-else>\n <div class=\"a-sortable-widget__before\">\n <slot\n name=\"itemBefore\"\n :item=\"item\"\n />\n </div>\n <div\n class=\"a-sortable-widget__item\"\n :class=\"{\n 'a-sortable-widget__item--last': index + 1 === items.length,\n 'a-sortable-widget__item--first': index === 0,\n }\"\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\n class=\"a-sortable-widget__buttons\"\n :class=\"{'a-sortable-widget__buttons--permanent': permanentButtons}\"\n >\n <slot\n name=\"item-buttons\"\n :item=\"item\"\n >\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=\"t('common.button.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=\"t('common.button.delete')\"\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 </slot>\n </div>\n </div>\n <div class=\"a-sortable-widget__after\">\n <slot\n name=\"itemAfter\"\n :item=\"item\"\n />\n </div>\n </div>\n </template>\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 {\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n }\n\n &--last {\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 &__before {\n width: 100%;\n }\n\n &__after {\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 &--permanent {\n opacity: 1;\n }\n }\n}\n</style>\n","import type { UserAdminConfig } from '@/types/UserAdminConfig'\nimport { UserAdminConfigLayoutTypeDefault, UserAdminConfigTypeDefault } from '@/types/UserAdminConfig'\nimport { dateTimeNow } from '@/utils/datetime'\n\nexport function useUserAdminConfigFactory() {\n const createDefaultUserAdminConfig = (system: string): UserAdminConfig => {\n return {\n id: 0,\n user: 0,\n configType: UserAdminConfigTypeDefault,\n layoutType: UserAdminConfigLayoutTypeDefault,\n systemResource: '',\n customName: '',\n defaultConfig: false,\n data: [],\n position: 0,\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: null,\n modifiedBy: null,\n _resourceName: 'userAdminConfig',\n _system: system,\n }\n }\n\n return {\n createDefaultUserAdminConfig,\n }\n}\n","<script lang=\"ts\" setup>\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport { inject, nextTick, ref, useTemplateRef, watch } from 'vue'\nimport AFormTextField from '@/components/form/AFormTextField.vue'\nimport ARow from '@/components/ARow.vue'\nimport AFormSwitch from '@/components/form/AFormSwitch.vue'\nimport type { SortableItem } from '@/components/sortable/sortableActions'\nimport ASortable from '@/components/sortable/ASortable.vue'\nimport type { AxiosInstance } from 'axios'\nimport type { IntegerId } from '@/types/common'\nimport { MAX_BOOKMARK_ITEMS, useFilterBookmarkStore } from '@/labs/filters/bookmarksStore'\nimport { useUserAdminConfigApi } from '@/labs/filters/userAdminConfig'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useUserAdminConfigFactory } from '@/model/factory/UserAdminConfigFactory'\nimport { type UserAdminConfig, UserAdminConfigLayoutType, UserAdminConfigType } from '@/types/UserAdminConfig'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport { DatatablePaginationKey, FilterConfigKey, FilterDataKey } from '@/labs/filters/filterInjectionKeys'\nimport { useFilterHelpers } from '@/labs/filters/filterFactory'\nimport { hasAnzuApiValidationErrorSpecific, isAnzuApiValidationError } from '@/model/error/AnzuApiValidationError'\n\nconst props = withDefaults(\n defineProps<{\n client: () => AxiosInstance\n system: string\n subject: string\n user: IntegerId\n datatableHiddenColumns?: string[] | undefined\n }>(),\n {\n datatableHiddenColumns: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'onClose'): void\n}>()\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nconst pagination = inject(DatatablePaginationKey)\n\nif (isUndefined(pagination) || isUndefined(filterConfig) || isUndefined(filterData)) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst activeTab = ref<'add' | 'manage'>('add')\nconst customName = ref('')\nconst storeDatatableHiddenColumns = ref(false)\nconst storeDatatableOrder = ref(false)\nconst saveButtonLoading = ref(false)\nconst listLoading = ref(false)\nconst errorCount = ref(false)\nconst itemsManage = ref<Array<UserAdminConfig>>([])\nconst itemEdit = ref<{ id: IntegerId; customName: string } | null>(null)\n\nconst { required, maxLength } = useValidate()\nconst rulesCreate = {\n customName: {\n required,\n maxLength: maxLength(100),\n },\n}\nconst vCreate$ = useVuelidate(rulesCreate, { customName }, { $stopPropagation: true })\nconst rulesEdit = {\n itemEdit: {\n required,\n maxLength: maxLength(100),\n },\n}\nconst vEdit$ = useVuelidate(rulesEdit, { itemEdit }, { $stopPropagation: true })\n\nconst filterBookmarkStore = useFilterBookmarkStore()\n\nconst {\n createUserAdminConfig,\n useFetchUserAdminConfigList,\n updateUserAdminConfigPositions,\n deleteUserAdminConfig,\n updateUserAdminConfig,\n} =\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n useUserAdminConfigApi(props.client, props.system)\nconst { t } = useI18n()\nconst { showErrorsDefault, showValidationError, showWarningT } = useAlerts()\nconst { createDefaultUserAdminConfig } = useUserAdminConfigFactory()\n\nconst sortItems = async () => {\n saveButtonLoading.value = true\n const items = itemsManage.value\n const ids = items.map((item) => item.id)\n try {\n await updateUserAdminConfigPositions(ids)\n saveButtonLoading.value = false\n await reloadItems()\n emit('onClose')\n } catch (e) {\n showErrorsDefault(e)\n saveButtonLoading.value = false\n }\n}\n\nconst { serializeFilters } = useFilterHelpers(filterData, filterConfig)\n\nconst systemResource = props.system + '_' + props.subject\n\nconst addBookmark = async () => {\n saveButtonLoading.value = true\n errorCount.value = false\n const config = createDefaultUserAdminConfig(props.system)\n config.user = props.user\n config.configType = UserAdminConfigType.FilterBookmark\n config.layoutType = UserAdminConfigLayoutType.Desktop\n config.systemResource = systemResource\n config.customName = customName.value\n config.data = {\n filter: serializeFilters(filterData, pagination, false),\n datatableHiddenColumns:\n storeDatatableHiddenColumns.value && props.datatableHiddenColumns ? props.datatableHiddenColumns : undefined,\n sortBy: storeDatatableOrder.value && pagination.value.sortBy ? pagination.value.sortBy : undefined,\n }\n try {\n const count = await filterBookmarkStore.fetchBookmarksCount(\n {\n user: props.user,\n layoutType: UserAdminConfigLayoutType.Desktop,\n systemResource: systemResource,\n },\n useFetchUserAdminConfigList\n )\n if (count >= MAX_BOOKMARK_ITEMS) {\n errorCount.value = true\n saveButtonLoading.value = false\n return\n }\n config.position = count + 1\n const res = await createUserAdminConfig(config)\n filterBookmarkStore.addOne(\n filterBookmarkStore.generateKey(UserAdminConfigLayoutType.Desktop, systemResource),\n res\n )\n emit('onClose')\n } catch (e) {\n if (\n isAnzuApiValidationError(e) &&\n hasAnzuApiValidationErrorSpecific(e, 'error_field_not_unique', 'cms.userAdminConfig.model.systemResource')\n ) {\n showWarningT('common.filter.bookmark.nameUniqueError')\n return\n }\n showErrorsDefault(e)\n } finally {\n saveButtonLoading.value = false\n }\n}\n\nconst onConfirm = () => {\n if (activeTab.value === 'add') {\n vCreate$.value.$touch()\n if (vCreate$.value.$invalid) {\n showValidationError()\n return\n }\n addBookmark()\n } else if (activeTab.value === 'manage' && itemsManage.value.length > 0) {\n sortItems()\n }\n}\n\nconst onDelete = async (data: SortableItem<UserAdminConfig>) => {\n listLoading.value = true\n try {\n await deleteUserAdminConfig(data.raw.id)\n await reloadItems()\n onItemCancel()\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n listLoading.value = false\n }\n}\n\nconst inputRef = useTemplateRef('inputRef')\n\nconst onEdit = async (data: SortableItem<UserAdminConfig>) => {\n itemEdit.value = { id: data.raw.id, customName: data.raw.customName }\n await nextTick()\n inputRef.value?.focus()\n}\n\nconst onItemConfirm = async (data: SortableItem<UserAdminConfig>) => {\n if (isNull(itemEdit.value)) return\n listLoading.value = true\n const modified = cloneDeep(data.raw)\n modified.customName = itemEdit.value.customName\n try {\n onItemCancel()\n await updateUserAdminConfig(modified.id, modified)\n await reloadItems()\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n listLoading.value = false\n }\n}\n\nconst onItemCancel = () => {\n itemEdit.value = null\n}\n\nconst reloadItems = async () => {\n listLoading.value = true\n try {\n itemsManage.value = await filterBookmarkStore.getBookmarks(\n {\n user: props.user,\n layoutType: UserAdminConfigLayoutType.Desktop,\n systemResource: systemResource,\n },\n useFetchUserAdminConfigList,\n true\n )\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n listLoading.value = false\n }\n}\n\nwatch(activeTab, () => {\n errorCount.value = false\n if (activeTab.value === 'manage') {\n reloadItems()\n }\n})\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n :width=\"500\"\n >\n <VCard>\n <ADialogToolbar @on-cancel=\"emit('onClose')\">\n {{ t('common.filter.bookmark.title') }}\n </ADialogToolbar>\n <VCardText class=\"pt-0\">\n <VTabs\n v-model=\"activeTab\"\n fixed-tabs\n >\n <VTab value=\"add\">\n {{ t('common.filter.bookmark.add') }}\n </VTab>\n <VTab value=\"manage\">\n {{ t('common.filter.bookmark.manage') }}\n </VTab>\n </VTabs>\n <div\n v-if=\"activeTab === 'add'\"\n class=\"w-100 pt-4\"\n >\n <ARow :title=\"t('common.filter.bookmark.infoSave')\" />\n <ARow\n v-if=\"errorCount\"\n class=\"text-error\"\n :title=\"t('common.filter.bookmark.errorMax')\"\n />\n <ARow>\n <AFormTextField\n v-model=\"customName\"\n :label=\"t('common.filter.bookmark.name')\"\n required\n :v=\"vCreate$.customName\"\n />\n </ARow>\n <ARow>\n <AFormSwitch\n v-model=\"storeDatatableHiddenColumns\"\n :label=\"t('common.filter.bookmark.storeTableColumns')\"\n />\n </ARow>\n <ARow>\n <AFormSwitch\n v-model=\"storeDatatableOrder\"\n :label=\"t('common.filter.bookmark.storeTableOrder')\"\n />\n </ARow>\n </div>\n <div\n v-else-if=\"activeTab === 'manage'\"\n class=\"w-100 pt-4\"\n >\n <div\n v-if=\"listLoading\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n <ASortable\n v-else\n v-model=\"itemsManage\"\n show-edit-button\n show-delete-button\n permanent-buttons\n @on-delete=\"onDelete\"\n @on-edit=\"onEdit\"\n >\n <template #item=\"{ item }: { item: SortableItem<UserAdminConfig> }\">\n <AFormTextField\n v-if=\"itemEdit && itemEdit.id === item.raw.id\"\n ref=\"inputRef\"\n v-model=\"itemEdit.customName\"\n hide-details=\"auto\"\n :v=\"vEdit$\"\n />\n <div v-else>\n {{ item.raw.customName }}\n </div>\n </template>\n <template\n v-if=\"!isNull(itemEdit)\"\n #item-buttons=\"{ item }: { item: SortableItem<UserAdminConfig> }\"\n >\n <div\n v-if=\"itemEdit && itemEdit.id === item.raw.id\"\n class=\"d-flex align-center justify-end\"\n >\n <VBtn\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onItemConfirm(item)\"\n >\n <VIcon icon=\"mdi-check\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.button.confirm')\"\n />\n </VBtn>\n <VBtn\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onItemCancel()\"\n >\n <VIcon icon=\"mdi-close\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.button.cancel')\"\n />\n </VBtn>\n </div>\n </template>\n </ASortable>\n </div>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"emit('onClose')\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n data-cy=\"button-confirm\"\n :loading=\"saveButtonLoading\"\n @click.stop=\"onConfirm\"\n >\n {{ activeTab === 'add' ? t('common.button.add') : t('common.filter.bookmark.saveBookmarkOrder') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport FilterBookmarkDialog from '@/labs/filters/FilterBookmarkDialog.vue'\nimport type { AxiosInstance } from 'axios'\nimport type { IntegerId } from '@/types/common'\nimport type { DatatableSortBy } from '@/composables/system/datatableColumns'\n\nwithDefaults(\n defineProps<{\n client: () => AxiosInstance\n system: string\n subject: string\n user: IntegerId\n tooltipT?: string\n buttonClass?: string\n dataCy?: string\n datatableHiddenColumns?: string[] | undefined\n datatableSortBy?: DatatableSortBy\n }>(),\n {\n tooltipT: 'common.button.bookmarkFilter',\n buttonClass: 'ml-2',\n dataCy: 'filter-bookmark',\n datatableHiddenColumns: undefined,\n datatableSortBy: undefined,\n }\n)\n\nconst dialog = defineModel<boolean>('dialog', { default: false, required: false })\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n dialog.value = true\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-bookmark-outline\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(tooltipT) }}\n </VTooltip>\n </VBtn>\n <FilterBookmarkDialog\n v-if=\"dialog\"\n :client=\"client\"\n :system=\"system\"\n :user=\"user\"\n :subject=\"subject\"\n :datatable-hidden-columns=\"datatableHiddenColumns\"\n @on-close=\"dialog = false\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport AFilterSubmitButton from '@/components/buttons/filter/AFilterSubmitButton.vue'\nimport AFilterResetButton from '@/components/buttons/filter/AFilterResetButton.vue'\nimport { computed, inject, nextTick, provide, ref } from 'vue'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { isBoolean, isDefined, isUndefined } from '@/utils/common'\nimport { type FilterStoreIdentifier, useFilterClearHelpers } from '@/labs/filters/filterFactory'\nimport { datatableSlotName } from '@/components/datatable/datatable'\nimport FilterDetailItem from '@/labs/filters/FilterDetailItem.vue'\nimport FilterBookmarks from '@/labs/filters/FilterBookmarks.vue'\nimport type { IntegerIdNullable } from '@/types/common'\nimport type { AxiosInstance } from 'axios'\nimport AFilterBookmarkButton from '@/components/buttons/filter/AFilterBookmarkButton.vue'\n\nconst props = withDefaults(\n defineProps<{\n hideButtons?: boolean\n formName?: string\n disableFilterUrlSync?: boolean\n userId?: IntegerIdNullable | undefined\n client?: (() => AxiosInstance) | undefined\n store?: FilterStoreIdentifier | boolean // false to disable, FilterStoreIdentifier to custom store key\n }>(),\n {\n hideButtons: false,\n formName: 'search',\n disableFilterUrlSync: false,\n userId: undefined,\n client: undefined,\n store: true,\n }\n)\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'reset'): void\n (e: 'bookmarkLoadAfter'): void\n}>()\n\nconst datatableHiddenColumns = defineModel<string[] | undefined>('datatableHiddenColumns', {\n default: undefined,\n required: false,\n})\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nif (isUndefined(filterConfig) || isUndefined(filterData)) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst identifier = ref<Partial<FilterStoreIdentifier>>({\n system: filterConfig.general.system,\n subject: filterConfig.general.subject,\n})\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (!isBoolean(props.store)) {\n identifier.value.system = props.store.system\n identifier.value.subject = props.store.subject\n} else if (false === props.store) {\n identifier.value.system = undefined\n identifier.value.subject = undefined\n}\n\nconst submitResetCounter = ref(0)\nprovide(FilterSubmitResetCounterKey, submitResetCounter)\nconst filterSelected = ref<Map<string, ValueObjectOption<string | number>[]>>(new Map())\nprovide(FilterSelectedKey, filterSelected)\n\nconst submitFilter = () => {\n submitResetCounter.value++\n nextTick(() => {\n emit('submit')\n })\n}\n\nconst { clearAll, clearAllFilterSelected } = useFilterClearHelpers()\n\nconst submitFilterBookmark = () => {\n nextTick(() => {\n submitResetCounter.value++\n emit('bookmarkLoadAfter')\n })\n}\n\nconst resetFilter = () => {\n clearAll(filterData, filterConfig)\n clearAllFilterSelected(filterData, filterConfig, filterSelected)\n nextTick(() => {\n submitResetCounter.value++\n emit('reset')\n })\n}\n\nconst touched = computed(() => {\n return filterConfig.touched\n})\n\nconst renderedFieldNames = computed(() => {\n return Object.entries(filterConfig.fields)\n .filter(([, field]) => !field.render.skip)\n .map(([fieldName]) => fieldName)\n})\n\ndefineExpose({\n submit: submitFilter,\n reset: resetFilter,\n})\n</script>\n\n<template>\n <VForm\n :name=\"formName\"\n @submit.prevent=\"submitFilter\"\n >\n <div class=\"subject-select-filter__content px-2 py-4\">\n <slot name=\"bookmarks\">\n <VRow dense>\n <VCol v-if=\"store && userId && isDefined(client)\">\n <div class=\"d-flex flex-wrap align-center\">\n <FilterBookmarks\n v-if=\"identifier.system && identifier.subject && userId && isDefined(client)\"\n v-model:datatable-hidden-columns=\"datatableHiddenColumns\"\n :client=\"client\"\n :system=\"identifier.system\"\n :subject=\"identifier.subject\"\n :user-id=\"userId\"\n @submit=\"submitFilterBookmark\"\n />\n </div>\n </VCol>\n </VRow>\n </slot>\n <slot name=\"detail\">\n <VRow>\n <VCol\n v-for=\"fieldName in renderedFieldNames\"\n :key=\"fieldName\"\n :cols=\"filterConfig.fields[fieldName].render.xs || 12\"\n :sm=\"filterConfig.fields[fieldName].render.sm || 12\"\n :md=\"filterConfig.fields[fieldName].render.md || 12\"\n :lg=\"filterConfig.fields[fieldName].render.lg || 12\"\n :xl=\"filterConfig.fields[fieldName].render.xl || 12\"\n >\n <slot\n :name=\"datatableSlotName(fieldName)\"\n :item-config=\"filterConfig.fields[fieldName]\"\n >\n <FilterDetailItem :name=\"fieldName\" />\n </slot>\n </VCol>\n </VRow>\n </slot>\n </div>\n <div\n v-if=\"!hideButtons\"\n class=\"subject-select-filter__actions\"\n >\n <slot name=\"buttons\">\n <AFilterSubmitButton :touched=\"touched\" />\n <AFilterResetButton @reset=\"resetFilter\" />\n <AFilterBookmarkButton\n v-if=\"identifier.system && identifier.subject && userId && isDefined(client)\"\n :client=\"client\"\n :user=\"userId\"\n :system=\"identifier.system\"\n :subject=\"identifier.subject\"\n :datatable-hidden-columns=\"datatableHiddenColumns\"\n />\n </slot>\n </div>\n </VForm>\n</template>\n\n<style lang=\"scss\">\n@use 'vuetify/tools' as *;\n\n.a-filter {\n &__container {\n width: 100%;\n }\n}\n</style>\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'\nimport {\n AnzuApiDependencyExistsError,\n axiosErrorResponseHasDependencyExistsData,\n} from '@/model/error/AnzuApiDependencyExistsError'\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, err.config?.url))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasDependencyExistsData(err)) {\n return reject(new AnzuApiDependencyExistsError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n // todo catch another axios errors, for example timeout\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","<script lang=\"ts\" setup generic=\"T extends string | number\">\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, getCurrentInstance, inject, type Ref, ref, watch } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { cloneDeep, isArray, isDefined, isEmpty, isNull, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId, IntegerId, IntegerIdNullable } from '@/types/common'\nimport ACollabLockedByUser from '@/components/collab/components/ACollabLockedByUser.vue'\nimport type { CollabComponentConfig, CollabFieldData } from '@/components/collab/types/Collab'\nimport { useCollabField } from '@/components/collab/composables/collabField'\nimport { useCommonAdminCollabOptions } from '@/components/collab/composables/commonAdminCollabOptions'\nimport type { FilterConfig, FilterData } from '@/labs/filters/filterFactory'\nimport { FilterInnerConfigKey, FilterInnerDataKey } from '@/labs/filters/filterInjectionKeys'\nimport type { DatatableSortBy } from '@/composables/system/datatableColumns'\nimport { type Pagination, usePagination } from '@/labs/filters/pagination'\nimport { useAlerts } from '@/composables/system/alerts'\n\ntype ModelValueType = T | T[] | null | undefined\n\nconst props = withDefaults(\n defineProps<{\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: (\n pagination: Ref<Pagination>,\n filterData: FilterData,\n filterConfig: FilterConfig\n ) => Promise<ValueObjectOption<T>[]>\n fetchItemsByIds: (ids: T[]) => Promise<ValueObjectOption<T>[]>\n filterByField: string\n filterSortBy?: DatatableSortBy\n loading?: boolean\n collab?: CollabComponentConfig\n disabled?: boolean | undefined\n readonly?: boolean\n chips?: boolean\n closableChips?: boolean\n disableAutoSingleSelect?: boolean // auto select works only when modelValue is empty/null and prefetch is set to 'mounted'\n prefetch?: 'hover' | 'focus' | 'mounted' | false\n minSearchChars?: number\n minSearchText?: string | undefined\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 filterSortBy: null,\n loading: false,\n collab: undefined,\n disabled: undefined,\n chips: false,\n closableChips: false,\n disableAutoSingleSelect: false,\n prefetch: false,\n minSearchChars: 2,\n minSearchText: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'searchChange', data: string): void\n (e: 'searchChangeDebounced', data: string): void\n (e: 'blur', data: ModelValueType): void\n (e: 'focus', data: ModelValueType): void\n (e: 'click:chipClose', data: ValueObjectOption<T>): void\n}>()\n\nconst SEARCH_DEBOUNCE_MS = 300\n\nconst filterInnerConfig = inject(FilterInnerConfigKey)\nconst filterInnerData = inject(FilterInnerDataKey)\n\nconst componentName = getCurrentInstance()?.type.__name\n\nif (isUndefined(filterInnerConfig) || isUndefined(filterInnerData)) {\n throw new Error(`[${componentName}] Incorrect provide/inject config.`)\n}\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst filterByFieldProp = props.filterByField\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst filterSortByProp = props.filterSortBy\n\nif (isUndefined(filterInnerConfig.fields[filterByFieldProp]) || isUndefined(filterInnerData[filterByFieldProp])) {\n throw new Error(\n `[${componentName}] Incorrect filter inner config. ` +\n `FilterByField is '${filterByFieldProp}' and available options are ${Object.keys(filterInnerData).join(', ')}.`\n )\n}\n\nconst modelValue = defineModel<ModelValueType>({\n required: true,\n set(newValue) {\n return isArray(newValue) ? cloneDeep(newValue) : newValue\n },\n})\n\nconst modelValueSelected = defineModel<ValueObjectOption<T> | ValueObjectOption<T>[] | null>('selected', {\n required: false,\n default: null,\n set(newValue) {\n return isArray(newValue) ? cloneDeep(newValue) : newValue\n },\n})\n\n// Collaboration\nconst { collabOptions } = useCommonAdminCollabOptions()\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst releaseFieldLock = ref((data: CollabFieldData) => {})\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst changeFieldData = ref((data: CollabFieldData) => {})\nconst acquireFieldLock = ref(() => {})\nconst lockedByUserLocal = ref<IntegerIdNullable>(null)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (collabOptions.value.enabled && isDefined(props.collab)) {\n const { releaseCollabFieldLock, changeCollabFieldData, acquireCollabFieldLock, lockedByUser } = useCollabField(\n props.collab.room,\n props.collab.field\n )\n releaseFieldLock.value = releaseCollabFieldLock\n changeFieldData.value = changeCollabFieldData\n acquireFieldLock.value = acquireCollabFieldLock\n watch(\n lockedByUser,\n (newValue) => {\n lockedByUserLocal.value = newValue\n },\n { immediate: true }\n )\n}\n\nconst search = ref('')\nconst isFocused = ref(false)\nconst modelValueAutocomplete = ref<ValueObjectOption<T> | ValueObjectOption<T>[] | null>(null)\nconst apiRequestCounter = ref(0)\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst onBlur = () => {\n isFocused.value = false\n emit('blur', modelValue.value)\n props.v?.$touch()\n releaseFieldLock.value(modelValue.value)\n}\n\nconst errorMessageComputed = computed(() => {\n if (isDefined(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 (isDefined(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 (isDefined(props.required)) return props.required\n return props.v?.required && props.v?.required.$params.type === 'required'\n})\n\nconst disabledComputed = computed(() => {\n if (isDefined(props.disabled)) return props.disabled\n return !!lockedByUserLocal.value\n})\n\nconst { pagination } = usePagination(isNull(filterSortByProp) ? null : filterSortByProp.key, filterSortByProp?.order)\nconst fetchedItems = ref<ValueObjectOption<T>[]>([])\nconst selectedItemsCache = ref<ValueObjectOption<T>[]>([])\nconst isFirstLoad = ref(true)\nconst prefetchCompleted = ref(false)\n\nconst allItems = computed<ValueObjectOption<T>[]>(() => {\n const itemsMap = new Map<T, ValueObjectOption<T>>()\n const addToMap = (items: ValueObjectOption<T>[]) => {\n items.forEach((item) => {\n itemsMap.set(item.value, {\n value: item.value,\n title: item.title,\n subtitle: item.subtitle,\n } as ValueObjectOption<T>)\n })\n }\n\n addToMap(selectedItemsCache.value as ValueObjectOption<T>[])\n addToMap(fetchedItems.value as ValueObjectOption<T>[])\n\n return Array.from(itemsMap.values())\n})\n\nconst loadingLocal = ref(false)\nconst loadingComputed = computed(() => {\n if (loadingLocal.value) return true\n return props.loading\n})\n\nconst resetToEmptyState = (value: ModelValueType) => {\n selectedItemsCache.value = []\n modelValueSelected.value = isArray(value) ? [] : null\n modelValueAutocomplete.value = isArray(value) ? [] : null\n}\n\nconst updateSelected = (value: T[] | T) => {\n const findItem = (id: T): ValueObjectOption<T> =>\n allItems.value.find((obj) => obj.value === id) ?? ({ title: `${id}`, value: id } as ValueObjectOption<T>)\n return isArray(value) ? value.map(findItem) : findItem(value)\n}\n\nconst loadListItems = async (ids: T[] | T) => {\n loadingLocal.value = true\n\n try {\n const idsArray = isArray(ids) ? ids : [ids]\n selectedItemsCache.value = await props.fetchItemsByIds(idsArray)\n const selectedNewValue = updateSelected(ids)\n modelValueSelected.value = selectedNewValue\n modelValueAutocomplete.value = selectedNewValue\n return selectedItemsCache.value\n } finally {\n loadingLocal.value = false\n }\n}\n\nconst tryLoadModelValue = async (tryLoadValue: ModelValueType, prefetch = false) => {\n const idsToFetch = isArray(tryLoadValue) ? tryLoadValue : [tryLoadValue]\n loadingLocal.value = true\n\n try {\n const fetchedData = await props.fetchItemsByIds(idsToFetch as Array<IntegerId & DocId>)\n if (isArray(fetchedData) && fetchedData.length > 0) {\n selectedItemsCache.value = fetchedData\n if (props.multiple) {\n const values = fetchedData.map((item) => item.value)\n modelValue.value = values\n if (prefetch) {\n await tryAutoFetch('force', values)\n }\n loadingLocal.value = false\n return true\n }\n modelValue.value = fetchedData[0].value\n if (prefetch) {\n await tryAutoFetch('force', fetchedData[0].value)\n }\n loadingLocal.value = false\n return true\n }\n loadingLocal.value = false\n return false\n } catch (e) {\n showErrorsDefault(e)\n }\n}\n\nconst { showErrorsDefault } = useAlerts()\n\nconst apiSearch = async (query: string, requestCounter: number) => {\n loadingLocal.value = true\n filterInnerData[filterByFieldProp] = query\n try {\n const res = await props.fetchItems(pagination, filterInnerData, filterInnerConfig)\n if (requestCounter === apiRequestCounter.value) fetchedItems.value = res\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n loadingLocal.value = false\n }\n}\n\nconst tryAutoFetch = async (mode: 'focus' | 'hover' | 'mounted' | 'force', newValue: ModelValueType) => {\n if (loadingLocal.value) return\n if (mode !== 'force') {\n if (props.prefetch === false || props.prefetch !== mode || prefetchCompleted.value) return\n }\n\n loadingLocal.value = true\n try {\n const res = await props.fetchItems(pagination, filterInnerData, filterInnerConfig)\n if (apiRequestCounter.value === 0) {\n fetchedItems.value = res\n if (\n !props.disableAutoSingleSelect &&\n res.length === 1 &&\n (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0))\n ) {\n modelValue.value = props.multiple ? [res[0].value] : res[0].value\n }\n }\n prefetchCompleted.value = true\n } finally {\n loadingLocal.value = false\n }\n}\n\nconst onFocus = async () => {\n isFocused.value = true\n acquireFieldLock.value()\n await tryAutoFetch('focus', modelValue.value)\n emit('focus', modelValue.value)\n}\n\nconst onMouseEnter = async () => {\n await tryAutoFetch('hover', modelValue.value)\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 try {\n fetchedItems.value = await props.fetchItems(pagination, filterInnerData, filterInnerConfig)\n } catch (e) {\n showErrorsDefault(e)\n }\n if (props.multiple) {\n modelValue.value = []\n return\n }\n modelValue.value = null\n}\n\nconst onChipCloseClick = (closedItem: ValueObjectOption<T>) => {\n if (isArray(modelValue.value)) {\n modelValue.value = modelValue.value.filter((item) => item !== closedItem.value)\n return\n }\n if (closedItem.value === modelValue.value && props.clearable) {\n modelValue.value = null\n }\n}\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (newValue.length > 0 && newValue.length < props.minSearchChars) return\n if (newValue.length === 0 && props.prefetch === false) {\n fetchedItems.value = []\n return\n }\n apiRequestCounter.value++\n apiSearch(newValue, apiRequestCounter.value)\n emit('searchChangeDebounced', newValue)\n },\n { debounce: SEARCH_DEBOUNCE_MS }\n)\n\nwatch(search, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n emit('searchChange', newValue)\n }\n})\n\nconst onAutocompleteModelUpdate = (newValue: ValueObjectOption<T> | readonly ValueObjectOption<T>[] | null) => {\n const cloned = cloneDeep(newValue) as ValueObjectOption<T> | ValueObjectOption<T>[] | null\n modelValueSelected.value = cloned\n if (isNull(cloned) || isUndefined(cloned)) {\n modelValue.value = null\n return\n }\n if (isArray(cloned)) {\n modelValue.value = cloned.map((item) => item.value)\n return\n }\n modelValue.value = cloned.value\n}\n\nconst noDataText = computed(() => {\n if (loadingLocal.value) {\n return '$vuetify.loading'\n }\n if (fetchedItems.value.length === 0 && search.value.length < props.minSearchChars) {\n return isUndefined(props.minSearchText)\n ? t('common.filter.filterMinChars', { min: props.minSearchChars })\n : props.minSearchText\n }\n return undefined\n})\n\nwatch(\n modelValue,\n async (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (isFirstLoad.value) {\n isFirstLoad.value = false\n await tryAutoFetch('mounted', newValue)\n }\n if (collabOptions.value.enabled && isFocused.value) {\n changeFieldData.value(newValue)\n }\n if (isEmpty(newValue)) {\n resetToEmptyState(newValue)\n return\n }\n await loadListItems(newValue as T[] | T)\n },\n { immediate: true }\n)\n\ndefineExpose({\n tryLoadModelValue,\n})\n</script>\n\n<template>\n <VAutocomplete\n :model-value=\"modelValueAutocomplete as any\"\n :items=\"allItems\"\n no-filter\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :chips=\"chips || multiple || closableChips\"\n :hide-details=\"hideDetails\"\n :loading=\"loadingComputed\"\n :disabled=\"disabledComputed\"\n :readonly=\"readonly\"\n :no-data-text=\"noDataText\"\n return-object\n autocomplete=\"off\"\n :hide-selected=\"closableChips\"\n :closable-chips=\"closableChips && !loadingComputed && !disabledComputed && !readonly\"\n @update:search=\"onSearchUpdate\"\n @update:model-value=\"onAutocompleteModelUpdate\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @mouseenter=\"onMouseEnter\"\n @click:clear=\"onClickClear\"\n >\n <template #item=\"{ props: itemProps, item }\">\n <VListItem\n v-bind=\"itemProps\"\n :title=\"item.raw.title\"\n :subtitle=\"item.raw.subtitle\"\n />\n </template>\n <template #chip=\"{ props: chipProps, item }\">\n <VChip\n :closable=\"chipProps.closable as boolean\"\n size=\"small\"\n :text=\"`${item.title} (${item.raw.subtitle})`\"\n :disabled=\"item.props.disabled\"\n @click:close=\"onChipCloseClick(item.raw)\"\n >\n {{ item.raw.title }}\n <span\n v-if=\"item.raw.subtitle\"\n class=\"font-italic pl-1\"\n >\n ({{ item.raw.subtitle }})\n </span>\n </VChip>\n </template>\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=\"lockedByUserLocal\"\n #append-inner\n >\n <slot\n name=\"locked\"\n :user-id=\"lockedByUserLocal\"\n >\n <ACollabLockedByUser\n v-if=\"collab\"\n :id=\"lockedByUserLocal\"\n :users=\"collab.cachedUsers\"\n />\n </slot>\n </template>\n <template\n v-if=\"$slots.append\"\n #append\n >\n <slot name=\"append\" />\n </template>\n </VAutocomplete>\n</template>\n"],"names":["_createBlock","_component_VRow","__props","_createVNode","_component_VCol","_createElementBlock","_renderSlot","_ctx","_createElementVNode","_hoisted_1","_toDisplayString","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","stringToNumber","trimmedValue","numericValue","stringToBooleanExact","stringSplitOnFirstOccurrence","delimiter","index","stringToSlug","stringToKebabCase","stringTrimLength","maxLength","stringUrlTemplateReplace","template","params","newParts","path","queryString","part","key","stringUrlTemplateReplaceVueRouter","regex","match","stringNormalizeForSlotName","name","stringIsValidEmail","email","SystemScopeSymbol","SubjectScopeSymbol","AvailableLanguagesSymbol","DefaultLanguageSymbol","props","color","computed","fontSize","text","firstNameLastName","_component_VAvatar","_normalizeClass","_component_VTooltip","cached","shallowRef","loaded","cachedUsers","t","useI18n","item","tooltip","prefix","watch","newValue","_openBlock","_unref","_hoisted_2","_Fragment","_component_VBadge","_component_VIcon","AAnzuUserAvatar","_component_VProgressCircular","collabRoomDataChangedEventBusKey","collabReconnectEventBusKey","collabStartingEventBusKey","collabGatheringBufferDataEventBusKey","collabApprovedJoinRequestEventBusKey","collabRejectedJoinRequestEventBusKey","collabJoinRequestEventBusKey","collabApprovedRequestToTakeModerationEventBusKey","collabRejectedRequestToTakeModerationEventBusKey","collabRequestToTakeModerationEventBusKey","collabKickedFromRoomEventBusKey","collabPurgeRoomEventBusKey","useCollabRoomDataChangeEventBus","useEventBus","useCollabReconnectEventBus","useCollabStartingEventBus","useCollabGatheringBufferDataEventBus","useCollabApprovedJoinRequestEventBus","useCollabRejectedJoinRequestEventBus","useCollabJoinRequestEventBus","useCollabApprovedRequestToTakeModerationEventBus","useCollabRejectedRequestToTakeModerationEventBus","useCollabRequestToTakeModerationEventBus","useCollabKickedFromRoomEventBus","useCollabPurgeRoomEventBus","CollabFieldLockType","CollabFieldLockStatus","createFieldLockStatusPayload","type","status","collabFieldLockStatusEventBusKey","useCollabFieldLockStatusEventBus","CollabStatus","CollabAccessRoomStatus","isCollabSuccessAccessRoomCallback","callback","CollabChangeRoomLockStatus","isCollabSuccessChangeRoomLockCallback","isCollabFailedChangeRoomLockCallback","CollabRoomJoinStrategy","CollabRequestToTakeModerationStatus","CollabRequestToJoinStatus","collabOptions","ref","resolve","initCommonAdminCollabOptions","data","useCommonAdminCollabOptions","collabConnected","collabSocket","collabRoomInfoState","reactive","collabFieldLocksState","collabFieldDataBufferState","useCollabState","room","dataBuffer","dataBufferMap","currentUserId","useCollabCurrentUserId","setCollabUserCurrentId","useCollabField","field","disableAutoUnsubscribe","changeEventBus","unsubscribeCollabFieldDataChangeListener","fieldChangeCallback","fieldLockStatusEventBus","unsubscribeCollabFieldLockStatusListener","fieldLockStatusCallback","collabGatheringBufferDataEventBus","unsubscribeCollabGatheringBufferData","collabGatheringBufferDataCallback","fieldChangeEventBusListener","event","payload","fieldLockStatusEventBusListener","collabGatheringBufferDataEventBusListener","addCollabFieldDataChangeListener","addCollabFieldLockStatusListener","addCollabGatheringBufferDataListener","tryOnBeforeUnmount","lockedByUser","roomLockData","lock","options","roomInfo","error","response","statusEvent","locks","emit","__emit","textFieldRef","releaseFieldLock","acquireFieldLock","lockedByUserLocal","releaseCollabFieldLock","acquireCollabFieldLock","system","inject","subject","onUpdate","onBlur","onFocus","errorMessageComputed","labelComputed","requiredComputed","disabledComputed","__expose","_component_VTextField","_cache","$event","ACollabLockedByUser","$slots","REQUIRED_LOCALES","i18n","createI18n","locale","usePagination","sortBy","sortDescending","usePaginationAutoHide","pagination","DATETIME_AUTO_LABEL_TRACKING","SORT_BY_SCORE","SORT_BY_ID","SORT_BY_SCORE_DATE","SORT_BY_SCORE_BEST","SortOrder","defaultColumn","createDatatableColumnsConfig","config","columnsHidden","disableActions","customInitialPagination","customI18n","showExpand","storeId","localI18n","prop","columnsAll","obj","columnsVisible","columns","column","updateSortBy","loadStoredColumns","stored","storedData","storeColumns","onMounted","onCancel","_component_VToolbar","_component_VToolbarTitle","_component_VSpacer","_component_VBtn","o","e","n","B","it","i","y","T","R","at","st","j","rt","lt","ct","b","ut","m","g","ft","ot","v","dt","Q","X","h","c","D","S","s","u","p","L","G","W","A","k","d","C","P","N","F","U","q","z","J","f","I","K","$","M","O","_","Y","V","w","Z","tt","l","et","nt","H","E","pt","yt","ht","isAnzuFatalError","AnzuFatalError","cause","message","HTTP_STATUS_OK","HTTP_STATUS_CREATED","HTTP_STATUS_ACCEPTED","HTTP_STATUS_NO_CONTENT","HTTP_STATUS_BAD_REQUEST","HTTP_STATUS_UNAUTHORIZED","HTTP_STATUS_FORBIDDEN","HTTP_STATUS_NOT_FOUND","HTTP_STATUS_UNPROCESSABLE_ENTITY","HTTP_STATUS_VALID_ALL","axiosErrorResponseIsForbidden","axios","isAnzuApiForbiddenError","AnzuApiForbiddenError","ERROR_VALIDATION","axiosErrorResponseHasValidationData","isAnzuApiValidationError","AnzuApiValidationError","hasAnzuApiValidationErrorSpecific","errorName","fieldName","resolveResponseData","axiosError","entity","items","values","isAnzuApiResponseCodeError","AnzuApiResponseCodeError","code","ERROR_FORBIDDEN_OPERATION","axiosErrorResponseHasForbiddenOperationData","isAnzuApiForbiddenOperationError","AnzuApiForbiddenOperationError","axiosErrorResponseHasDependencyExistsData","isAnzuApiDependencyExistsError","AnzuApiDependencyExistsError","isAnzuApiTimeoutError","AnzuApiTimeoutError","axiosErrorIsTimeout","isAnzuApiAxiosError","AnzuApiAxiosError","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","resolveListErrors","errorsTexts","showApiForbiddenOperationError","detail","showUnknownError","showForbiddenError","showErrorsDefault","parsedField","firstField","parsedSecond","indexNumber","secondField","module","this","r","a","dayjs","utc","customParseFormat","SUFFIX","FORMAT","DATETIME_MIN","DATETIME_MAX","dateNow","dateTimeToDate","isoDate","timestampCurrent","dateTimeNow","ignoreFractionalSeconds","ignoreSeconds","dateTimeStartOfDay","days","dateTimeEndOfDay","dateModifyMinutes","minutes","date","dateToUtc","suffix","yearNow","dateTimePretty","edgeDateValue","showSeconds","dateTimeFriendly","displayYear","displayDayMonth","now","datePretty","timePretty","dateDiff","date1","date2","unit","date1dayjs","date2dayjs","isDatetimeUTC","_getMonthInterval","nowDate","returnType","monthOffset","expandToCurrentMonth","from","until","getMonthInterval","eventClickBlur","onClick","_createTextVNode","objectDeepFreeze","propNames","objectGetValues","objectGetValueByPath","splitChar","objectSetValueByPath","objectDeletePropertyByPath","pathParts","lastIndex","recurse","replaceUrlParameters","urlTemplate","urlParams","overrideUrlTemplate","isValidHTTPStatus","statusCode","apiFetchOne","client","reject","res","err","useValidateBetween","createI18nMessage","between","useValidateEmail","useValidateMaxLength","useValidateMaxValue","maxValue","useValidateMinLength","minLength","useValidateMinValue","minValue","useValidateNumeric","numeric","useValidateRequired","required","useValidateRequiredIf","requiredIf","useValidateSlug","helpers","useValidateStringArrayItemLength","withI18nMessage","stringArrayItemLengthValidator","min","max","useValidateUrl","url","useValidateCompareDates","datesCompareValidator","otherDate","otherDateName","unrefOtherDate","dateValue","dateOther","useValidate","modelValue","_useModel","hours","hoursRefInput","useTemplateRef","minutesRefInput","hoursComputed","cleanValue","nextTick","minutesComputed","selectContent","target","onBlurHours","parsedHours","onBlurMinutes","parsedMinutes","onEnterHoursKeyup","onEnterMinutesKeyup","increaseHours","newHours","decreaseHours","increaseMinutes","newMinutes","decreaseMinutes","focusHour","oldHours","oldMinutes","hoursInt","minutesInt","_hoisted_3","_hoisted_4","_hoisted_5","pickerOpened","pickerKey","timeKey","timePickerInstance","inputInstance","confirmRefButton","textFieldValue","datePickerValue","timePickerValue","datetimeInternal","placeholderComputed","rules","v$","useVuelidate","displayFormat","tryEmitNewValue","updateDateAndTimePickerOnlyWhenChanged","oldValue","watchDatePicker","internal","watchTimePicker","newTimePickerValue","newDatePickerValue","newDate","newUtcValue","onTextFieldBlur","filtered","parsed","seconds","modelDate","onClear","close","onTextFieldFocus","onTimePickerEnterKeyup","onFocusConfirm","onDatePickerUpdate","_component_VMenu","_withCtx","menuProps","_mergeProps","_component_VCard","_component_VDatePicker","$attrs","TimePicker","modelValueComputed","changeFieldData","changeCollabFieldData","isOpened","isFocused","onOpen","onClose","ADatetimePicker","_component_VSwitch","SORT_URL_PARAM","defaultRenderOptions","createFilterStore","filterFields","acc","createFilter","store","filter","defaultValue","resolveValue","defaultGlobalOptions","fallback","useFilterClearHelpers","clearOne","filterData","filterConfig","clearAll","filterName","clearOneFilterSelected","optionValue","filterSelected","isClearable","selectedFound","foundIndex","newArray","clearAllFilterSelected","FilterHelpersMoreOptionsDefault","useFilterHelpers","moreOptions","END_FILTER_MARKER","storeKey","getFilterDataForStoring","serializeFilters","includeSort","deserializeFilters","hash","lastAmpersand","result","sortParam","order","fieldConfig","allNumeric","updateLocationHash","serialized","resetLocationHash","parseLocationHash","storeFilterLocalStorage","loadFilterLocalStorage","source","storedFromHash","tryConvertNumber","tryConvertBoolean","TimeIntervalSpecialOptions","useTimeIntervalOptions","allowed","timeIntervalOptions","useFilterTimeIntervalValidators","dialogData","datesCompare","fromComputed","untilComputed","useApiQueryBuilder","querySetLimit","queryAdd","querySetOffset","page","limit","querySetOrder","desc","formatValue","queryAddFilter","filterVariant","resolveTimeIntervalFilter","fromName","untilName","mandatory","exclude","fromValue","untilValue","getValue","isSimpleFilters","filterFieldValue","filterFieldConfig","nameRelated","isApiResponseList","isApiInfiniteResponseList","generateListQuery","queryBuild","querySetFilters","useApiFetchList","abortController","urlTemplateOverride","urlParamsOverride","forceElastic","searchApi","resData","createDefaultPaginationOptions","sortKey","sortOrder","externalPaginationRef","mergedOptions","setSortBy","arg1","arg2","apiCreateOne","FilterDataKey","FilterConfigKey","FilterInnerDataKey","FilterInnerConfigKey","FilterSubmitResetCounterKey","FilterSelectedKey","DatatablePaginationKey","submitResetCounter","returnValue","updateSelected","filterConfigCurrent","label","clearField","_component_VSelect","SEARCH_DEBOUNCE_MS","filterInnerConfig","filterInnerData","componentName","getCurrentInstance","filterByFieldProp","filterSortByProp","selected","search","modelValueAutocomplete","apiRequestCounter","fetchedItems","selectedItemsCache","isFirstLoad","prefetchCompleted","allItems","itemsMap","addToMap","loading","resetToEmptyState","updateFilterSelected","findItem","id","loadListItems","ids","idsArray","selectedNewValue","apiSearch","query","requestCounter","tryAutoFetch","mode","onMouseEnter","singleItemSelectedTitle","onSearchUpdate","onClickClear","watchDebounced","checkFirstLoad","noDataText","onSelectedUpdate","final","newValueFilterData","oldValueFilterData","_component_VAutocomplete","itemProps","_component_VListItem","chipProps","_component_VChip","isOneOf","enumValues","autoFetchTimer","finalRaw","findLocalDataByValues","found","tryToLoadFromLocalData","count","foundItems","autoFetched","clearAutoFetchTimer","autoFetch","itemItem","chipItem","modelItemValue","datatableSlotName","columnName","componentComputed","AFilterEmpty","AFilterString","AFilterDatetimePicker","AFilterBooleanSelect","AFilterInteger","_resolveDynamicComponent","useUserAdminConfigInnerFilter","UserAdminConfigType","UserAdminConfigTypeDefault","UserAdminConfigLayoutType","UserAdminConfigLayoutTypeDefault","MAX_BOOKMARKS","MAX_BOOKMARK_ITEMS","useFilterBookmarkStore","defineStore","bookmarks","generateKey","layoutType","systemResource","removeOldestBookmark","oldestKey","oldestTime","bookmarkKey","getBookmarks","identifier","useApiFetch","forceFetch","resource","executeFetch","fetchBookmarksCount","length","addOne","useApiRequest","method","axiosConfig","END_POINT","ENTITY","useUserAdminConfigApi","endPoint","executeRequest","THREE_DOTS_WIDTH","datatableHiddenColumns","toolbarRef","toolbarWidth","visibleItemsCount","filterBookmarkStore","useFetchUserAdminConfigList","loadBookmarks","force","onItemClick","deserialized","calculateVisible","totalWidth","container","cumulativeWidth","visible","childWidth","useResizeObserver","entries","watchThrottled","itemsComputed","newLoading","_renderList","activatorProps","_component_VList","_component_VListItemTitle","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","el","fn","off","matches","selector","getParentOrHost","closest","ctx","includeCTX","R_SPACE","toggleClass","state","className","css","val","style","matrix","selfOnly","appliedTransforms","transform","matrixFn","find","tagName","iterator","list","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","elRect","top","left","bottom","right","height","width","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","children","Sortable","lastChild","last","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","indexOfObject","arr","includeSelf","elem","gotSelf","elemCSS","extend","dst","src","isRectEqual","rect1","rect2","_throttleTimeout","throttle","ms","args","_this","cancelThrottle","scrollBy","clone","Polymer","getChildContainingRectFromElement","ghostEl","rect","child","_rect$left","_rect$top","_rect$right","_rect$bottom","childRect","expando","AnimationStateManager","animationStates","animationCallbackId","fromRect","childMatrix","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","currentRect","translateX","translateY","repaint","plugins","defaults","PluginManager","plugin","option","eventName","sortable","evt","eventNameGlobal","pluginName","initialized","modified","eventProperties","modifiedValue","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","allEventProperties","_excluded","pluginEvent","dragEl","parentEl","nextEl","lastDownEl","cloneHidden","moved","_hideGhostForTarget","_unhideGhostForTarget","_dispatchEvent","info","activeGroup","awaitingDragStarted","ignoreNextClick","sortables","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","pastFirstInvertThresh","isCircumstantialInvert","targetMoveDistance","ghostRelativeParent","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","_detectDirection","elCSS","elWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","ret","threshold","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","to","sameGroup","otherGroup","group","originalGroup","nearestEmptyInsertDetectEvent","nearest","_checkOutsideTargetEl","dataTransfer","preventOnFilter","touch","originalTarget","_saveInputCheckedState","criteria","ownerDocument","dragStartFn","_disableDraggable","_nextTick","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","_generateId","useAnimation","willInsertAfter","onMoveFn","retVal","firstElRect","childContainingRect","spacer","lastElRect","swapThreshold","invertedSwapThreshold","invertSwap","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","str","sum","root","inputs","idx","element","_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","defaultOptions","moveArrayElement","start","unrefElement","stop","tryOnMounted","tryOnScopeDispose","insertNodeAt","parentElement","refElement","removeNode","node","_valueIsRef","array","toValue","byteToHex","unsafeStringify","offset","getRandomValues","rnds8","rng","_state","v1","buf","bytes","rnds","updateV1State","v1Bytes","msecs","nsecs","clockseq","tl","tmh","randomUUID","native","_v4","v4","generateUUIDv1","uuidv1","generateUUIDv4","uuidv4","HANDLE_CLASS","GHOST_CLASS","DRAG_CLASS","CHOSEN_CLASS","GROUP_CLASS","useSortableActions","model","initSortableCallback","removeDialog","itemToRemove","widgetEl","randomUuid","sortableInstance","forceRerender","dirtyLocal","transformItem","forceRerenderWidgetHtml","emitData","touchDirty","untouchDirty","updatePositions","updatedPositions","position","clonedData","returnData","findItemIndexById","updateDataCommon","dirty","updateData","updateDataAtIndex","addAfterIndex","targetIndex","addAfterId","targetId","removeById","removeByIndex","destroy","WIDGET_HTML_ID_PREFIX","toRef","onAddAfterClick","onDeleteClick","onRemoveDialogConfirm","onEditClick","onAddLastClick","widgetHtmlId","rootClassNameComputed","initSortable","nestedSortable","needsRefresh","refresh","onBeforeUnmount","_withModifiers","withModifiers","_component_VDialog","ADialogToolbar","_component_VCardActions","_component_ABtnTertiary","_component_ABtnPrimary","useUserAdminConfigFactory","activeTab","customName","storeDatatableHiddenColumns","storeDatatableOrder","saveButtonLoading","listLoading","errorCount","itemsManage","itemEdit","rulesCreate","vCreate$","rulesEdit","vEdit$","createUserAdminConfig","updateUserAdminConfigPositions","deleteUserAdminConfig","updateUserAdminConfig","createDefaultUserAdminConfig","sortItems","reloadItems","addBookmark","onConfirm","onDelete","onItemCancel","inputRef","onEdit","onItemConfirm","_component_VCardText","_component_VTabs","_component_VTab","ARow","AFormTextField","AFormSwitch","ASortable","dialog","FilterBookmarkDialog","provide","submitFilter","submitFilterBookmark","resetFilter","touched","renderedFieldNames","_component_VForm","FilterBookmarks","FilterDetailItem","AFilterSubmitButton","AFilterResetButton","AFilterBookmarkButton","apiDeleteOne","modelValueSelected","loadingLocal","loadingComputed","tryLoadModelValue","tryLoadValue","prefetch","idsToFetch","fetchedData","onChipCloseClick","closedItem","onAutocompleteModelUpdate","cloned"],"mappings":"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","x_google_ignoreList":[17,28,29,30,82,83,84,85,86,87,88]}