@anzusystems/common-admin 1.47.0-beta.dev-1777971796 → 1.47.0-beta.dev-1778743735
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-1FJ-5Ucu.mjs → AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-CfAKR0IJ.mjs} +97 -90
- package/dist/{AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-1FJ-5Ucu.mjs.map → AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-CfAKR0IJ.mjs.map} +1 -1
- package/dist/common-admin.js +4 -4
- package/dist/{index-IOlOPejE.mjs → index-BYrVH8OR.mjs} +5605 -5534
- package/dist/index-BYrVH8OR.mjs.map +1 -0
- package/dist/labs.js +18 -12
- package/dist/labs.js.map +1 -1
- package/dist/{webfontloader-Qc8W7Rge.mjs → webfontloader-CUU4k6zM.mjs} +2 -2
- package/dist/{webfontloader-Qc8W7Rge.mjs.map → webfontloader-CUU4k6zM.mjs.map} +1 -1
- package/package.json +7 -7
- package/dist/index-IOlOPejE.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-1FJ-5Ucu.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/composables/system/datatablePageStore.ts","../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/labs/filters/AFilterTimeInterval.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.js","../node_modules/uuid/dist/stringify.js","../node_modules/uuid/dist/rng.js","../node_modules/uuid/dist/v1.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/labs/filters/AFilterAdvancedButton.vue","../src/labs/filters/FiltersSelected.vue","../src/labs/filters/AFilterWrapper.vue","../src/services/api/apiDeleteOne.ts","../src/labs/listEditor/composables/useContainerWidth.ts","../src/labs/listEditor/composables/useKeyboardNav.ts","../src/labs/listEditor/composables/useListEditorItemValidation.ts","../src/labs/listEditor/composables/useValidationRegistry.ts","../src/labs/listEditor/composables/useListEditor.ts","../src/labs/listEditor/composables/resolveCompactText.ts","../src/labs/listEditor/composables/useUnsavedKeysSync.ts","../src/labs/listEditor/composables/useDirtyBaseline.ts","../src/labs/listEditor/composables/useDeleteDialog.ts","../src/labs/listEditor/composables/useInlineEditing.ts","../src/labs/listEditor/composables/useReorderMode.ts","../src/labs/listEditor/internal/LeDeleteDialog.vue","../src/labs/listEditor/internal/LeMoveToPositionDialog.vue","../src/labs/listEditor/internal/LeEmptyState.vue","../src/labs/listEditor/internal/LeStatus.vue","../src/labs/listEditor/internal/LeUnsavedLabel.vue","../src/labs/listEditor/internal/LeDragHandle.vue","../src/labs/listEditor/internal/constants.ts","../src/labs/listEditor/ASortableListEditor.vue","../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-label-large',\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 (\n isString(value) &&\n /^[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}\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) ||\n isUndefined(value) ||\n value === '' ||\n value === 0 ||\n isEmptyArray(value) ||\n 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> =\n Symbol.for('anzu:AvailableLanguages')\nexport const DefaultLanguageSymbol: InjectionKey<LanguageCode | undefined> =\n 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 =\n 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 {\n CollabFieldDataEnvelope,\n CollabRoom,\n CollabRoomPlainData,\n} 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> = Symbol(\n 'anzu:collabRoomDataChanged',\n)\n\nexport const collabReconnectEventBusKey: EventBusKey<'reconnect'> = Symbol('anzu:collabReconnect')\n\nexport const collabStartingEventBusKey: EventBusKey<CollabStartingEvent> =\n Symbol('anzu:collabStarting')\n\nexport const collabGatheringBufferDataEventBusKey: EventBusKey<CollabGatheringBufferDataEvent> =\n Symbol('anzu:collabGatheringBufferData')\n\nexport const collabApprovedJoinRequestEventBusKey: EventBusKey<CollabApprovedJoinRequestEvent> =\n Symbol('anzu:collabApprovedJoinRequest')\n\nexport const collabRejectedJoinRequestEventBusKey: EventBusKey<CollabRejectedJoinRequestEvent> =\n Symbol('anzu:collabRejectedJoinRequest')\n\nexport const collabJoinRequestEventBusKey: EventBusKey<CollabJoinRequestEvent> =\n 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> =\n Symbol('anzu:collabRequestToTakeModeration')\n\nexport const collabKickedFromRoomEventBusKey: EventBusKey<CollabKickedFromRoomEvent> = Symbol(\n 'anzu:collabKickedFromRoom',\n)\n\nexport const collabPurgeRoomEventBusKey: EventBusKey<CollabPurgeRoomEvent> =\n Symbol('anzu:collabPurgeRoom')\n\nexport function useCollabRoomDataChangeEventBus() {\n return useEventBus<CollabRoomDataChangedEvent, CollabFieldDataEnvelope>(\n collabRoomDataChangedEventBusKey,\n )\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>(\n collabApprovedRequestToTakeModerationEventBusKey,\n )\n}\n\nexport function useCollabRejectedRequestToTakeModerationEventBus() {\n return useEventBus<CollabRejectedRequestToTakeModerationEvent>(\n collabRejectedRequestToTakeModerationEventBusKey,\n )\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 =\n (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> = Symbol(\n 'anzu:collabFieldLockStatus',\n)\n\nexport function useCollabFieldLockStatusEventBus() {\n return useEventBus<CollabFieldLockStatusEvent, CollabFieldLockStatusPayload>(\n collabFieldLockStatusEventBusKey,\n )\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 =\n (typeof CollabAccessRoomStatus)[keyof typeof CollabAccessRoomStatus]\n\nexport interface CollabRoomInfoCallback {\n room: CollabRoomInfo\n}\n\ninterface CollabAccessRoomCallback {\n status: CollabAccessRoomStatusType\n}\n\nexport interface CollabSuccessAccessRoomCallback\n extends CollabAccessRoomCallback, CollabRoomInfoCallback {\n status: typeof CollabAccessRoomStatus.Ok\n}\n\nexport interface CollabOccupiedAccessRoomCallback\n 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, 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 =\n | CollabSuccessChangeRoomLockCallback\n | 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 =\n (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 =\n (typeof CollabRequestToJoinStatus)[keyof typeof CollabRequestToJoinStatus]\n\nexport interface CollabRequestToJoinStatusCallback {\n status: CollabRequestToJoinStatusType\n}\n\nexport interface CollabClientToServerEvents {\n subscribeCollabRoomInfo: (\n room: CollabRoom,\n callback: (data: CollabRoomInfoCallback) => void,\n ) => void\n unsubscribeCollabRoomInfo: (\n room: CollabRoom,\n callback: (data: CollabRoomInfoCallback) => void,\n ) => void\n joinCollabRoom: (\n room: CollabRoom,\n options: CollabRoomOptions,\n callback: (data: CollabAccessRoomCallbackTypes) => void,\n ) => void\n leaveCollabRoom: (\n room: CollabRoom,\n callback: (data: CollabAccessRoomCallbackTypes) => void,\n ) => 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<\n Socket<CollabServerToClientEvents, CollabClientToServerEvents> | undefined\n> = ref()\nconst collabRoomInfoState = reactive(new Map<CollabRoom, CollabRoomInfo>())\nconst collabFieldLocksState = reactive(new Map<CollabRoom, Map<CollabFieldName, CollabFieldLock>>())\nconst collabFieldDataBufferState = reactive(\n new Map<CollabRoom, Map<CollabFieldName, CollabFieldData>>(),\n)\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(\n room: CollabRoom,\n field: CollabFieldName,\n disableAutoUnsubscribe = false,\n) {\n const { collabOptions } = useCommonAdminCollabOptions()\n const { currentUserId } = useCollabCurrentUserId()\n const { collabSocket, collabFieldLocksState, collabFieldDataBufferState, collabRoomInfoState } =\n 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<\n undefined | ((payload: CollabFieldLockStatusPayload) => void)\n >()\n\n const collabGatheringBufferDataEventBus = useCollabGatheringBufferDataEventBus()\n const unsubscribeCollabGatheringBufferData = ref<undefined | Fn>()\n const collabGatheringBufferDataCallback = ref<undefined | Fn>()\n\n const fieldChangeEventBusListener = (\n event: CollabRoomDataChangedEvent,\n payload?: CollabFieldDataEnvelope,\n ) => {\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 = (\n callback: (data: CollabFieldLockStatusPayload) => void,\n ) => {\n fieldLockStatusCallback.value = callback\n unsubscribeCollabFieldLockStatusListener.value = fieldLockStatusEventBus.on(\n fieldLockStatusEventBusListener,\n )\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(\n 'acquireFieldLock',\n room,\n field,\n options,\n (error, response: CollabChangeRoomLockCallbackTypes) => {\n const statusEvent: CollabFieldLockStatusEvent = { field, room }\n if (error || isCollabFailedChangeRoomLockCallback(response)) {\n return void fieldLockStatusEventBus.emit(\n statusEvent,\n createFieldLockStatusPayload(\n CollabFieldLockType.Acquire,\n CollabFieldLockStatus.Failure,\n ),\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(\n CollabFieldLockType.Acquire,\n CollabFieldLockStatus.Success,\n ),\n )\n }\n },\n )\n }\n\n const releaseCollabFieldLock = (\n data: CollabFieldData,\n options: Partial<CollabFieldLockOptions> = {},\n ) => {\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(\n 'releaseFieldLock',\n room,\n field,\n data,\n options,\n (error, response: CollabChangeRoomLockCallbackTypes) => {\n const statusEvent: CollabFieldLockStatusEvent = { field, room }\n if (error || isCollabFailedChangeRoomLockCallback(response)) {\n return void fieldLockStatusEventBus.emit(\n statusEvent,\n createFieldLockStatusPayload(\n CollabFieldLockType.Release,\n CollabFieldLockStatus.Failure,\n ),\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(\n CollabFieldLockType.Release,\n CollabFieldLockStatus.Success,\n ),\n )\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 {\n CollabComponentConfig,\n CollabFieldData,\n CollabFieldLockOptions,\n} 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\nconst releaseFieldLock = ref(\n (_data: CollabFieldData, _options?: Partial<CollabFieldLockOptions>) => {},\n)\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 (\n data.status === CollabFieldLockStatus.Failure &&\n data.type === CollabFieldLockType.Acquire\n ) {\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)\n 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 }}<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\n/**\n * Custom Slovak Pluralization Rule.\n *\n * Automatically detects the format of the translation string based on the number\n * of pipe-separated choices (`choicesLength`) and returns the correct index.\n *\n * Case A: 4 choices (Extended format with explicit 0 support)\n * Structure: \"0 items | 1 item | 2-4 items | 5+ items\"\n * - 0 -> Index 0\n * - 1 -> Index 1\n * - 2-4 -> Index 2\n * - 5+ -> Index 3\n *\n * Case B: 3 choices (Starndard Slovak format)\n * Structure: \"1 item | 2-4 items | 5+ items\"\n * - 1 -> Index 0\n * - 2-4 -> Index 1\n * - 5+ -> Index 2 (Includes 0)\n *\n * Case C: 2 choices or fewer (Fallback)\n * - 1 -> Index 0\n * - Other-> Index 1\n */\nexport const slovakPluralizationRule = (choice: number, choicesLength: number) => {\n if (choicesLength === 4) {\n if (choice === 0) return 0\n if (choice === 1) return 1\n if (choice >= 2 && choice <= 4) return 2\n return 3\n }\n if (choicesLength === 3) {\n if (choice === 1) return 0\n if (choice >= 2 && choice <= 4) return 1\n return 2\n }\n return choice === 1 ? 0 : 1\n}\n\nexport const i18n = createI18n<[MessageSchema]>({\n globalInjection: false,\n locale: REQUIRED_LOCALES[0],\n fallbackLocale: false,\n pluralRules: {\n sk: slovakPluralizationRule,\n },\n missing: (locale: Locale, key: Path) => {\n if (REQUIRED_LOCALES.includes(locale) && !key.startsWith('system.subject.')) {\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 = {\n id: number\n titleT: string\n sortBy?: DatatableSortBy\n customData?: any\n}\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 = [\n HTTP_STATUS_OK,\n HTTP_STATUS_CREATED,\n HTTP_STATUS_ACCEPTED,\n HTTP_STATUS_NO_CONTENT,\n]\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 = (\n error: any,\n): 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 = (\n error: any,\n): 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","import type { AxiosError } from 'axios'\n\nexport const isAnzuApiAxiosError = (error: unknown): 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 declare cause: AxiosError<any, any>\n\n constructor(cause: AxiosError<any, any>) {\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 {\n isAnzuApiValidationError,\n type ValidationError,\n} 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 =\n | 'created'\n | 'deleted'\n | 'updated'\n | 'published'\n | 'unpublished'\n | 'enabled'\n | '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 = (\n errors: ValidationError[],\n duration = -1,\n fieldIsTranslated = false,\n ) => {\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)\n return dayjs().utc().format('YYYY-MM-DDTHH:mm:ss') + SUFFIX\n if (ignoreFractionalSeconds && ignoreSeconds)\n return dayjs().utc().format('YYYY-MM-DDTHH:mm:00') + SUFFIX\n if (!ignoreFractionalSeconds && ignoreSeconds)\n 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 (\n isoDate === DATETIME_MAX ||\n isoDate === DATETIME_MIN ||\n isoDate === '' ||\n isNull(isoDate) ||\n isUndefined(isoDate)\n )\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 = (\n isoDate: DatetimeUTC | DatetimeUTCNullable | string | null,\n edgeDateValue = '',\n): string => {\n if (\n isoDate === DATETIME_MAX ||\n isoDate === DATETIME_MIN ||\n isoDate === '' ||\n isNull(isoDate) ||\n isUndefined(isoDate)\n )\n return edgeDateValue\n return dayjs(isoDate).format('DD.MM.YYYY')\n}\n\nexport const timePretty = (\n isoDate: DatetimeUTC | DatetimeUTCNullable | string | null,\n edgeDateValue = '',\n): string => {\n if (\n isoDate === DATETIME_MAX ||\n isoDate === DATETIME_MIN ||\n isoDate === '' ||\n isNull(isoDate) ||\n isUndefined(isoDate)\n )\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 (\n typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3,6})?Z$/.test(value)\n )\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 :data-cy=\"dataCy\"\n class=\"text-medium-emphasis px-2\"\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 = (\n urlTemplate: string,\n urlParams: UrlParams,\n overrideUrlTemplate = '',\n) => {\n if (isEmptyObject(urlParams)) return urlTemplate\n return stringUrlTemplateReplace(\n overrideUrlTemplate === '' ? urlTemplate : overrideUrlTemplate,\n urlParams,\n )\n}\n","import { HTTP_STATUS_VALID_ALL } from '@/composables/statusCodes'\n\nexport const isValidHTTPStatus = (statusCode: number) => {\n return HTTP_STATUS_VALID_ALL.includes(statusCode)\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport {\n AnzuApiValidationError,\n axiosErrorResponseHasValidationData,\n} 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 {\n AnzuApiForbiddenError,\n axiosErrorResponseIsForbidden,\n} 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) ||\n 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 =\n 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(\n newHours ?? (modelValue.value ? modelValue.value.hours.toString() : '12'),\n )\n const minutesInt = parseInt(\n newMinutes ?? (modelValue.value ? modelValue.value.minutes.toString() : '0'),\n )\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\n .set('date', newValue.getDate())\n .set('month', newValue.getMonth())\n .set('year', newValue.getFullYear())\n}\n\nconst watchTimePicker = (\n newValue: null | { hours: number; minutes: number },\n internal: dayjs.Dayjs,\n) => {\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 (\n isNull(datetimeInternal.value) &&\n (isNull(props.defaultValue) || isUndefined(props.defaultValue))\n ) {\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 if (!isNull(props.defaultValue) && !isUndefined(props.defaultValue)) {\n datetimeInternal.value = dayjs(props.defaultValue, 'YYYY-MM-DDTHH:mm:ss.SSSSSSZ')\n } else {\n datetimeInternal.value = null\n }\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 }}<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 } =\n useCollabField(props.collab.room, props.collab.field)\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)\n 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 { ref } from 'vue'\n\nconst storedPage = ref<number>(1)\nconst preservePage = ref<boolean>(false)\n\nexport function useDatatablePageStore() {\n const setStoredPage = (page: number) => {\n storedPage.value = page\n }\n\n const setPreservePage = () => {\n preservePage.value = true\n }\n\n const consumeStoredPage = (): number | null => {\n if (preservePage.value) {\n preservePage.value = false\n return storedPage.value\n }\n return null\n }\n\n return {\n setStoredPage,\n setPreservePage,\n consumeStoredPage,\n }\n}\n","import { reactive, type Ref, toRaw } from 'vue'\nimport { useDatatablePageStore } from '@/composables/system/datatablePageStore'\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>[]>(\n filterFields: F,\n): 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 = (\n name: keyof FilterData<F>,\n filterData: FilterData<F>,\n filterConfig: FilterConfig<F>,\n ) => {\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(\n (item) => item === optionValue,\n )\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 (\n isString(filterData[name as keyof FilterData<F>]) ||\n isNumber(filterData[name as keyof FilterData<F>])\n ) {\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<\n F extends readonly MakeFilterOption<string>[] = readonly MakeFilterOption<string>[],\n>(\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 const { consumeStoredPage } = useDatatablePageStore()\n let source: 'hash' | 'localStorage' = 'hash'\n let storedFromHash = parseLocationHash()\n if (isNull(storedFromHash)) {\n source = 'localStorage'\n storedFromHash = loadFilterLocalStorage()\n }\n if (\n isNull(storedFromHash) ||\n (isEmptyObject(storedFromHash.filters) && isEmptyObject(storedFromHash.sortBy))\n ) {\n const restoredPage = consumeStoredPage()\n if (restoredPage !== null) {\n pagination.value = { ...pagination.value, page: restoredPage }\n }\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 const restoredPage = consumeStoredPage()\n pagination.value = {\n ...pagination.value,\n sortBy: storedFromHash.sortBy,\n ...(restoredPage !== null ? { page: restoredPage } : {}),\n }\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<\n F extends readonly MakeFilterOption<string>[] = readonly MakeFilterOption<string>[],\n> = {\n general: GeneralFilterOptions\n touched: boolean\n fields: {\n [P in F[number]['name']]: FilterField\n }\n}\n\nexport type FilterData<\n F extends readonly MakeFilterOption<string>[] = readonly MakeFilterOption<string>[],\n> = {\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","import { ref } from 'vue'\nimport { isArray, isBoolean, isNull, isNumber, isString, isUndefined } from '@/utils/common'\nimport type { FilterVariant } from '@/types/Filter'\nimport type {\n AllowedFilterValues,\n FilterConfig,\n FilterData,\n FilterField,\n} from '@/labs/filters/filterFactory'\nimport type { DatetimeUTCNullable } from '@/types/common'\nimport {\n TimeIntervalSpecialOptions,\n type TimeIntervalToolsValue,\n} from '@/labs/filters/filterTimeIntervalTools'\nimport {\n dateModifyMinutes,\n dateTimeNow,\n dateTimeToDate,\n dateToUtc,\n getMonthInterval,\n} 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)\n 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 = (\n filterVariant: FilterVariant,\n field: string,\n value: string | number | boolean,\n ): 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 (\n config.mandatory &&\n !config.exclude &&\n !isUndefined(config.default) &&\n !isNull(config.default)\n ) {\n return encodeURIComponent(\n isArray(config.default) ? config.default.join(',') : config.default,\n )\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\n .map((item) => (isString(item) ? encodeURIComponent(item) : item))\n .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>(\n value: unknown,\n): value is ApiInfiniteResponseList<T> => {\n return isObject(value) && Object.hasOwn(value, 'hasNextPage')\n}\n","import {\n AnzuApiResponseCodeError,\n isAnzuApiResponseCodeError,\n} from '@/model/error/AnzuApiResponseCodeError'\nimport {\n AnzuApiValidationError,\n axiosErrorResponseHasValidationData,\n} 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 {\n AnzuApiForbiddenError,\n axiosErrorResponseIsForbidden,\n} 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 type UseApiFetchListParams = {\n client: AxiosClientFn\n system: string\n entity: string\n urlTemplate?: string\n urlParams?: UrlParams\n options?: AxiosRequestConfig\n silentConsoleError?: boolean\n}\n\nexport type FetchListParams = {\n urlTemplate?: string\n urlParams?: UrlParams\n forceElastic?: boolean\n}\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 } =\n 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\nexport const useApiFetchList = <R>(params: UseApiFetchListParams): UseApiFetchListReturnType<R> => {\n const {\n client,\n system,\n entity,\n urlTemplate,\n urlParams,\n options = {},\n silentConsoleError = false,\n } = params\n\n let abortController: AbortController | null = null\n\n const executeFetch = async (\n pagination: Ref<Pagination>,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n fetchParams: FetchListParams = {},\n ): Promise<R> => {\n abortController = new AbortController()\n\n const {\n urlTemplate: urlTemplateOverride,\n urlParams: urlParamsOverride,\n forceElastic = false,\n } = fetchParams\n\n try {\n const searchApi = filterConfig.general.elastic || forceElastic ? '/search' : ''\n const resolvedParams = 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(resolvedParams) ? template : replaceUrlParameters(template, resolvedParams)) +\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,\n currentViewCount: res.data.data.length,\n }\n } else if (isApiResponseList(resData)) {\n pagination.value = {\n ...pagination.value,\n totalCount: resData.totalCount,\n 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 if (!silentConsoleError)\n console.error('Axios error: ' + urlTemplate, ...(err.cause ? [err.cause] : []))\n throw new AnzuApiAxiosError(err)\n }\n\n if (!silentConsoleError) 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 params?: FetchListParams,\n ) => Promise<R>\n abortFetch: () => void\n}\n","import {\n type DatatableSortBy,\n SortOrder,\n type SortOrderType,\n} 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 = {\n ...pagination.value,\n sortBy: { key: arg1, order: arg2 as SortOrderType },\n }\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 {\n AnzuApiValidationError,\n axiosErrorResponseHasValidationData,\n} 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 {\n AnzuApiForbiddenError,\n axiosErrorResponseIsForbidden,\n} 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(\n 'anzu:FilterInnerConfigKey',\n)\n\nexport const FilterSubmitResetCounterKey: InjectionKey<Ref<number>> = Symbol.for(\n 'anzu:FilterSubmitResetCounterKey',\n)\nexport const FilterSelectedKey: InjectionKey<\n Ref<Map<string, ValueObjectOption<string | number>[]>>\n> = Symbol.for('anzu:FilterSelectedKey')\n\nexport const DatatablePaginationKey: InjectionKey<Ref<Pagination>> = Symbol.for(\n 'anzu:DatatablePaginationKey',\n)\n\nexport const SubjectSelectCloseSidebarKey: InjectionKey<() => void> = Symbol.for(\n 'anzu:SubjectSelectCloseSidebarKey',\n)\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]\n ? { value: 1, title: t(props.trueT) }\n : { 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, [\n { title: modelValue.value.title, value: modelValue.value.value },\n ])\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')\n return t('common.model.filterPlaceholder.startsWith')\n if (filterConfigCurrent.value.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (filterConfigCurrent.value.variant === 'search')\n 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, [\n { title: modelValue.value + '', value: modelValue.value },\n ])\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 {\n type FilterConfig,\n type FilterData,\n useFilterClearHelpers,\n} 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 (\n isUndefined(filterInnerConfig.fields[filterByFieldProp]) ||\n isUndefined(filterInnerData[filterByFieldProp])\n) {\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(\n isNull(filterSortByProp) ? null : filterSortByProp.key,\n filterSortByProp?.order,\n)\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) ??\n ({ 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')\n return t('common.model.filterPlaceholder.startsWith')\n if (filterConfigCurrent.value.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (filterConfigCurrent.value.variant === 'search')\n 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, internalItem }\">\n <VListItem\n v-bind=\"itemProps\"\n :title=\"internalItem.raw.title\"\n :subtitle=\"internalItem.raw.subtitle\"\n />\n </template>\n <template #chip=\"{ props: chipProps, internalItem }\">\n <VChip\n :closable=\"chipProps.closable as boolean\"\n size=\"small\"\n :text=\"`${internalItem.title} (${internalItem.raw.subtitle})`\"\n :disabled=\"internalItem.props.disabled\"\n >\n {{ internalItem.raw.title }}\n <span\n v-if=\"internalItem.raw.subtitle\"\n class=\"font-italic pl-1\"\n >\n ({{ internalItem.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 {\n type FilterConfig,\n type FilterData,\n useFilterClearHelpers,\n} 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 =\n | ((ids: IntegerId[]) => Promise<any[]>)\n | ((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>) =>\n values.includes(item.value),\n )\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(\n pagination,\n filterInnerData,\n filterInnerConfig,\n )\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')\n return t('common.model.filterPlaceholder.startsWith')\n if (filterConfigCurrent.value.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (filterConfigCurrent.value.variant === 'search')\n 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) => ({\n title: item.title,\n value: item.value,\n }))\n updateFilterSelected(selected.value)\n return\n }\n if (isArray(newValue)) {\n loading.value = true\n try {\n selectedItemsCache.value = await props.fetchItemsMinimalByIds(\n newValue as Array<IntegerId & DocId>,\n )\n selected.value = selectedItemsCache.value.map((item) => ({\n title: item.title,\n value: item.value,\n }))\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) => ({\n title: item.title,\n value: item.value,\n }))[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, internalItem: 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, internalItem: 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, [\n { title: found.title as string, value: found.value as string },\n ])\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","<script setup lang=\"ts\">\nimport { computed, inject, nextTick, ref, watch } from 'vue'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport { isArray, isBoolean, isNull, isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { type AllowedFilterValues, useFilterClearHelpers } from '@/labs/filters/filterFactory'\nimport {\n TimeIntervalSpecialOptions,\n type TimeIntervalToolsValue,\n useFilterTimeIntervalValidators,\n useTimeIntervalOptions,\n} from '@/labs/filters/filterTimeIntervalTools'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport AFormDatetimePicker from '@/components/form/AFormDatetimePicker.vue'\nimport type { DatetimeUTCNullable } from '@/types/common'\nimport ARow from '@/components/ARow.vue'\nimport { dateTimeNow, dateTimePretty, isDatetimeUTC } from '@/utils/datetime'\nimport { useAlerts } from '@/composables/system/alerts'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nconst props = withDefaults(\n defineProps<{\n nameFrom: string\n nameUntil: string\n allowed?: TimeIntervalToolsValue[]\n placeholder?: string | undefined\n dataCy?: string\n }>(),\n {\n allowed: undefined,\n placeholder: undefined,\n dataCy: 'filter-time-interval',\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.nameFrom]) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterConfig.fields[props.nameUntil]) ||\n isUndefined(filterData) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterData[props.nameFrom]) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterData[props.nameUntil])\n) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst modelValue = computed({\n get() {\n return filterData[props.nameFrom]\n },\n set(newValue) {\n filterData[props.nameFrom] = newValue\n updateSelected(newValue)\n filterConfig.touched = true\n nextTick(() => {\n emit('change')\n })\n },\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { timeIntervalOptions, getTimeIntervalOption } = useTimeIntervalOptions(props.allowed)\nconst modelInternal = ref<TimeIntervalToolsValue>(null)\nconst dialogCustom = ref(false)\nconst dialogData = ref<{ from: DatetimeUTCNullable; until: DatetimeUTCNullable }>({\n from: null,\n until: dateTimeNow(),\n})\nconst displayFromTo = ref(false)\n\nconst { v$ } = useFilterTimeIntervalValidators(dialogData)\n\nconst filterConfigCurrent = computed(() => filterConfig.fields[props.nameFrom])\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return filterConfigCurrent.value.titleT ? t(filterConfigCurrent.value.titleT) : undefined\n})\n\nconst { clearOne } = useFilterClearHelpers()\nconst { showValidationError } = useAlerts()\n\nconst onClear = () => {\n displayFromTo.value = false\n modelInternal.value = null\n clearField()\n}\n\nconst onDialogConfirm = () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n displayFromTo.value = true\n dialogCustom.value = false\n filterData[props.nameUntil] = dialogData.value.until\n modelValue.value = dialogData.value.from\n}\n\nconst onDialogClose = () => {\n dialogCustom.value = false\n modelInternal.value = null\n}\n\nconst clearField = () => {\n clearOne(props.nameFrom, filterData, filterConfig)\n clearOne(props.nameUntil, filterData, filterConfig)\n filterSelected.value.delete(props.nameFrom)\n}\n\nconst updateSelected = (fromValue: AllowedFilterValues) => {\n if (isArray(fromValue) || isBoolean(fromValue)) return\n if (isNull(fromValue) || isUndefined(fromValue)) {\n filterSelected.value.delete(props.nameFrom)\n return\n }\n const found = getTimeIntervalOption(fromValue as TimeIntervalToolsValue)\n if (!found && isDatetimeUTC(fromValue)) {\n const customOption = getTimeIntervalOption(TimeIntervalSpecialOptions.Custom)!\n filterSelected.value.set(props.nameFrom, [\n {\n title:\n customOption.title +\n ': ' +\n dateTimePretty(dialogData.value.from) +\n ' - ' +\n dateTimePretty(dialogData.value.until),\n value: fromValue,\n },\n ])\n return\n }\n if (!found) return\n filterSelected.value.set(props.nameFrom, [{ title: found.title, value: fromValue }])\n}\n\nconst onEditInterval = (clear = false) => {\n v$.value.$reset()\n if (clear) {\n dialogData.value.from = null\n dialogData.value.until = dateTimeNow()\n }\n dialogCustom.value = true\n}\n\nwatch(\n modelValue,\n (newValue) => {\n if (isArray(newValue) || isBoolean(newValue)) return\n displayFromTo.value = false\n if (isUndefined(newValue) || isNull(newValue)) {\n modelInternal.value = null\n return\n }\n const found = getTimeIntervalOption(modelValue.value as TimeIntervalToolsValue)\n const filterDataUntil = filterData[props.nameUntil]\n if (!found && isDatetimeUTC(modelValue.value) && isDatetimeUTC(filterDataUntil)) {\n modelInternal.value = TimeIntervalSpecialOptions.Custom\n dialogData.value.from = modelValue.value\n dialogData.value.until = filterDataUntil\n displayFromTo.value = true\n }\n if (found) {\n modelInternal.value = found.value\n }\n },\n { immediate: true },\n)\n\nwatch(\n [() => filterData[props.nameFrom], () => filterData[props.nameUntil]],\n ([fromNewValue, untilNewValue], [fromOldValue, untilOldValue]) => {\n if (fromNewValue === fromOldValue && untilNewValue === untilOldValue) return\n updateSelected(fromNewValue)\n },\n { immediate: true },\n)\n\nconst onInternalItemChange = (item: ValueObjectOption<TimeIntervalToolsValue>) => {\n if (item.value === TimeIntervalSpecialOptions.Custom) {\n onEditInterval(true)\n return\n }\n filterData[props.nameUntil] = null\n modelValue.value = item.value\n}\n</script>\n\n<template>\n <VTextarea\n v-if=\"displayFromTo\"\n :label=\"label\"\n :model-value=\"dateTimePretty(dialogData.from) + ' - ' + dateTimePretty(dialogData.until)\"\n readonly\n rows=\"1\"\n auto-grow\n hide-details\n append-inner-icon=\"mdi-menu-down\"\n clearable\n class=\"cursor-pointer\"\n @click:clear.stop=\"onClear\"\n @click.stop=\"onEditInterval()\"\n />\n <VSelect\n v-else\n v-model=\"modelInternal\"\n item-title=\"title\"\n item-value=\"value\"\n :label=\"label\"\n :clearable=\"!isNull(modelInternal)\"\n no-filter\n :data-cy=\"dataCy\"\n :items=\"timeIntervalOptions\"\n hide-details\n autocomplete=\"off\"\n @click:clear.stop=\"onClear\"\n >\n <template #item=\"{ props: itemProps, internalItem }\">\n <VListItem\n v-bind=\"itemProps\"\n @click=\"onInternalItemChange(internalItem)\"\n />\n </template>\n </VSelect>\n <VDialog\n v-if=\"dialogCustom\"\n :model-value=\"true\"\n width=\"auto\"\n :min-width=\"360\"\n >\n <VCard>\n <ADialogToolbar @on-cancel=\"onDialogClose\">\n <slot name=\"title\">\n {{ label }}\n </slot>\n </ADialogToolbar>\n <VCardText>\n <ARow>\n <AFormDatetimePicker\n v-model=\"dialogData.from\"\n :v=\"v$.dialogData.from\"\n :label=\"t('common.filter.timeInterval.from')\"\n required\n />\n </ARow>\n <ARow>\n <AFormDatetimePicker\n v-model=\"dialogData.until\"\n :v=\"v$.dialogData.until\"\n :label=\"t('common.filter.timeInterval.until')\"\n required\n />\n </ARow>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onDialogClose\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n data-cy=\"button-confirm\"\n @click.stop=\"onDialogConfirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n\n<style lang=\"scss\" scoped>\n.v-text-field.cursor-pointer {\n ::v-deep(.v-field),\n ::v-deep(.v-field__input) {\n cursor: pointer;\n }\n}\n</style>\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))\n return\n filterSelected.value.set(props.name, [\n { title: dateTimePretty(modelValue.value), value: modelValue.value },\n ])\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')\n return t('common.model.filterPlaceholder.startsWith')\n if (filterConfigCurrent.value.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (filterConfigCurrent.value.variant === 'search')\n 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, [\n { title: modelValue.value + '', value: modelValue.value },\n ])\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 {\n createFilter,\n createFilterStore,\n type MakeFilterOption,\n} 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<\n TData = UserAdminConfigDataFilterBookmark | UserAdminConfigDataPinnedWidgets,\n>\n extends AnzuUserAndTimeTrackingAware, 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 =\n (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 {\n type UserAdminConfig,\n type UserAdminConfigLayoutTypeType,\n UserAdminConfigType,\n} 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(\n identifier.systemResource,\n '_',\n )\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(\n identifier.systemResource,\n '_',\n )\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 {\n AnzuApiResponseCodeError,\n isAnzuApiResponseCodeError,\n} from '@/model/error/AnzuApiResponseCodeError'\nimport {\n AnzuApiValidationError,\n axiosErrorResponseHasValidationData,\n} 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 {\n AnzuApiForbiddenError,\n axiosErrorResponseIsForbidden,\n} from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_ACCEPTED, 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\nexport type ExecuteRequestParams<T> = {\n urlTemplate?: string\n urlParams?: UrlParams\n object?: T\n}\n\nexport type UseApiRequestParams = {\n client: AxiosClientFn\n method: Method\n system: string\n entity: string\n urlTemplate?: string\n urlParams?: UrlParams\n options?: AxiosRequestConfig\n silentConsoleError?: boolean\n}\n\nexport const useApiRequest = <R, T = R>(\n params: UseApiRequestParams,\n): UseApiAnyRequestReturnType<R, T> => {\n const {\n client,\n method,\n system,\n entity,\n urlTemplate,\n urlParams,\n options = {},\n silentConsoleError = false,\n } = params\n\n let abortController: AbortController | null = null\n\n const executeRequest = async (executeParams: ExecuteRequestParams<T> = {}): Promise<R> => {\n abortController = new AbortController()\n\n const urlTemplateOverride = executeParams.urlTemplate\n const urlParamsOverride = executeParams.urlParams\n const object = executeParams.object\n\n try {\n const axiosConfig: AxiosRequestConfig = { method }\n const resolvedParams = 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(resolvedParams)) {\n axiosConfig.url = replaceUrlParameters(template, resolvedParams)\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 || res.status === HTTP_STATUS_ACCEPTED) {\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 if (!silentConsoleError)\n console.error('Axios error: ' + urlTemplate, ...(err.cause ? [err.cause] : []))\n throw new AnzuApiAxiosError(err)\n }\n\n if (!silentConsoleError) 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: (params?: ExecuteRequestParams<T>) => 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 = () =>\n useApiFetchList<UserAdminConfig[]>({ client, system, entity, urlTemplate: END_POINT })\n\n const fetchUserAdminConfig = (id: IntegerId) => {\n const { executeRequest } = useApiRequest<UserAdminConfig>({\n client,\n method: 'GET',\n system,\n entity,\n })\n return executeRequest({ urlTemplate: endPoint + '/:id', urlParams: { id } })\n }\n\n const createUserAdminConfig = (data: UserAdminConfig) => {\n const { executeRequest } = useApiRequest<UserAdminConfig>({\n client,\n method: 'POST',\n system,\n entity,\n })\n return executeRequest({ urlTemplate: endPoint, object: data })\n }\n\n const updateUserAdminConfig = (id: IntegerId, data: UserAdminConfig) => {\n const { executeRequest } = useApiRequest<UserAdminConfig>({\n client,\n method: 'PUT',\n system,\n entity,\n })\n return executeRequest({ urlTemplate: endPoint + '/:id', urlParams: { id }, object: data })\n }\n\n const deleteUserAdminConfig = (id: IntegerId) => {\n const { executeRequest } = useApiRequest({ client, method: 'DELETE', system, entity })\n return executeRequest({ urlTemplate: endPoint + '/:id', urlParams: { id } })\n }\n\n const updateUserAdminConfigPositions = (ids: IntegerId[]) => {\n const { executeRequest } = useApiRequest<{ userAdminConfigs: IntegerId[] }>({\n client,\n method: 'PATCH',\n system,\n entity,\n })\n return executeRequest({\n urlTemplate: endPoint + '/update-positions',\n object: { userAdminConfigs: ids },\n })\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 (\n isUndefined(pagination) ||\n isUndefined(filterConfig) ||\n isUndefined(filterData) ||\n isUndefined(filterSelected)\n) {\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 = {\n ...pagination.value,\n sortBy: { key: config.sortBy!.key, order: config.sortBy!.order },\n }\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 variant=\"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 location=\"bottom\"\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.7\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nfunction _arrayWithoutHoles(r) {\n if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _defineProperty(e, r, t) {\n return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nfunction _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nfunction _iterableToArray(r) {\n if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = _objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nfunction _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nfunction _toConsumableArray(r) {\n return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n }\n}\n\nvar version = \"1.15.7\";\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 ? 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 var el = this.el;\n savedInputChecked.forEach(function (checkEl) {\n if (el.contains(checkEl)) {\n checkEl.checked = true;\n }\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, watch } from \"vue\";\nimport { defaultDocument, tryOnMounted, tryOnScopeDispose, unrefElement } from \"@vueuse/core\";\nimport Sortable from \"sortablejs\";\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, watchElement = false, ...resetOptions } = options;\n\tconst defaultOptions = { onUpdate: (e) => {\n\t\tmoveArrayElement(list, e.oldIndex, e.newIndex, e);\n\t} };\n\tconst cleanup = () => {\n\t\tsortable === null || sortable === void 0 || sortable.destroy();\n\t\tsortable = void 0;\n\t};\n\tconst initSortable = (target) => {\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 start = () => {\n\t\tconst target = typeof el === \"string\" ? document === null || document === void 0 ? void 0 : document.querySelector(el) : unrefElement(el);\n\t\tif (target) initSortable(target);\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\tlet stopWatch;\n\tif (watchElement && typeof el !== \"string\") stopWatch = watch(() => unrefElement(el), (newElement) => {\n\t\tcleanup();\n\t\tif (newElement) initSortable(newElement);\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\telse tryOnMounted(start);\n\tconst stop = () => {\n\t\tcleanup();\n\t};\n\ttryOnScopeDispose(() => {\n\t\tstopWatch === null || stopWatch === void 0 || stopWatch();\n\t\tcleanup();\n\t});\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//#endregion\nexport { insertNodeAt, moveArrayElement, removeNode, useSortable };\n","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","const rnds8 = new Uint8Array(16);\nexport default function rng() {\n return crypto.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","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (!buf && !options && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return _v4(options, buf, offset);\n}\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}\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 {\n SortableItemDataAware,\n SortableItemNewPositions,\n} 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: (\n index: number,\n data: SortablePropItem,\n position: number | null,\n dirty?: boolean | null,\n ) => void\n onRemoveDialogConfirm: () => void\n removeById: (id: DocId | IntegerId) => SortableItemNewPositions\n updateData: (\n id: DocId | IntegerId,\n data: SortablePropItem,\n position: number | null,\n dirty?: boolean | null,\n ) => void\n refresh: () => void\n destroy: () => void\n removeDialog: Ref<boolean>\n addAfterId: (\n targetId: DocId | IntegerId | null,\n data: SortablePropItem,\n ) => 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 = (\n targetIndex: number | null,\n data: SortablePropItem,\n ): 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 = (\n targetId: DocId | IntegerId | null,\n data: SortablePropItem,\n ): 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 {\n SortableEmit,\n SortableItem,\n SortablePropItem,\n} 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)\n ? WIDGET_HTML_ID_PREFIX + randomUuid.value\n : 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))\n 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 {\n UserAdminConfigLayoutTypeDefault,\n UserAdminConfigTypeDefault,\n} 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 {\n type UserAdminConfig,\n UserAdminConfigLayoutType,\n UserAdminConfigType,\n} from '@/types/UserAdminConfig'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport {\n DatatablePaginationKey,\n FilterConfigKey,\n FilterDataKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport { useFilterHelpers } from '@/labs/filters/filterFactory'\nimport {\n hasAnzuApiValidationErrorSpecific,\n isAnzuApiValidationError,\n} 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\n ? props.datatableHiddenColumns\n : undefined,\n sortBy:\n 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(\n e,\n 'error_field_not_unique',\n 'cms.userAdminConfig.model.systemResource',\n )\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 {{\n activeTab === 'add'\n ? t('common.button.add')\n : t('common.filter.bookmark.saveBookmarkOrder')\n }}\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 :data-cy=\"dataCy\"\n class=\"text-medium-emphasis px-2\"\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 SubjectSelectCloseSidebarKey,\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 closeSidebarOnMobile = inject(SubjectSelectCloseSidebarKey, () => {})\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 closeSidebarOnMobile()\n })\n}\n\nconst { clearAll, clearAllFilterSelected } = useFilterClearHelpers()\n\nconst submitFilterBookmark = () => {\n nextTick(() => {\n submitResetCounter.value++\n emit('bookmarkLoadAfter')\n closeSidebarOnMobile()\n })\n}\n\nconst resetFilter = () => {\n clearAll(filterData, filterConfig)\n clearAllFilterSelected(filterData, filterConfig, filterSelected)\n nextTick(() => {\n submitResetCounter.value++\n emit('reset')\n closeSidebarOnMobile()\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 density=\"compact\">\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","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n tooltipT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n tooltipT: 'common.button.advancedFilters',\n buttonClass: 'mt-1',\n dataCy: 'filter-advanced',\n },\n)\nconst emit = defineEmits<{\n (e: 'advancedFilter'): void\n}>()\n\nconst active = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n active.value = !active.value\n emit('advancedFilter')\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-filter-variant\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(tooltipT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { useFilterClearHelpers } from '@/labs/filters/filterFactory'\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nconst filterSelected = inject(FilterSelectedKey)\n\nif (isUndefined(filterConfig) || isUndefined(filterData) || isUndefined(filterSelected)) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst { t } = useI18n()\n\nconst getTitleFromConfig = (name: string) => {\n const titleT = filterConfig.fields?.[name]?.titleT\n if (titleT) return t(titleT)\n return name\n}\n\nconst selectedArray = computed(() => {\n const fieldOrder = Object.keys(filterConfig.fields)\n return Array.from(filterSelected.value)\n .map(([key, valueArray]) => ({\n name: key,\n title: getTitleFromConfig(key),\n options: valueArray,\n }))\n .sort((a, b) => fieldOrder.indexOf(a.name) - fieldOrder.indexOf(b.name))\n})\n\nconst { clearOneFilterSelected, isClearable } = useFilterClearHelpers()\n\nconst clickClose = (name: string, optionValue: number | string) => {\n clearOneFilterSelected(name, optionValue, filterData, filterConfig, filterSelected)\n filterConfig.touched = true\n}\n</script>\n\n<template>\n <div\n v-for=\"item in selectedArray\"\n :key=\"item.name\"\n class=\"a-selected-filters\"\n >\n <div class=\"a-selected-filters__label text-body-small\">\n {{ item.title }}:\n </div>\n <div\n v-for=\"option in item.options\"\n :key=\"option.value\"\n class=\"a-selected-filters__chips\"\n >\n <VChip\n v-if=\"isClearable(item.name, filterConfig)\"\n closable\n size=\"small\"\n class=\"a-selected-filters__chip\"\n @click:close.stop=\"clickClose(item.name, option.value)\"\n >\n <template #close>\n <VIcon\n size=\"16\"\n icon=\"mdi-close-circle\"\n />\n </template>\n {{ option.title }}\n </VChip>\n <VChip\n v-else\n size=\"small\"\n class=\"a-selected-filters__chip\"\n >\n {{ option.title }}\n </VChip>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-selected-filters {\n display: inline-flex;\n align-items: center;\n background: #f5f5f5;\n border-radius: 20px;\n padding: 4px 4px 4px 12px;\n margin: 0 4px 2px 0;\n gap: 8px;\n max-width: 100%;\n\n &__label {\n white-space: nowrap;\n }\n\n &__chips {\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n }\n\n &__chip {\n background: white;\n box-shadow: none;\n\n .v-chip__content {\n max-width: 40vw;\n }\n\n &:hover .v-chip__close {\n opacity: 0.8;\n }\n }\n\n .v-chip__close {\n opacity: 0.3;\n transition: opacity 0.2s;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport AFilterAdvancedButton from '@/labs/filters/AFilterAdvancedButton.vue'\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 FiltersSelected from '@/labs/filters/FiltersSelected.vue'\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 AFilterBookmarkButton from '@/components/buttons/filter/AFilterBookmarkButton.vue'\nimport FilterBookmarks from '@/labs/filters/FilterBookmarks.vue'\nimport type { IntegerIdNullable } from '@/types/common'\nimport { type AxiosInstance } from 'axios'\n\nconst props = withDefaults(\n defineProps<{\n enableTop?: boolean\n hideButtons?: boolean\n formName?: string\n userId?: IntegerIdNullable | undefined\n client?: (() => AxiosInstance) | undefined\n store?: FilterStoreIdentifier | boolean // false to disable, FilterStoreIdentifier to custom store key\n alwaysVisible?: boolean\n hideMore?: boolean\n }>(),\n {\n enableTop: false,\n hideButtons: false,\n formName: 'search',\n userId: undefined,\n client: undefined,\n store: true,\n alwaysVisible: false,\n hideMore: false,\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})\nconst showDetail = defineModel<boolean>('showDetail', { default: false, required: false })\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nif (isUndefined(filterConfig) || isUndefined(filterData)) {\n throw new Error('Incorrect provide/inject config.')\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}\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 toggleFilterDetail = () => {\n showDetail.value = !showDetail.value\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\nif (props.alwaysVisible) {\n showDetail.value = true\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 <VRow\n v-if=\"enableTop\"\n density=\"comfortable\"\n >\n <VCol>\n <slot name=\"top\" />\n </VCol>\n </VRow>\n <VRow density=\"compact\">\n <VCol v-if=\"store && userId && isDefined(client)\">\n <slot name=\"bookmarks\">\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 </slot>\n </VCol>\n </VRow>\n <VRow\n v-if=\"!alwaysVisible\"\n density=\"comfortable\"\n >\n <VCol\n v-if=\"!hideMore\"\n cols=\"auto\"\n >\n <AFilterAdvancedButton\n :button-active=\"showDetail\"\n @advanced-filter=\"toggleFilterDetail\"\n />\n </VCol>\n <VCol>\n <div class=\"a-filter__container\">\n <div class=\"a-filter__search\">\n <slot name=\"search\" />\n </div>\n <FiltersSelected />\n </div>\n </VCol>\n <VCol\n v-if=\"!hideButtons\"\n class=\"text-right\"\n cols=\"auto\"\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 </VCol>\n </VRow>\n <div v-if=\"!hideMore\">\n <component :is=\"alwaysVisible ? 'div' : 'VSlideYTransition'\">\n <div\n v-show=\"showDetail\"\n :class=\"{ 'mt-6 pa-4 system-border-a': !alwaysVisible }\"\n >\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 || 6\"\n :md=\"filterConfig.fields[fieldName].render.md || 4\"\n :lg=\"filterConfig.fields[fieldName].render.lg || 3\"\n :xl=\"filterConfig.fields[fieldName].render.xl || 2\"\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 </component>\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 &__search {\n display: inline-flex;\n vertical-align: middle;\n min-width: 100%;\n height: 34px;\n\n @include media-breakpoint-up(sm) {\n min-width: 50%;\n margin-right: 8px;\n }\n\n @include media-breakpoint-up(md) {\n min-width: 40%;\n }\n\n @include media-breakpoint-up(lg) {\n min-width: 30%;\n }\n }\n}\n</style>\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport {\n AnzuApiValidationError,\n axiosErrorResponseHasValidationData,\n} 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 {\n AnzuApiForbiddenError,\n axiosErrorResponseIsForbidden,\n} 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","import { computed, type ComputedRef, type Ref } from 'vue'\nimport { useElementSize } from '@vueuse/core'\n\n// Aligns JS-driven layout decisions (close button variant, mobile title icon)\n// with the CSS `@container le-shell` queries which fire on the editor's own\n// width rather than the viewport. Default threshold matches the 768/769 split\n// in `_shared.scss` and per-component narrow-container blocks.\nexport function useContainerWidth(\n el: Ref<HTMLElement | null | undefined>,\n threshold = 769,\n): { width: Ref<number>; isNarrow: ComputedRef<boolean> } {\n const { width } = useElementSize(el)\n const isNarrow = computed(() => width.value > 0 && width.value < threshold)\n return { width, isNarrow }\n}\n","import { computed, ref, watch, type ComputedRef, type Ref } from 'vue'\nimport type { ListEditorKey } from '@/labs/listEditor/types/listEditorTypes'\n\nexport interface KeyboardNavViewItem {\n key: ListEditorKey\n expanded?: boolean\n canExpand?: boolean\n canIndent?: boolean\n canOutdent?: boolean\n}\n\nexport type KeyboardNavVariant = 'flat' | 'sortable' | 'nested'\n\nexport interface KeyboardNavOptions {\n viewItems: ComputedRef<KeyboardNavViewItem[]>\n variant: KeyboardNavVariant\n isReorderMode: Ref<boolean> | ComputedRef<boolean>\n disabled?: Ref<boolean> | ComputedRef<boolean>\n\n isEditing: (key: ListEditorKey) => boolean\n\n onToggleEdit?: (key: ListEditorKey) => void\n onCancelEdit?: (key: ListEditorKey) => void\n\n onMoveUp?: (key: ListEditorKey) => void\n onMoveDown?: (key: ListEditorKey) => void\n onMoveTop?: (key: ListEditorKey) => void\n onMoveBottom?: (key: ListEditorKey) => void\n\n onIndent?: (key: ListEditorKey) => void\n onOutdent?: (key: ListEditorKey) => void\n onToggleChildren?: (key: ListEditorKey, expand: boolean) => void\n\n onCancelReorder?: () => void\n}\n\nexport interface KeyboardNavApi {\n focusedKey: Ref<ListEditorKey | null>\n grabbedKey: Ref<ListEditorKey | null>\n /** 0-based index of the grabbed row in the current ordering, or -1 if no grab. */\n grabbedIndex: ComputedRef<number>\n /** Total count of rows currently in the editor. */\n totalCount: ComputedRef<number>\n isFocused: (key: ListEditorKey) => boolean\n isGrabbed: (key: ListEditorKey) => boolean\n rowTabindex: (key: ListEditorKey) => number\n setFocus: (key: ListEditorKey | null) => void\n releaseGrab: () => void\n handleKeydown: (key: ListEditorKey, e: KeyboardEvent) => void\n}\n\n// Roving tabindex + keyboard navigation for list-editor rows. Single tabstop\n// per editor; arrow keys move an internal pointer; reorder mode adds a \"grab\"\n// state where Enter/Space picks up the focused row and arrows move it.\nexport function useKeyboardNav(options: KeyboardNavOptions): KeyboardNavApi {\n const focusedKey = ref<ListEditorKey | null>(null)\n const grabbedKey = ref<ListEditorKey | null>(null)\n\n const orderedKeys = computed<ListEditorKey[]>(() => options.viewItems.value.map((v) => v.key))\n\n const isFocused = (key: ListEditorKey): boolean => focusedKey.value === key\n const isGrabbed = (key: ListEditorKey): boolean => grabbedKey.value === key\n\n const grabbedIndex = computed<number>(() => {\n if (grabbedKey.value === null) return -1\n return orderedKeys.value.indexOf(grabbedKey.value)\n })\n\n const totalCount = computed<number>(() => orderedKeys.value.length)\n\n function rowTabindex(key: ListEditorKey): number {\n const ordered = orderedKeys.value\n if (ordered.length === 0) return -1\n if (focusedKey.value === null) return ordered[0] === key ? 0 : -1\n return focusedKey.value === key ? 0 : -1\n }\n\n function focusRowElement(key: ListEditorKey | null) {\n if (key === null || typeof document === 'undefined') return\n void Promise.resolve().then(() => {\n const el = document.querySelector<HTMLElement>(`[data-id=\"${CSS.escape(String(key))}\"]`)\n el?.focus()\n })\n }\n\n function setFocus(key: ListEditorKey | null) {\n focusedKey.value = key\n focusRowElement(key)\n }\n\n // When the focused row is removed (e.g. via delete), fall to the row that\n // took its slot, or to the new last row if it was at the end. Without this,\n // focus vanishes to <body> after a delete and the user has to Tab back in.\n // We snapshot the previous ordering so we can look up where the focused key\n // *was* — by the time the watcher fires, the key is already gone from `now`.\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n let prevOrderedKeys: ListEditorKey[] = [...orderedKeys.value]\n watch(orderedKeys, (now) => {\n if (focusedKey.value === null) {\n prevOrderedKeys = [...now]\n return\n }\n if (now.includes(focusedKey.value)) {\n prevOrderedKeys = [...now]\n return\n }\n if (now.length === 0) {\n focusedKey.value = null\n prevOrderedKeys = []\n return\n }\n const oldIndex = prevOrderedKeys.indexOf(focusedKey.value)\n const fallbackIndex = Math.min(Math.max(oldIndex, 0), now.length - 1)\n setFocus(now[fallbackIndex])\n prevOrderedKeys = [...now]\n })\n\n // Releasing a grab when the grabbed row is no longer in the list — keeps the\n // grab state consistent if the row gets removed externally.\n watch(orderedKeys, (now) => {\n if (grabbedKey.value !== null && !now.includes(grabbedKey.value)) {\n grabbedKey.value = null\n }\n })\n\n function releaseGrab() {\n grabbedKey.value = null\n }\n\n function isFormField(target: EventTarget | null): boolean {\n const el = target as HTMLElement | null\n return !!el?.matches?.('input, textarea, select, [contenteditable], [contenteditable=\"true\"]')\n }\n\n function handleKeydown(key: ListEditorKey, e: KeyboardEvent) {\n if (options.disabled?.value) return\n\n const ordered = orderedKeys.value\n const i = ordered.indexOf(key)\n if (i < 0) return\n\n const focusedItem = options.viewItems.value[i]\n const inReorder = options.isReorderMode.value\n const isGrabbedNow = grabbedKey.value === key\n const grabbedSomewhere = grabbedKey.value !== null\n\n // Form fields keep native key behavior (cursor, newlines, selection) for\n // every key except Escape. Esc still closes the edit panel even mid-typing.\n const onFormField = isFormField(e.target)\n\n switch (e.key) {\n case 'ArrowUp':\n if (onFormField) return\n e.preventDefault()\n if (inReorder && isGrabbedNow) {\n options.onMoveUp?.(key)\n } else if (i > 0) {\n setFocus(ordered[i - 1])\n }\n return\n\n case 'ArrowDown':\n if (onFormField) return\n e.preventDefault()\n if (inReorder && isGrabbedNow) {\n options.onMoveDown?.(key)\n } else if (i < ordered.length - 1) {\n setFocus(ordered[i + 1])\n }\n return\n\n case 'Home':\n if (onFormField) return\n e.preventDefault()\n if (inReorder && isGrabbedNow) {\n options.onMoveTop?.(key)\n } else if (ordered.length > 0) {\n setFocus(ordered[0])\n }\n return\n\n case 'End':\n if (onFormField) return\n e.preventDefault()\n if (inReorder && isGrabbedNow) {\n options.onMoveBottom?.(key)\n } else if (ordered.length > 0) {\n setFocus(ordered[ordered.length - 1])\n }\n return\n\n case 'ArrowLeft':\n if (options.variant !== 'nested' || onFormField) return\n e.preventDefault()\n if (inReorder && isGrabbedNow && focusedItem.canOutdent) {\n options.onOutdent?.(key)\n } else if (focusedItem.expanded) {\n options.onToggleChildren?.(key, false)\n }\n return\n\n case 'ArrowRight':\n if (options.variant !== 'nested' || onFormField) return\n e.preventDefault()\n if (inReorder && isGrabbedNow && focusedItem.canIndent) {\n options.onIndent?.(key)\n } else if (focusedItem.canExpand && !focusedItem.expanded) {\n options.onToggleChildren?.(key, true)\n }\n return\n\n case 'Enter':\n case ' ': // Space\n if (onFormField) return\n e.preventDefault()\n if (inReorder) {\n if (isGrabbedNow) {\n grabbedKey.value = null\n } else {\n grabbedKey.value = key\n }\n } else {\n options.onToggleEdit?.(key)\n }\n return\n\n case 'Escape':\n if (grabbedSomewhere) {\n e.preventDefault()\n grabbedKey.value = null\n return\n }\n if (inReorder) {\n e.preventDefault()\n options.onCancelReorder?.()\n return\n }\n if (options.isEditing(key)) {\n e.preventDefault()\n options.onCancelEdit?.(key)\n return\n }\n return\n\n default:\n return\n }\n }\n\n return {\n focusedKey,\n grabbedKey,\n grabbedIndex,\n totalCount,\n isFocused,\n isGrabbed,\n rowTabindex,\n setFocus,\n releaseGrab,\n handleKeydown,\n }\n}\n","import {\n computed,\n getCurrentInstance,\n inject,\n onBeforeUnmount,\n watch,\n type ComputedRef,\n type InjectionKey,\n type Ref,\n} from 'vue'\nimport type {\n ListEditorKey,\n ListEditorValidationState,\n} from '@/labs/listEditor/types/listEditorTypes'\n\nexport interface ListEditorValidationRegistry {\n register: (\n key: ListEditorKey,\n state: Ref<ListEditorValidationState> | ComputedRef<ListEditorValidationState>,\n ) => void\n unregister: (key: ListEditorKey) => void\n}\n\nexport const ListEditorValidationKey = Symbol(\n 'le.validation',\n) as InjectionKey<ListEditorValidationRegistry>\n\nexport interface UseListEditorItemValidationOptions {\n /**\n * Stable identity of the row in the editor's v-model. Pass a getter so the\n * composable can re-register if the key ever swaps.\n */\n key: () => ListEditorKey\n /**\n * Reactive validation state. Common shape: a computed reading vuelidate's\n * `v$.$dirty && v$.$invalid` and returning 'invalid' or null.\n */\n state:\n | Ref<ListEditorValidationState>\n | ComputedRef<ListEditorValidationState>\n | (() => ListEditorValidationState)\n}\n\n// Lets a row's inline form report its own validation state to the surrounding\n// list editor without prop-drilling. The parent editor `provide`s the registry;\n// any descendant in the slot tree can `inject` it via this composable.\n//\n// No-op when called outside an editor (e.g. a form re-used elsewhere) — the\n// inject silently returns null.\nexport function useListEditorItemValidation(options: UseListEditorItemValidationOptions): void {\n const registry = inject(ListEditorValidationKey, null)\n if (!registry) return\n if (!getCurrentInstance()) return\n\n const stateRef = computed<ListEditorValidationState>(() => {\n const s = options.state\n if (typeof s === 'function') return s()\n return s.value\n })\n\n let lastKey: ListEditorKey | null = null\n watch(\n options.key,\n (now) => {\n if (lastKey !== null && lastKey !== now) registry.unregister(lastKey)\n registry.register(now, stateRef)\n lastKey = now\n },\n { immediate: true },\n )\n\n onBeforeUnmount(() => {\n if (lastKey !== null) registry.unregister(lastKey)\n })\n}\n","import { provide, reactive, type ComputedRef, type Ref } from 'vue'\nimport {\n ListEditorValidationKey,\n type ListEditorValidationRegistry,\n} from '@/labs/listEditor/composables/useListEditorItemValidation'\nimport type {\n ListEditorKey,\n ListEditorValidationState,\n} from '@/labs/listEditor/types/listEditorTypes'\n\nconst isValidState = (v: unknown): v is Exclude<ListEditorValidationState, null> =>\n v === 'valid' || v === 'invalid' || v === 'warning'\n\nexport interface UseValidationRegistryOptions<TItem extends Record<string, any>> {\n /**\n * Caller-provided fallback callback. Tried only when no descendant has\n * registered a state for the row via `useListEditorItemValidation`.\n */\n getValidationState?: (item: TItem, key: ListEditorKey, index: number) => ListEditorValidationState\n}\n\nexport interface UseValidationRegistryApi<TItem extends Record<string, any>> {\n /**\n * Resolves a row's validation state by checking, in order:\n * 1. The provide/inject registry (descendants registered via `useListEditorItemValidation`)\n * 2. The `getValidationState` prop fallback\n * 3. The item's own `validationState` field\n *\n * Returns null when none of the above flagged a state.\n */\n resolveValidation: (raw: TItem, key?: ListEditorKey, index?: number) => ListEditorValidationState\n}\n\n/**\n * Sets up the per-item validation provide/inject registry shared by all 3\n * editor variants. Descendant rows can register their `'invalid'`/`'valid'`/\n * `'warning'` state via `useListEditorItemValidation`; the editor's row-render\n * priority order is registry → prop callback → item field.\n *\n * Used by `AListEditor`, `ASortableListEditor`, `ANestedSortableListEditor`.\n */\nexport function useValidationRegistry<TItem extends Record<string, any>>(\n options: UseValidationRegistryOptions<TItem>,\n): UseValidationRegistryApi<TItem> {\n const itemValidationStates = reactive(\n new Map<\n ListEditorKey,\n Ref<ListEditorValidationState> | ComputedRef<ListEditorValidationState>\n >(),\n )\n\n provide<ListEditorValidationRegistry>(ListEditorValidationKey, {\n register(key, state) {\n itemValidationStates.set(key, state)\n },\n unregister(key) {\n itemValidationStates.delete(key)\n },\n })\n\n const resolveValidation = (\n raw: TItem,\n key?: ListEditorKey,\n index?: number,\n ): ListEditorValidationState => {\n if (key !== undefined) {\n const fromRegistry = itemValidationStates.get(key)?.value\n if (isValidState(fromRegistry)) return fromRegistry\n }\n if (options.getValidationState && key !== undefined && index !== undefined) {\n const fromProp = options.getValidationState(raw, key, index)\n if (isValidState(fromProp)) return fromProp\n }\n const v = raw.validationState\n if (isValidState(v)) return v\n return null\n }\n\n return { resolveValidation }\n}\n","import { computed, type ComputedRef, type Ref } from 'vue'\nimport type {\n ListEditorKey,\n ListViewItem,\n PositionHint,\n UseListEditorOptions,\n} from '@/labs/listEditor/types/listEditorTypes'\n\nexport interface ListEditorApi<TItem> {\n viewItems: ComputedRef<ListViewItem<TItem>[]>\n addItem: (data: TItem, positionHint?: PositionHint) => TItem[]\n deleteItem: (idOrItem: ListEditorKey | TItem) => TItem[]\n updateItem: (idOrItem: ListEditorKey | TItem, data: TItem) => TItem[]\n moveItem: (fromIndex: number, toIndex: number) => TItem[]\n recalculatePositions: (items: TItem[]) => TItem[]\n}\n\n/**\n * Flat list editor core. Pure data behavior shared by AListEditor and\n * ASortableListEditor. Does not touch the DOM, SortableJS, or emits.\n *\n * The caller passes a writable ref (typically `defineModel<TItem[]>`).\n * Mutators write a new array to `model.value` and also return it.\n * Input items are never mutated — when positions need to change, a new\n * item object is produced with `{ ...item, [positionField]: n }`.\n */\nexport function useListEditor<TItem extends Record<string, any>>(\n model: Ref<TItem[]>,\n options: UseListEditorOptions = {},\n): ListEditorApi<TItem> {\n const keyField = options.keyField ?? 'id'\n const positionField = options.positionField ?? 'position'\n const positionMultiplier = options.positionMultiplier ?? 1\n const updatePositionEnabled = options.updatePosition === true\n\n const viewItems = computed<ListViewItem<TItem>[]>(() =>\n model.value.map((raw, index) => ({\n key: raw[keyField] as ListEditorKey,\n index,\n raw,\n position: raw[positionField] as number | undefined,\n })),\n )\n\n const recalculatePositions = (items: TItem[]): TItem[] =>\n items.map((item, idx) => {\n const newPosition = (idx + 1) * positionMultiplier\n if (item[positionField] === newPosition) return item\n return { ...item, [positionField]: newPosition }\n })\n\n const finalize = (arr: TItem[]): TItem[] => {\n const result = updatePositionEnabled ? recalculatePositions(arr) : arr\n model.value = result\n return result\n }\n\n const isItem = (value: ListEditorKey | TItem): value is TItem =>\n value !== null && typeof value === 'object'\n\n const resolveIndexByKey = (items: TItem[], key: ListEditorKey): number =>\n items.findIndex((x) => x[keyField] === key)\n\n const resolveIndex = (items: TItem[], idOrItem: ListEditorKey | TItem): number => {\n const key = isItem(idOrItem) ? (idOrItem[keyField] as ListEditorKey) : idOrItem\n return resolveIndexByKey(items, key)\n }\n\n const resolveInsertIndex = (items: TItem[], hint?: PositionHint): number => {\n if (!hint) return items.length\n if (hint.afterId !== undefined) {\n const idx = resolveIndexByKey(items, hint.afterId)\n return idx === -1 ? items.length : idx + 1\n }\n if (hint.afterIndex !== undefined) {\n if (hint.afterIndex < 0) return items.length\n return Math.min(hint.afterIndex + 1, items.length)\n }\n if (hint.index !== undefined) {\n return Math.max(0, Math.min(hint.index, items.length))\n }\n return items.length\n }\n\n const addItem = (data: TItem, positionHint?: PositionHint): TItem[] => {\n const arr = [...model.value]\n const insertIndex = resolveInsertIndex(arr, positionHint)\n arr.splice(insertIndex, 0, data)\n return finalize(arr)\n }\n\n const deleteItem = (idOrItem: ListEditorKey | TItem): TItem[] => {\n const idx = resolveIndex(model.value, idOrItem)\n if (idx === -1) return model.value\n const arr = [...model.value]\n arr.splice(idx, 1)\n return finalize(arr)\n }\n\n const updateItem = (idOrItem: ListEditorKey | TItem, data: TItem): TItem[] => {\n const idx = resolveIndex(model.value, idOrItem)\n if (idx === -1) return model.value\n const arr = [...model.value]\n arr[idx] = data\n return finalize(arr)\n }\n\n const moveItem = (fromIndex: number, toIndex: number): TItem[] => {\n const len = model.value.length\n if (fromIndex === toIndex) return model.value\n if (fromIndex < 0 || fromIndex >= len) return model.value\n if (toIndex < 0 || toIndex >= len) return model.value\n const arr = [...model.value]\n const [el] = arr.splice(fromIndex, 1)\n arr.splice(toIndex, 0, el)\n return finalize(arr)\n }\n\n return {\n viewItems,\n addItem,\n deleteItem,\n updateItem,\n moveItem,\n recalculatePositions,\n }\n}\n","import type { ListEditorKey } from '@/labs/listEditor/types/listEditorTypes'\n\n// Fallback chain for the row's compact (collapsed) display text. Used by\n// every editor variant when the consumer didn't provide an `#item-compact`\n// slot — picks the first non-empty value from the configured `compactField`\n// or a sensible set of common fields, then falls back to the row's key.\n//\n// Pure function — no Vue reactivity. Pass the i18n `t` so the caller's\n// translation context is preserved.\nexport function resolveCompactText<TItem extends Record<string, any>>(\n raw: TItem,\n key: ListEditorKey,\n options: {\n compactField?: string | null\n fallback: string\n },\n): string {\n const pick = (v: unknown): string | null => (v == null || v === '' ? null : String(v))\n const fromField = options.compactField ? pick(raw[options.compactField]) : null\n if (fromField !== null) return fromField\n const fallbacks = [\n pick(raw.title),\n pick(raw.name),\n pick(raw.texts?.title),\n pick(raw.text),\n pick(key),\n ]\n const hit = fallbacks.find((v): v is string => v !== null)\n return hit ?? options.fallback\n}\n","import { computed, watch, type ComputedRef, type Ref } from 'vue'\nimport type { ListEditorKey } from '@/labs/listEditor/types/listEditorTypes'\n\nconst setsEqual = (a: Set<ListEditorKey>, b: Set<ListEditorKey>): boolean =>\n a.size === b.size && [...a].every((k) => b.has(k))\n\nexport interface UseUnsavedKeysSyncOptions {\n /** v-model-bound external Set (consumer's `defineModel<Set<ListEditorKey>>('unsavedKeys', …)`). */\n unsavedKeysModel: Ref<Set<ListEditorKey>>\n /** Internal source of truth — typically a computed deriving `dirty || moved` per row. */\n internalUnsavedKeys: ComputedRef<Set<ListEditorKey>>\n /**\n * Called when the consumer clears every unsaved key externally\n * (`unsavedKeys.value = new Set()` after a successful parent-form save).\n * Editor variants typically re-capture the dirty baseline here.\n */\n onClearAll: () => void\n /**\n * Called per-key when the consumer rebases just one row (e.g. dropped a\n * specific key from the unsaved set). Editor variants typically\n * re-baseline that key only.\n */\n onClearKey: (key: ListEditorKey) => void\n}\n\nexport interface UseUnsavedKeysSyncApi {\n hasUnsavedChanges: ComputedRef<boolean>\n unsavedCount: ComputedRef<number>\n /**\n * Imperative API exposed via `defineExpose` — callers pass a key to clear\n * just that row, omit it to clear everything (mirrors the model-driven\n * paths).\n */\n clearUnsavedState: (key?: ListEditorKey) => void\n}\n\n/**\n * Two-way sync between an editor's own per-row dirty/moved state and the\n * external `v-model:unsaved-keys` Set the consumer passes in.\n *\n * Internal → external: when `internalUnsavedKeys` changes, write a fresh\n * Set into the model (skipping no-op writes).\n *\n * External → internal: when the consumer overwrites the model (typically\n * to clear it after a successful save), call `onClearAll` (full clear) or\n * `onClearKey` (per-key) so the editor's dirty baseline catches up.\n *\n * The `suppressNext` flag keeps the watcher pair from ping-ponging when\n * the internal change is what triggered the model write.\n *\n * Used by `AListEditor`, `ASortableListEditor`, `ANestedSortableListEditor`.\n */\nexport function useUnsavedKeysSync(options: UseUnsavedKeysSyncOptions): UseUnsavedKeysSyncApi {\n let suppressNextModelWatch = false\n\n watch(\n options.internalUnsavedKeys,\n (now) => {\n if (setsEqual(options.unsavedKeysModel.value, now)) return\n suppressNextModelWatch = true\n options.unsavedKeysModel.value = new Set(now)\n },\n { immediate: true },\n )\n\n watch(options.unsavedKeysModel, (now) => {\n if (suppressNextModelWatch) {\n suppressNextModelWatch = false\n return\n }\n if (now.size === 0 && options.internalUnsavedKeys.value.size > 0) {\n options.onClearAll()\n } else {\n // Selective per-key clear: rebaseline keys present in internal but\n // absent in model.\n for (const key of options.internalUnsavedKeys.value) {\n if (!now.has(key)) options.onClearKey(key)\n }\n }\n })\n\n const hasUnsavedChanges = computed<boolean>(() => options.internalUnsavedKeys.value.size > 0)\n const unsavedCount = computed<number>(() => options.internalUnsavedKeys.value.size)\n\n const clearUnsavedState = (key?: ListEditorKey) => {\n if (key === undefined) {\n options.onClearAll()\n } else {\n options.onClearKey(key)\n }\n }\n\n return { hasUnsavedChanges, unsavedCount, clearUnsavedState }\n}\n","import { ref, type Ref } from 'vue'\nimport type { ListEditorKey } from '@/labs/listEditor/types/listEditorTypes'\n\nexport interface UseDirtyBaselineOptions {\n /**\n * Field names to strip from item payload before hashing. Useful when the\n * consumer rewrites fields as a side effect of other operations (e.g. flat\n * sortable rewrites `[positionField]` on every row whose index shifts after\n * a move, nested sortable rewrites `[positionField, parentField]`) — those\n * rewrites shouldn't flag unchanged rows as dirty.\n */\n excludeFields?: string[]\n}\n\nexport interface UseDirtyBaselineApi<TItem> {\n dirtyBaseline: Ref<Map<ListEditorKey, string>>\n captureDirtyBaseline: () => void\n rebaselineKey: (key: ListEditorKey) => void\n isItemDirty: (key: ListEditorKey, data: TItem) => boolean\n stringifyContent: (data: TItem) => string\n}\n\n/**\n * Dirty-baseline tracking shared across list-editor variants. Captures a\n * content snapshot (key → stringified payload) so per-row \"unsaved\" markers\n * can be derived by diffing current data against the baseline.\n *\n * Pure data behaviour — no DOM, no emits, no editor-specific state. Consumers\n * (the components) own any related state like `movedKeys` and invoke\n * `captureDirtyBaseline()` themselves when resetting; splitting that out\n * keeps the composable focused on a single responsibility.\n *\n * Note: the initial baseline is captured the first time this function runs,\n * reading from `getEntries()` immediately. Callers that want to reset the\n * baseline later (e.g. after a successful parent-form save) call\n * `captureDirtyBaseline()` again.\n */\nexport function useDirtyBaseline<TItem extends Record<string, any>>(\n getEntries: () => Array<{ key: ListEditorKey; data: TItem }>,\n options: UseDirtyBaselineOptions = {},\n): UseDirtyBaselineApi<TItem> {\n const excludeFields = options.excludeFields ?? []\n const hasExcludes = excludeFields.length > 0\n // Pre-build the exclude lookup once at setup. With a typical exclude list\n // of 1-2 fields the savings are tiny, but the Set is referenced from the\n // hot stringify path so it's worth the one-time cost.\n const excludeSet = hasExcludes ? new Set(excludeFields) : null\n\n // `JSON.stringify` per-call is intentionally NOT memoized by data\n // reference. Some consumers mutate item fields in place (e.g. a v-model\n // bound to `data.title` inside an inline form) — that mutation doesn't\n // change the object identity, so a WeakMap cache would return a stale\n // dirty result. Correctness wins; the per-call cost is bounded by item\n // size and only pays at render time. For very large forms (100+ rows of\n // deeply-nested objects) this dominates GC; profile and revisit if it\n // shows up in a flame graph for a real consumer.\n const stringifyContent = (data: TItem): string => {\n if (!hasExcludes) return JSON.stringify(data)\n const copy = { ...data } as Record<string, unknown>\n for (const field of excludeSet!) {\n delete copy[field]\n }\n return JSON.stringify(copy)\n }\n\n const dirtyBaseline = ref(new Map<ListEditorKey, string>()) as Ref<Map<ListEditorKey, string>>\n\n const captureDirtyBaseline = () => {\n const next = new Map<ListEditorKey, string>()\n for (const { key, data } of getEntries()) {\n next.set(key, stringifyContent(data))\n }\n dirtyBaseline.value = next\n }\n\n const rebaselineKey = (key: ListEditorKey) => {\n const entries = getEntries()\n const entry = entries.find((e) => e.key === key)\n if (entry) {\n dirtyBaseline.value.set(key, stringifyContent(entry.data))\n } else {\n dirtyBaseline.value.delete(key)\n }\n }\n\n const isItemDirty = (key: ListEditorKey, data: TItem): boolean => {\n const baseline = dirtyBaseline.value.get(key)\n if (baseline === undefined) return true\n return baseline !== stringifyContent(data)\n }\n\n captureDirtyBaseline()\n\n return {\n dirtyBaseline,\n captureDirtyBaseline,\n rebaselineKey,\n isItemDirty,\n stringifyContent,\n }\n}\n","import { ref, type Ref } from 'vue'\n\nexport interface UseDeleteDialogOptions<TItem, ViewItem> {\n /**\n * Confirm hook — called before any destructive work. Returning `false`\n * aborts the delete silently; rejecting is treated the same as the caller's\n * `onDelete` rejecting (error message surfaced in the dialog).\n */\n onDeleteConfirm?: (item: TItem) => Promise<boolean> | boolean\n /**\n * Destructive work hook — consumer-side deletion (e.g. API call). If it\n * throws, the error is surfaced in the dialog and the local state is not\n * mutated.\n */\n onDelete?: (item: TItem) => Promise<void> | void\n /**\n * Called once the delete has succeeded end-to-end. The consumer performs\n * the editor mutation + clears component-local state here (editingKeys,\n * editingSnapshots, expanded flags, etc.). Keeping this step outside the\n * composable is deliberate — it lets each editor variant own its\n * per-component state shape without leaking it into the shared code.\n */\n onDeleted: (item: ViewItem) => void\n /**\n * Runs at click time. When true, the confirmation dialog is skipped and\n * delete proceeds immediately. Lets callers bypass the dialog for\n * specific modes (e.g. chips) without threading a prop through.\n */\n disableDeleteConfirm: () => boolean\n}\n\nexport interface UseDeleteDialogApi<ViewItem> {\n deleteDialog: Ref<boolean>\n deleteTarget: Ref<ViewItem | null>\n deleteInFlight: Ref<boolean>\n deleteError: Ref<string | null>\n performDelete: (vi: ViewItem) => Promise<boolean>\n onDeleteClick: (vi: ViewItem) => Promise<void>\n onDeleteDialogConfirm: () => Promise<void>\n onDeleteDialogCancel: () => void\n}\n\n/**\n * Delete-flow state + handlers shared across list-editor variants. Owns the\n * dialog boolean, the target row, the in-flight flag and the error string;\n * dispatches to the caller's confirm/delete/deleted hooks in the right order.\n *\n * Pure behaviour — no template, no editor dependency. The dialog markup\n * stays in each component (it references component-local slots and refs).\n */\nexport function useDeleteDialog<\n TItem extends Record<string, any>,\n ViewItem extends { key: string | number; raw: TItem },\n>(options: UseDeleteDialogOptions<TItem, ViewItem>): UseDeleteDialogApi<ViewItem> {\n const deleteDialog = ref(false)\n const deleteTarget = ref<ViewItem | null>(null) as Ref<ViewItem | null>\n const deleteInFlight = ref(false)\n const deleteError = ref<string | null>(null)\n\n const performDelete = async (vi: ViewItem): Promise<boolean> => {\n deleteError.value = null\n if (options.onDeleteConfirm) {\n const ok = await options.onDeleteConfirm(vi.raw)\n if (!ok) return false\n }\n if (options.onDelete) {\n deleteInFlight.value = true\n try {\n await options.onDelete(vi.raw)\n } catch (err) {\n deleteInFlight.value = false\n deleteError.value = err instanceof Error ? err.message : String(err)\n return false\n }\n deleteInFlight.value = false\n }\n options.onDeleted(vi)\n return true\n }\n\n const onDeleteClick = async (vi: ViewItem) => {\n if (options.disableDeleteConfirm()) {\n await performDelete(vi)\n return\n }\n deleteTarget.value = vi\n deleteError.value = null\n deleteDialog.value = true\n }\n\n const onDeleteDialogConfirm = async () => {\n if (!deleteTarget.value) return\n const ok = await performDelete(deleteTarget.value as ViewItem)\n if (ok) {\n deleteDialog.value = false\n deleteTarget.value = null\n }\n }\n\n const onDeleteDialogCancel = () => {\n if (deleteInFlight.value) return\n deleteDialog.value = false\n deleteTarget.value = null\n deleteError.value = null\n }\n\n return {\n deleteDialog,\n deleteTarget,\n deleteInFlight,\n deleteError,\n performDelete,\n onDeleteClick,\n onDeleteDialogConfirm,\n onDeleteDialogCancel,\n }\n}\n","import { nextTick, ref, watch, type ComputedRef, type Ref } from 'vue'\nimport { cloneDeep } from '@/utils/common'\nimport type { ListEditorKey } from '@/labs/listEditor/types/listEditorTypes'\n\nexport interface UseInlineEditingOptions<TItem> {\n /**\n * DOM ref of the scrolling container — the parent element that wraps every\n * row. Used to scope `querySelector` during the auto-scroll step so a page\n * with multiple editor instances doesn't accidentally scroll a sibling's\n * row into view.\n */\n rowsContainer: Ref<HTMLElement | null>\n /**\n * CSS selector for the per-row element to scroll into view. Flat editors\n * target the row directly (`.a-le-row`); the nested variant wraps rows\n * for drag/drop so the selector is the wrapper (`.a-le-row-wrapper`).\n * Must contain a `[data-id=\"...\"]` slot — filled at call time with the\n * CSS-escaped key.\n */\n rowSelector: string\n /**\n * Whether consumer-provided `#item` slot is present AND this variant is in\n * an inline-edit-capable configuration. Flat/sortable toggle this off in\n * chips mode; nested derives it from the slot existence. Auto-open on add\n * is a no-op when this is false.\n */\n isInlineEdit: ComputedRef<boolean>\n /**\n * Called when the user cancels an open edit. Consumer writes the snapshot\n * back to the underlying editor (flat: `editor.updateItem(vi.index, data)`;\n * nested: `editor.updateItem(vi.key, data)`) — the signature differs per\n * variant so the composable stays agnostic and delegates via this callback.\n */\n restoreSnapshot: (key: ListEditorKey, data: TItem) => void\n /**\n * Flat list of keys the auto-open watch should react to. Flat editors\n * return `modelValue.map(...)`; the nested variant walks the tree. Called\n * as the watch source getter — keep it referentially stable-ish so watch\n * dependencies are honoured.\n */\n watchKeys: () => ListEditorKey[]\n /**\n * Look up raw data for a key during auto-open so we can snapshot it before\n * the user starts editing. Flat editors return the item out of modelValue;\n * nested walks its tree. Returning `null` aborts the auto-open.\n */\n findEntry: (key: ListEditorKey) => { data: TItem } | null\n /**\n * Nested-only hook — after the new key is marked editing, the nested\n * variant needs to expand ancestors so the row is visible. Flat variants\n * don't need this and pass `undefined`.\n */\n afterAutoOpen?: (key: ListEditorKey) => void\n}\n\nexport interface UseInlineEditingApi<TItem, ViewItem> {\n editingKeys: Ref<Set<ListEditorKey>>\n editingSnapshots: Ref<Map<ListEditorKey, TItem>>\n pendingAutoOpen: Ref<boolean>\n clearEditing: () => void\n beginEdit: (vi: ViewItem) => void\n cancelEdit: (vi: ViewItem) => void\n commitEdit: (vi: ViewItem) => void\n closeEdit: (vi: ViewItem) => void\n requestAutoOpen: () => void\n}\n\n/**\n * Inline-edit lifecycle shared across list-editor variants.\n *\n * Owns:\n * - the per-key editing set (rows currently rendering the inline form),\n * - per-key content snapshots (taken on edit-open, used to revert on\n * cancel),\n * - the `pendingAutoOpen` flag + watch that auto-opens the most-recently\n * appended row after an `@add` emit resolves,\n * - the double-`nextTick` + `scrollIntoView` dance that pulls the new row\n * into view on long lists.\n *\n * Agnostic of the underlying editor composable — callers pass a\n * `restoreSnapshot` callback so the flat/nested signature mismatch\n * (`updateItem(index, data)` vs `updateItem(key, data)`) stays in the\n * consumer.\n */\nexport function useInlineEditing<\n TItem extends Record<string, any>,\n ViewItem extends { key: ListEditorKey; raw: TItem },\n>(options: UseInlineEditingOptions<TItem>): UseInlineEditingApi<TItem, ViewItem> {\n const editingKeys = ref<Set<ListEditorKey>>(new Set())\n const editingSnapshots = ref(new Map<ListEditorKey, TItem>()) as Ref<Map<ListEditorKey, TItem>>\n const pendingAutoOpen = ref(false)\n\n const clearEditing = () => {\n editingKeys.value.clear()\n editingSnapshots.value.clear()\n }\n\n const beginEdit = (vi: ViewItem) => {\n if (!editingSnapshots.value.has(vi.key)) {\n editingSnapshots.value.set(vi.key, cloneDeep(vi.raw) as TItem)\n }\n editingKeys.value.add(vi.key)\n }\n\n const cancelEdit = (vi: ViewItem) => {\n const snap = editingSnapshots.value.get(vi.key)\n if (snap) {\n options.restoreSnapshot(vi.key, snap as TItem)\n }\n editingKeys.value.delete(vi.key)\n editingSnapshots.value.delete(vi.key)\n }\n\n const commitEdit = (vi: ViewItem) => {\n editingKeys.value.delete(vi.key)\n editingSnapshots.value.delete(vi.key)\n }\n\n const closeEdit = (vi: ViewItem) => {\n editingKeys.value.delete(vi.key)\n editingSnapshots.value.delete(vi.key)\n }\n\n const requestAutoOpen = () => {\n pendingAutoOpen.value = true\n }\n\n watch(options.watchKeys, (newKeys, oldKeys) => {\n if (!pendingAutoOpen.value) return\n pendingAutoOpen.value = false\n const oldSet = new Set(oldKeys ?? [])\n const addedKey = newKeys.find((k) => !oldSet.has(k))\n if (addedKey === undefined) return\n if (!options.isInlineEdit.value) return\n const entry = options.findEntry(addedKey)\n if (!entry) return\n if (!editingSnapshots.value.has(addedKey)) {\n editingSnapshots.value.set(addedKey, cloneDeep(entry.data) as TItem)\n }\n editingKeys.value.add(addedKey)\n options.afterAutoOpen?.(addedKey)\n // Scroll the newly added row into view so the user sees their new item\n // even on long lists where the append lands below the viewport fold.\n // Double nextTick so the inline-edit body has rendered; `block: 'center'`\n // because `'nearest'` often decides a partially-visible row is good\n // enough and does nothing.\n nextTick(() => {\n nextTick(() => {\n const el = options.rowsContainer.value?.querySelector<HTMLElement>(\n `${options.rowSelector}[data-id=\"${CSS.escape(String(addedKey))}\"]`,\n )\n el?.scrollIntoView({ block: 'center', behavior: 'smooth' })\n })\n })\n })\n\n return {\n editingKeys,\n editingSnapshots,\n pendingAutoOpen,\n clearEditing,\n beginEdit,\n cancelEdit,\n commitEdit,\n closeEdit,\n requestAutoOpen,\n }\n}\n","import { computed, ref, watch, type ComputedRef, type InjectionKey, type Ref } from 'vue'\nimport type { ListEditorKey } from '@/labs/listEditor/types/listEditorTypes'\n\n// Registry that lets embedded inner editors push their reorder pending-count\n// up to the nearest non-embedded outer editor. The outer's reorder toolbar\n// status (\"N pending changes\") then reflects child moves too — so toggling\n// the order of an answer inside a question increments the outer's counter\n// just like a question move would.\nexport interface SharedReorderRegistry {\n register: (\n id: symbol,\n movedCount: ComputedRef<number>,\n hasPendingChanges: ComputedRef<boolean>,\n ) => void\n unregister: (id: symbol) => void\n}\n\nexport const SharedReorderRegistryKey = Symbol(\n 'le.sharedReorderRegistry',\n) as InjectionKey<SharedReorderRegistry>\n\nexport type ReorderModeValue = 'view' | 'reorder'\n\nexport interface UseReorderModeEmit<T> {\n reorderStart: () => void\n reorderCancel: () => void\n reorderApplied: (payload: T) => void\n reorderApplyError: (err: unknown) => void\n reorderEnd: () => void\n}\n\nexport interface UseReorderModeOptions<T> {\n /**\n * v-model-backed mode ref — the composable reads + writes, but the\n * component owns the `defineModel('mode', ...)` so external\n * `v-model:mode` bindings still flow. Passing the ref in avoids\n * duplicating the defineModel contract inside the composable.\n */\n mode: Ref<ReorderModeValue>\n /**\n * Reorder snapshot — cloned on enter, restored on cancel, cleared on\n * apply. Stays at component level (the dirty-baseline needs to read it\n * indirectly too), but the composable owns every assignment.\n */\n snapshot: Ref<T | null>\n /**\n * Keys the user has actively moved this session (drag, arrow buttons,\n * indent/outdent). Cleared on every mode transition. Stays at component\n * level because the per-row decorator reads it for the `moved` flag.\n */\n movedKeys: Ref<Set<ListEditorKey>>\n modelValue: Ref<T>\n /**\n * Deep-clone the model value for snapshotting. Caller-provided because\n * the nested tree shape and flat array shape need different serializer\n * handling (both use `cloneDeep` in practice, but the callsite already\n * imports it).\n */\n cloneModel: (m: T) => T\n applyModel: (m: T) => void\n canEnterReorder: ComputedRef<boolean>\n /**\n * Hook run after mode flips to `reorder` but before emit — nested uses\n * this to expand every branch + init sortable instances, flat uses it\n * (via nothing — the sortable initialises lazily via a watch in the\n * flat variant). Left optional.\n */\n onEnter?: () => void\n /**\n * Hook run after mode flips back to `view` on cancel — nested destroys\n * its sortable instances here. Flat doesn't need it.\n */\n onCancel?: () => void\n /**\n * Hook run after apply succeeds — nested destroys its sortable instances\n * here. Flat doesn't need it.\n */\n onApplyEnd?: () => void\n /**\n * Called from the mode watcher when mode flips externally from `view` to\n * `reorder` (e.g. v-model:mode bound by the parent) — each variant uses\n * this to clear variant-specific caches that `enterReorderMode` itself\n * also clears via its own call-site. The flat variant clears editing +\n * expanded; nested clears editing only (children-expanded stays).\n */\n onExternalEnter?: () => void\n /**\n * Async persist callback wired from the parent — identical semantics to\n * the old `props.onReorderApply`. Receives the cloned payload (array for\n * flat, tree for nested); throwing surfaces the error in the header\n * toolbar via `applyError`.\n */\n onReorderApply?: (payload: T) => Promise<void> | void\n /**\n * Optional override for the payload passed to `onReorderApply` + the\n * `reorder-applied` emit — defaults to `cloneModel(modelValue)`. Exists\n * so consumers could send a different shape than their stored snapshot\n * if the need arises; both current callers use the default.\n */\n clonePayload?: (m: T) => T\n /**\n * Embedded mode — the editor follows external mode changes but does NOT\n * own a snapshot or apply/cancel logic. The parent (a non-embedded outer\n * editor) takes a deep snapshot covering this editor's data too, so cancel\n * at the top restores everything. Used for the \"shared reorder\" pattern\n * where a single Reorder button drives multiple stacked editors.\n */\n embedded?: ComputedRef<boolean> | Ref<boolean>\n emit: UseReorderModeEmit<T>\n}\n\nexport interface UseReorderModeApi {\n applying: Ref<boolean>\n applyError: Ref<string | null>\n hasPendingChanges: ComputedRef<boolean>\n movedCount: ComputedRef<number>\n reorderMode: ComputedRef<boolean>\n enterReorderMode: () => void\n cancelReorderMode: () => void\n applyReorder: () => Promise<void>\n}\n\n/**\n * Reorder-mode state machine shared between ASortableListEditor and\n * ANestedSortableListEditor. Owns the `applying` + `applyError` flags, the\n * pending-changes counters, and the enter / cancel / apply transitions —\n * plus the mode watcher that fires when the v-model:mode flips externally.\n *\n * The snapshot and `movedKeys` sets stay at component level because the\n * per-row decorator + dirty-baseline read them directly; the composable\n * takes them as refs so it can still drive the state machine.\n */\nexport function useReorderMode<T>(options: UseReorderModeOptions<T>): UseReorderModeApi {\n const applying = ref(false)\n const applyError = ref<string | null>(null)\n\n const reorderMode = computed(() => options.mode.value === 'reorder')\n const movedCount = computed(() => options.movedKeys.value.size)\n const hasPendingChanges = computed(() => movedCount.value > 0)\n\n const clonePayload = (): T =>\n options.clonePayload\n ? options.clonePayload(options.modelValue.value)\n : options.cloneModel(options.modelValue.value)\n\n const isEmbedded = (): boolean => options.embedded?.value === true\n\n const enterReorderMode = () => {\n if (!options.canEnterReorder.value || reorderMode.value) return\n if (!isEmbedded()) {\n options.snapshot.value = options.cloneModel(options.modelValue.value)\n }\n options.movedKeys.value = new Set()\n applyError.value = null\n options.mode.value = 'reorder'\n options.onEnter?.()\n options.emit.reorderStart()\n }\n\n const cancelReorderMode = () => {\n if (!reorderMode.value) return\n if (!isEmbedded() && options.snapshot.value) {\n options.applyModel(options.snapshot.value as T)\n }\n options.snapshot.value = null\n options.movedKeys.value = new Set()\n applyError.value = null\n applying.value = false\n options.mode.value = 'view'\n options.onCancel?.()\n options.emit.reorderCancel()\n options.emit.reorderEnd()\n }\n\n const applyReorder = async () => {\n if (!reorderMode.value) return\n const payload = clonePayload()\n applyError.value = null\n if (!isEmbedded() && options.onReorderApply) {\n applying.value = true\n try {\n await options.onReorderApply(payload)\n } catch (err) {\n applying.value = false\n applyError.value = err instanceof Error ? err.message : String(err)\n options.emit.reorderApplyError(err)\n return\n }\n applying.value = false\n }\n // Deliberately keep `movedKeys` populated — consumer still has to persist\n // the new order via their own API call before rows are truly \"saved\"; we\n // let them clear the state manually via `resetDirtyBaseline` on success.\n options.snapshot.value = null\n options.mode.value = 'view'\n options.onApplyEnd?.()\n options.emit.reorderApplied(payload)\n options.emit.reorderEnd()\n }\n\n // Handle external mode flips (v-model:mode from a parent) — mirror the\n // same bookkeeping enterReorderMode / cancelReorderMode do so the state\n // stays consistent whether the transition came from a button click or a\n // parent binding. Embedded editors do NOT take a snapshot; their parent\n // (the outer non-embedded editor) owns one that covers nested data too.\n //\n // The view→reorder→view cleanup path differs between embedded and\n // non-embedded:\n // - non-embedded cancel: snapshot is set → clear state here\n // - non-embedded apply: applyReorder nulls snapshot BEFORE flipping\n // mode, so the snapshot-guarded branch is skipped → movedKeys stays\n // populated until consumer calls resetDirtyBaseline (the contract)\n // - embedded: no snapshot ever, clear state on every view transition\n // so the inner editor's movedKeys doesn't outlive a parent\n // cancel/apply (otherwise rows would render as `unsaved` after the\n // parent restores the original data)\n watch(options.mode, (newMode, oldMode) => {\n if (newMode === 'reorder' && oldMode !== 'reorder') {\n if (!isEmbedded() && !options.snapshot.value) {\n options.snapshot.value = options.cloneModel(options.modelValue.value)\n }\n options.movedKeys.value = new Set()\n options.onExternalEnter?.()\n }\n if (newMode === 'view' && oldMode === 'reorder') {\n if (options.snapshot.value) {\n options.snapshot.value = null\n options.movedKeys.value = new Set()\n applyError.value = null\n applying.value = false\n } else if (isEmbedded()) {\n options.movedKeys.value = new Set()\n applyError.value = null\n applying.value = false\n }\n }\n })\n\n return {\n applying,\n applyError,\n hasPendingChanges,\n movedCount,\n reorderMode,\n enterReorderMode,\n cancelReorderMode,\n applyReorder,\n }\n}\n","<script setup lang=\"ts\">\n// Shared delete-confirmation dialog used by all three list-editor variants.\n// The outer editors keep their own dialog-related state (open flag, in-flight,\n// error message) and supply i18n-resolved title / text / button labels — this\n// component is pure presentation plus confirm/cancel emits.\n\nexport interface Props {\n title: string\n text: string\n confirmLabel?: string\n cancelLabel?: string\n error?: string | null\n inFlight?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n confirmLabel: 'Delete',\n cancelLabel: 'Cancel',\n error: null,\n inFlight: false,\n})\n\ndefineEmits<{\n confirm: []\n cancel: []\n}>()\n\nconst open = defineModel<boolean>({ required: true })\n</script>\n\n<template>\n <VDialog\n v-model=\"open\"\n max-width=\"420\"\n :persistent=\"inFlight\"\n >\n <VCard>\n <VCardTitle class=\"text-headline-small\">\n {{ title }}\n </VCardTitle>\n <VCardText>\n {{ text }}\n <VAlert\n v-if=\"error\"\n type=\"error\"\n variant=\"tonal\"\n density=\"compact\"\n class=\"mt-3\"\n >\n {{ error }}\n </VAlert>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <VBtn\n variant=\"text\"\n :disabled=\"inFlight\"\n @click=\"$emit('cancel')\"\n >\n {{ cancelLabel }}\n </VBtn>\n <VBtn\n color=\"error\"\n variant=\"flat\"\n :loading=\"inFlight\"\n :disabled=\"inFlight\"\n @click=\"$emit('confirm')\"\n >\n {{ confirmLabel }}\n </VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nexport interface Props {\n total: number\n currentIndex: number\n itemLabel?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n itemLabel: undefined,\n})\n\nconst emit = defineEmits<{\n confirm: [newIndex: number]\n}>()\n\nconst open = defineModel<boolean>({ required: true })\n\nconst { t } = useI18n()\n\n// `currentIndex` is read once at setup to seed the field; subsequent changes\n// to the prop don't reset the user's typed-in value mid-edit, only re-opening\n// the dialog (via the `open` watcher below) does.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst targetPosition = ref<number>(props.currentIndex + 1)\n\nwatch(open, (now) => {\n if (now) targetPosition.value = props.currentIndex + 1\n})\n\nconst totalLabel = computed(() => Math.max(props.total, 1))\nconst isInvalid = computed<boolean>(\n () =>\n !Number.isFinite(targetPosition.value) ||\n targetPosition.value < 1 ||\n targetPosition.value > totalLabel.value,\n)\n\nconst onConfirm = () => {\n if (isInvalid.value) return\n const newIndex = Math.max(0, Math.min(props.total - 1, targetPosition.value - 1))\n emit('confirm', newIndex)\n open.value = false\n}\n\nconst onCancel = () => {\n open.value = false\n}\n</script>\n\n<template>\n <VDialog\n v-model=\"open\"\n max-width=\"420\"\n persistent\n >\n <VCard>\n <VCardTitle>\n {{ t('common.sortable.moveToPosition.title') }}\n </VCardTitle>\n\n <VCardText>\n <p\n v-if=\"itemLabel\"\n class=\"text-body-medium mb-3\"\n >\n {{ t('common.sortable.moveToPosition.itemDescription', { label: itemLabel }) }}\n </p>\n <VTextField\n v-model.number=\"targetPosition\"\n type=\"number\"\n :min=\"1\"\n :max=\"totalLabel\"\n :label=\"t('common.sortable.moveToPosition.positionLabel', { max: totalLabel })\"\n :hint=\"\n t('common.sortable.moveToPosition.positionHint', {\n current: currentIndex + 1,\n max: totalLabel,\n })\n \"\n :error=\"isInvalid\"\n autofocus\n density=\"comfortable\"\n variant=\"outlined\"\n @keydown.enter.prevent=\"onConfirm\"\n />\n </VCardText>\n\n <VCardActions>\n <VSpacer />\n <VBtn\n variant=\"text\"\n @click=\"onCancel\"\n >\n {{ t('common.sortable.reorderCancel') }}\n </VBtn>\n <VBtn\n color=\"primary\"\n variant=\"elevated\"\n :disabled=\"isInvalid\"\n @click=\"onConfirm\"\n >\n {{ t('common.sortable.moveToPosition.confirm') }}\n </VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n'\n\n// Shared empty-state block used by all three list-editor variants. Since the\n// refactor to a flat `.a-le-*` namespace, the block class no longer depends\n// on the parent variant — the same three classes render inside any editor.\n\nexport interface Props {\n title: string\n text: string\n addLabel?: string | null\n canAdd?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n addLabel: null,\n canAdd: false,\n})\n\ndefineEmits<{\n add: []\n}>()\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"a-le-empty\">\n <h3 class=\"a-le-empty-title\">\n {{ title }}\n </h3>\n <p class=\"a-le-empty-text\">\n {{ text }}\n </p>\n <VBtn\n v-if=\"addLabel && canAdd\"\n color=\"primary\"\n variant=\"flat\"\n prepend-icon=\"mdi-plus\"\n @click=\"$emit('add')\"\n >\n {{ t('common.sortable.addFirst') }}\n </VBtn>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n'\n\n// Reorder-mode header status pill. Emits `.a-le-toolbar-status` on its root,\n// caller adds the `--pending` modifier via class binding. inheritAttrs stays\n// default so additional classes (e.g. the --pending modifier) stick to the\n// root div.\n\nexport interface Props {\n hasPendingChanges: boolean\n pendingCount: number\n error?: string | null\n}\n\nwithDefaults(defineProps<Props>(), {\n error: null,\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"a-le-toolbar-status\">\n <VIcon\n v-if=\"hasPendingChanges\"\n icon=\"mdi-circle-medium\"\n color=\"warning\"\n size=\"18\"\n />\n <span\n v-if=\"error\"\n class=\"text-body-small\"\n >\n {{ error }}\n </span>\n <span\n v-else-if=\"hasPendingChanges\"\n class=\"text-body-small\"\n >\n {{ t('common.sortable.pendingChanges', { count: pendingCount }) }}\n </span>\n <span\n v-else\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ t('common.sortable.noPendingChanges') }}\n </span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n'\n\n// Small \"unsaved\" pill (warning dot + translated label). Emits the shared\n// `.a-le-unsaved-label` class directly — the flat `.a-le-*` namespace means\n// every variant shares the same selector, no per-variant BEM prefix needed.\n\nexport interface Props {\n label?: string | null\n}\n\nwithDefaults(defineProps<Props>(), {\n label: null,\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <span class=\"a-le-unsaved-label\">\n <VIcon\n icon=\"mdi-circle-medium\"\n size=\"12\"\n />\n {{ label ?? t('common.sortable.unsaved') }}\n </span>\n</template>\n","<script setup lang=\"ts\">\n// Drag-handle icon. Emits the shared `.a-le-drag-handle` class so SortableJS\n// `handle` selectors ('.a-le-drag-handle') match across every variant.\n</script>\n\n<template>\n <VIcon\n class=\"a-le-drag-handle\"\n icon=\"mdi-drag\"\n size=\"20\"\n />\n</template>\n","// Shared internal constants for the list-editor variants.\n// Class names are referenced both as SortableJS option strings and as CSS\n// selectors in `_shared.scss`; centralising them avoids the typo risk that\n// comes with the same string literal living in 2+ places.\n\nexport const DRAG_GHOST_CLASS = 'a-le-row--ghost'\nexport const DRAG_CHOSEN_CLASS = 'a-le-row--chosen'\nexport const DRAG_CLASS = 'a-le-row--drag'\n","<script setup lang=\"ts\" generic=\"TItem extends Record<string, any>\">\nimport {\n computed,\n inject,\n onBeforeUnmount,\n provide,\n ref,\n shallowReactive,\n shallowRef,\n useSlots,\n useTemplateRef,\n watch,\n type ComputedRef,\n} from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useDisplay } from 'vuetify'\nimport { useContainerWidth } from '@/labs/listEditor/composables/useContainerWidth'\nimport { useKeyboardNav } from '@/labs/listEditor/composables/useKeyboardNav'\nimport { useValidationRegistry } from '@/labs/listEditor/composables/useValidationRegistry'\nimport { useSortable } from '@vueuse/integrations/useSortable'\nimport { useListEditor } from '@/labs/listEditor/composables/useListEditor'\nimport { resolveCompactText as resolveCompactTextUtil } from '@/labs/listEditor/composables/resolveCompactText'\nimport { useUnsavedKeysSync } from '@/labs/listEditor/composables/useUnsavedKeysSync'\nimport { useDirtyBaseline } from '@/labs/listEditor/composables/useDirtyBaseline'\nimport { useDeleteDialog } from '@/labs/listEditor/composables/useDeleteDialog'\nimport { useInlineEditing } from '@/labs/listEditor/composables/useInlineEditing'\nimport {\n useReorderMode,\n SharedReorderRegistryKey,\n type SharedReorderRegistry,\n} from '@/labs/listEditor/composables/useReorderMode'\nimport LeDeleteDialog from '@/labs/listEditor/internal/LeDeleteDialog.vue'\nimport LeMoveToPositionDialog from '@/labs/listEditor/internal/LeMoveToPositionDialog.vue'\nimport LeEmptyState from '@/labs/listEditor/internal/LeEmptyState.vue'\nimport LeStatus from '@/labs/listEditor/internal/LeStatus.vue'\nimport LeUnsavedLabel from '@/labs/listEditor/internal/LeUnsavedLabel.vue'\nimport LeDragHandle from '@/labs/listEditor/internal/LeDragHandle.vue'\nimport {\n DRAG_GHOST_CLASS,\n DRAG_CHOSEN_CLASS,\n DRAG_CLASS,\n} from '@/labs/listEditor/internal/constants'\nimport { cloneDeep } from '@/utils/common'\nimport { stringToInt } from '@/utils/string'\nimport type {\n ListEditorKey,\n ListEditorValidationState,\n ListViewItem,\n PositionHint,\n} from '@/labs/listEditor/types/listEditorTypes'\n\nexport interface DecoratedViewItem<T> extends ListViewItem<T> {\n editing: boolean\n expanded: boolean\n loading: boolean\n dirty: boolean\n moved: boolean\n unsaved: boolean\n canMoveUp: boolean\n canMoveDown: boolean\n}\n\nexport type ReorderMode = 'view' | 'reorder'\n\n// Public slot scope shapes — see AListEditor for the rationale on hoisting.\nexport interface RowActions<TItem> {\n edit: () => void\n save: () => Promise<void> | void\n cancel: () => void\n close: () => void\n delete: () => Promise<void>\n addAfter: () => void\n toggleExpand: () => void\n moveUp: () => void\n moveDown: () => void\n moveTop: () => void\n moveBottom: () => void\n update: (data: TItem) => TItem[]\n}\nexport interface RowSlotProps<TItem extends Record<string, any>> {\n item: DecoratedViewItem<TItem> & { validationState: ListEditorValidationState }\n raw: TItem\n index: number\n key: ListEditorKey\n readonly: boolean\n disabled: boolean\n expanded: boolean\n editing: boolean\n dirty: boolean\n unsaved: boolean\n reorderMode: boolean\n moved: boolean\n canMoveUp: boolean\n canMoveDown: boolean\n touch: boolean\n actions: RowActions<TItem>\n}\nexport interface ToolbarSlotProps {\n applying: boolean\n hasPendingChanges: boolean\n movedCount: number\n error: string | null\n actions: { apply: () => Promise<void>; cancel: () => void }\n}\nexport interface ReorderToggleSlotProps {\n mode: ReorderMode\n disabled: boolean\n hasPendingChanges: boolean\n actions: { enterReorderMode: () => void; exitReorderMode: () => void }\n}\nexport interface HeaderSlotProps extends ReorderToggleSlotProps {\n title: string | null\n}\nexport interface EmptySlotProps {\n readonly: boolean\n disabled: boolean\n actions: { add: () => void }\n}\nexport interface AddButtonSlotProps {\n readonly: boolean\n disabled: boolean\n props: { onClick: () => void }\n actions: { add: () => void }\n}\nexport interface ViewBodySlotProps<TItem extends Record<string, any>> {\n items: TItem[]\n mode: ReorderMode\n actions: { enterReorderMode: () => void }\n}\n\nexport interface Props<TItem extends Record<string, any>> {\n keyField?: string\n positionField?: string\n positionMultiplier?: number\n updatePosition?: boolean\n\n readonly?: boolean\n disabled?: boolean\n loading?: boolean\n error?: string | null\n\n title?: string | null\n\n compactField?: string | null\n statusField?: string | null\n twoRows?: 'never' | 'mobile' | 'always'\n chips?: boolean\n\n showAddButton?: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n showAddAfterAction?: boolean\n\n addLabel?: string | null\n emptyTitle?: string | null\n emptyText?: string | null\n\n disableRowClick?: boolean\n disableDeleteConfirm?: boolean\n deleteConfirmTitle?: string | null\n deleteConfirmText?: string | null\n\n closeVariant?: 'auto' | 'icon' | 'labeled'\n\n loadingKeys?: Set<ListEditorKey> | null\n\n showReorderToggle?: boolean\n disableReorder?: boolean\n disableDrag?: boolean\n showMoveToPosition?: boolean\n\n /**\n * Embedded mode — this editor is nested inside another editor's `#item`\n * slot and follows a shared `v-model:mode` from the outer editor. When\n * set, the editor:\n * - hides its own Reorder button + Cancel/Apply toolbar\n * - skips the snapshot/restore (the outer editor's deep snapshot covers\n * nested data, so cancel at the top reverts everything)\n * - paints lighter chrome so it visually reads as part of the parent row\n * Pair with `v-model:mode` bound to the same ref the outer editor uses.\n */\n embedded?: boolean\n /**\n * Allow rows to remain inline-editable while the editor is in reorder\n * mode. By default, entering reorder closes any open inline edit and the\n * `#item` slot body is hidden — this keeps the visual focus on dragging.\n * Set this when the open row's body needs to render in reorder mode (e.g.\n * the parent editor of a shared-reorder pair, where the open question\n * exposes its embedded answers list for dragging).\n */\n allowEditInReorder?: boolean\n\n getValidationState?: (item: TItem, key: ListEditorKey, index: number) => ListEditorValidationState\n\n onDeleteConfirm?: (item: TItem) => Promise<boolean> | boolean\n onDelete?: (item: TItem) => Promise<void> | void\n onItemSave?: (item: TItem) => Promise<void> | void\n onReorderApply?: (items: TItem[]) => Promise<void> | void\n}\n\nconst props = withDefaults(defineProps<Props<TItem>>(), {\n keyField: 'id',\n positionField: 'position',\n positionMultiplier: 1,\n updatePosition: false,\n readonly: false,\n disabled: false,\n loading: false,\n error: null,\n title: null,\n compactField: null,\n statusField: null,\n twoRows: 'never',\n chips: false,\n showAddButton: true,\n showDeleteButton: true,\n showEditButton: true,\n showAddAfterAction: false,\n addLabel: null,\n emptyTitle: null,\n emptyText: null,\n disableRowClick: false,\n disableDeleteConfirm: false,\n deleteConfirmTitle: null,\n deleteConfirmText: null,\n closeVariant: 'auto',\n loadingKeys: null,\n showReorderToggle: true,\n disableReorder: false,\n disableDrag: false,\n showMoveToPosition: false,\n embedded: false,\n allowEditInReorder: false,\n getValidationState: undefined,\n onDeleteConfirm: undefined,\n onDelete: undefined,\n onItemSave: undefined,\n onReorderApply: undefined,\n})\n\nconst emit = defineEmits<{\n add: [positionHint: PositionHint | undefined]\n edit: [item: ListViewItem<TItem>]\n deleted: [item: ListViewItem<TItem>]\n close: [item: ListViewItem<TItem>]\n 'item-saved': [item: ListViewItem<TItem>]\n 'item-expand': [item: ListViewItem<TItem>, expanded: boolean]\n 'reorder-start': []\n 'reorder-cancel': []\n 'reorder-applied': [items: TItem[]]\n 'reorder-apply-error': [error: unknown]\n 'reorder-end': []\n}>()\n\ndefineSlots<{\n header?: (props: HeaderSlotProps) => unknown\n 'reorder-toggle'?: (props: ReorderToggleSlotProps) => unknown\n 'reorder-toolbar'?: (props: ToolbarSlotProps) => unknown\n empty?: (props: EmptySlotProps) => unknown\n 'add-button'?: (props: AddButtonSlotProps) => unknown\n 'view-body'?: (props: ViewBodySlotProps<TItem>) => unknown\n item?: (props: RowSlotProps<TItem>) => unknown\n 'item-compact'?: (props: RowSlotProps<TItem>) => unknown\n 'item-readonly'?: (props: RowSlotProps<TItem>) => unknown\n 'item-status'?: (props: RowSlotProps<TItem>) => unknown\n 'item-actions'?: (props: RowSlotProps<TItem>) => unknown\n 'item-footer'?: (props: RowSlotProps<TItem>) => unknown\n 'before-item'?: (props: RowSlotProps<TItem>) => unknown\n 'after-item'?: (props: RowSlotProps<TItem>) => unknown\n}>()\n\nconst modelValue = defineModel<TItem[]>({ required: true })\nconst mode = defineModel<ReorderMode>('mode', { default: 'view' })\n\nconst { t } = useI18n()\nconst slots = useSlots()\nconst display = useDisplay()\n\nconst rootEl = useTemplateRef<HTMLElement>('rootEl')\nconst { isNarrow } = useContainerWidth(rootEl)\n\nconst isTouch = computed<boolean>(() => display.platform.value.touch)\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst editor = useListEditor<TItem>(modelValue, {\n keyField: props.keyField,\n positionField: props.positionField,\n positionMultiplier: props.positionMultiplier,\n updatePosition: props.updatePosition,\n})\n\nconst expandedKeys = ref<Set<ListEditorKey>>(new Set())\n\n// Initial snapshot of each item, keyed by row key. Compared against current data to\n// detect \"dirty\" (unsaved) rows. Reset externally after a successful parent-form save.\n// `position` is deliberately stripped out: drag-drop rewrites it on every row\n// whose flat index shifts as a side-effect, and flagging those unmoved rows\n// as dirty would paint ghost \"unsaved\" markers. The per-row visual cue is\n// what matters; position data still flows to the parent on apply.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { captureDirtyBaseline, rebaselineKey, isItemDirty } = useDirtyBaseline<TItem>(\n () =>\n modelValue.value.map((item) => ({\n key: item[props.keyField] as ListEditorKey,\n data: item,\n })),\n { excludeFields: [props.positionField] },\n)\n\n// Keys the user has actively moved during this reorder session. Clearing\n// this set is part of \"mark current data as saved\" — paired with\n// captureDirtyBaseline in the exposed resetDirtyBaseline so the orange\n// badges go away when consumers confirm a server save.\nconst movedKeys = ref<Set<ListEditorKey>>(new Set())\n\nconst resetDirtyBaseline = () => {\n captureDirtyBaseline()\n movedKeys.value = new Set()\n}\n\nconst snapshot = shallowRef<TItem[] | null>(null)\n\nconst rowsContainer = useTemplateRef<HTMLElement>('rowsContainer')\n\nconst isInlineEdit = computed(() => !props.chips && !!slots.item)\nconst hasReadonlyDetail = computed(() => !props.chips && !!slots['item-readonly'])\n\nconst {\n editingKeys,\n editingSnapshots,\n clearEditing,\n beginEdit,\n cancelEdit,\n commitEdit,\n closeEdit,\n requestAutoOpen,\n} = useInlineEditing<TItem, ListViewItem<TItem>>({\n rowsContainer,\n rowSelector: '.a-le-row',\n isInlineEdit,\n restoreSnapshot: (key, data) => editor.updateItem(key, data),\n watchKeys: () => modelValue.value.map((it) => it[props.keyField] as ListEditorKey),\n findEntry: (key) => {\n const hit = modelValue.value.find((it) => (it[props.keyField] as ListEditorKey) === key)\n return hit ? { data: hit } : null\n },\n afterAutoOpen: (key) => {\n expandedKeys.value.delete(key)\n },\n})\n\nconst canInteract = computed(() => !props.readonly && !props.disabled && !props.loading)\nconst canEnterReorder = computed(\n () => canInteract.value && !props.disableReorder && modelValue.value.length > 1,\n)\n\nconst embeddedRef = computed(() => props.embedded)\nconst allowEditInReorderRef = computed(() => props.allowEditInReorder)\n\nconst {\n applying,\n applyError,\n hasPendingChanges,\n movedCount,\n reorderMode,\n enterReorderMode,\n cancelReorderMode,\n applyReorder,\n} = useReorderMode<TItem[]>({\n mode,\n snapshot,\n movedKeys,\n modelValue,\n cloneModel: (m) => cloneDeep(m) as TItem[],\n applyModel: (m) => {\n modelValue.value = m\n },\n canEnterReorder,\n embedded: embeddedRef,\n onEnter: () => {\n if (!allowEditInReorderRef.value) {\n clearEditing()\n expandedKeys.value.clear()\n }\n },\n onExternalEnter: () => {\n if (!allowEditInReorderRef.value) {\n clearEditing()\n expandedKeys.value.clear()\n }\n },\n onReorderApply: (items) => props.onReorderApply?.(items),\n emit: {\n reorderStart: () => emit('reorder-start'),\n reorderCancel: () => emit('reorder-cancel'),\n reorderApplied: (payload) => emit('reorder-applied', payload),\n reorderApplyError: (err) => emit('reorder-apply-error', err),\n reorderEnd: () => emit('reorder-end'),\n },\n})\n\n// Cross-editor pending-changes aggregation. When this editor is the outer\n// (non-embedded) one in a stacked-editor setup, it provides a registry that\n// embedded children push their own movedCount + hasPendingChanges into.\n// The toolbar's \"N pending changes\" then totals across all levels — drag a\n// question OR drag an answer inside an open question and the same counter\n// increments either way. When this editor IS embedded, it injects the\n// nearest parent's registry and registers itself.\n// shallowReactive (not reactive) so the stored ComputedRef objects don't get\n// auto-unwrapped — we read `.value` on them inside the aggregator computeds.\n// `embedded` is a setup-time decision; it doesn't flip during a component's\n// lifetime so reading it once at root scope is intentional.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst childContributions = props.embedded\n ? null\n : shallowReactive(\n new Map<symbol, { count: ComputedRef<number>; hasChanges: ComputedRef<boolean> }>(),\n )\n\nif (childContributions) {\n const registry: SharedReorderRegistry = {\n register: (id, count, hasChanges) => {\n childContributions.set(id, { count, hasChanges })\n },\n unregister: (id) => {\n childContributions.delete(id)\n },\n }\n provide(SharedReorderRegistryKey, registry)\n}\n\nif (props.embedded) {\n const parent = inject(SharedReorderRegistryKey, null)\n if (parent) {\n const id = Symbol('le.embedded')\n parent.register(id, movedCount, hasPendingChanges)\n onBeforeUnmount(() => parent.unregister(id))\n }\n}\n\nconst totalMovedCount = computed<number>(() => {\n let sum = movedCount.value\n if (childContributions) {\n for (const c of childContributions.values()) sum += c.count.value\n }\n return sum\n})\n\nconst totalHasPendingChanges = computed<boolean>(() => {\n if (hasPendingChanges.value) return true\n if (childContributions) {\n for (const c of childContributions.values()) {\n if (c.hasChanges.value) return true\n }\n }\n return false\n})\n\nconst canAdd = computed(() => canInteract.value && props.showAddButton && !reorderMode.value)\n// Chips mode keeps drag always-on (no mode toggle) on non-touch devices.\nconst dragEnabled = computed(\n () => (reorderMode.value || props.chips) && !isTouch.value && !props.disableDrag,\n)\n\nconst addLabelResolved = computed(() => props.addLabel ?? t('common.sortable.add'))\nconst emptyTitleResolved = computed(() => props.emptyTitle ?? t('common.sortable.emptyTitle'))\nconst emptyTextResolved = computed(() => props.emptyText ?? t('common.sortable.emptyText'))\nconst deleteConfirmTitleResolved = computed(\n () => props.deleteConfirmTitle ?? t('common.sortable.deleteConfirmTitle'),\n)\nconst deleteConfirmTextResolved = computed(\n () => props.deleteConfirmText ?? t('common.sortable.deleteConfirmText'),\n)\n\nconst reorderToggleVisible = computed<boolean>(\n (): boolean =>\n !props.chips &&\n !props.embedded &&\n props.showReorderToggle &&\n !reorderMode.value &&\n modelValue.value.length > 0,\n)\n\n// When there IS a title and viewport is narrow, the reorder button shrinks to an\n// icon-only round button to keep the single-line header from overflowing.\nconst compactReorderButton = computed<boolean>((): boolean => !!props.title && isNarrow.value)\n\nconst headerVisible = computed<boolean>(\n (): boolean =>\n !!(\n props.title ||\n slots.header ||\n slots['reorder-toggle'] ||\n reorderToggleVisible.value ||\n (reorderMode.value && !props.embedded)\n ),\n)\n\n// Editor band-only header — true when the only thing in the header is the\n// reorder button (no title, no slot). Lets the template float the button\n// over the editor's top-right corner instead of reserving an empty band.\nconst headerHasContent = computed<boolean>(\n (): boolean =>\n !!(\n props.title ||\n slots.header ||\n slots['reorder-toggle'] ||\n slots['view-body'] ||\n (reorderMode.value && !props.embedded)\n ),\n)\n\n// Per-row edit footer (Save + Cancel) is only meaningful if the consumer wants a\n// per-item persist callback. Without it the expectation is that the parent form's\n// global save flushes everything, so we hide the per-row buttons by default.\nconst showInlineSaveFooter = computed(() => !!props.onItemSave)\n\n// Tracks only rows the user actively moved (drag, arrow buttons) — snapshot\n// vs current-index diffing would also flag side-effect index shifts, which\n// isn't what the user means by \"unsaved\".\nconst markMoved = (key: ListEditorKey) => {\n movedKeys.value.add(key)\n}\n\n// Decoupled dirty pass — see AListEditor for rationale.\nconst dirtyKeys = computed<Set<ListEditorKey>>(() => {\n const out = new Set<ListEditorKey>()\n for (const item of modelValue.value) {\n const key = item[props.keyField] as ListEditorKey\n if (isItemDirty(key, item)) out.add(key)\n }\n return out\n})\n\n// Per-key decorator cache — see AListEditor for rationale.\nconst decoratorCache = new Map<ListEditorKey, DecoratedViewItem<TItem>>()\nconst viewItemsDecorated = computed<DecoratedViewItem<TItem>[]>(() => {\n const total = modelValue.value.length\n const next: DecoratedViewItem<TItem>[] = []\n const liveKeys = new Set<ListEditorKey>()\n for (const vi of editor.viewItems.value) {\n liveKeys.add(vi.key)\n const editing = editingKeys.value.has(vi.key)\n const expanded = expandedKeys.value.has(vi.key)\n const loading = props.loadingKeys?.has(vi.key) ?? false\n const moved = movedKeys.value.has(vi.key)\n const dirty = dirtyKeys.value.has(vi.key)\n const unsaved = dirty || moved\n const canMoveUp = vi.index > 0\n const canMoveDown = vi.index < total - 1\n const cached = decoratorCache.get(vi.key)\n if (\n cached &&\n cached.raw === vi.raw &&\n cached.index === vi.index &&\n cached.position === vi.position &&\n cached.editing === editing &&\n cached.expanded === expanded &&\n cached.loading === loading &&\n cached.dirty === dirty &&\n cached.moved === moved &&\n cached.unsaved === unsaved &&\n cached.canMoveUp === canMoveUp &&\n cached.canMoveDown === canMoveDown\n ) {\n next.push(cached)\n continue\n }\n const decorated: DecoratedViewItem<TItem> = {\n ...vi,\n editing,\n expanded,\n loading,\n dirty,\n moved,\n unsaved,\n canMoveUp,\n canMoveDown,\n }\n decoratorCache.set(vi.key, decorated)\n next.push(decorated)\n }\n for (const key of decoratorCache.keys()) {\n if (!liveKeys.has(key)) decoratorCache.delete(key)\n }\n return next\n})\n\nconst isEmpty = computed(() => viewItemsDecorated.value.length === 0)\n\nconst findVi = (key: ListEditorKey): DecoratedViewItem<TItem> | undefined =>\n viewItemsDecorated.value.find((v) => v.key === key)\n\nconst keyboardNav = useKeyboardNav({\n viewItems: computed(() => viewItemsDecorated.value.map((vi) => ({ key: vi.key }))),\n variant: 'sortable',\n isReorderMode: reorderMode,\n disabled: computed(() => !canInteract.value),\n isEditing: (key) => editingKeys.value.has(key),\n onToggleEdit: (key) => {\n const vi = findVi(key)\n if (vi) onEditClick(vi)\n },\n onCancelEdit: (key) => {\n const vi = findVi(key)\n if (vi) onCloseClick(vi)\n },\n onMoveUp: (key) => {\n const vi = findVi(key)\n if (vi) moveUp(vi.index)\n },\n onMoveDown: (key) => {\n const vi = findVi(key)\n if (vi) moveDown(vi.index)\n },\n onMoveTop: (key) => {\n const vi = findVi(key)\n if (vi) moveTop(vi.index)\n },\n onMoveBottom: (key) => {\n const vi = findVi(key)\n if (vi) moveBottom(vi.index)\n },\n onCancelReorder: () => cancelReorderMode(),\n})\n\nconst moveToPositionDialogOpen = ref<boolean>(false)\nconst moveToPositionTarget = shallowRef<DecoratedViewItem<TItem> | null>(null)\nconst moveToPositionLabel = computed<string>(() =>\n moveToPositionTarget.value\n ? resolveCompactText(moveToPositionTarget.value.raw, moveToPositionTarget.value.key)\n : '',\n)\nconst openMoveToPosition = (vi: DecoratedViewItem<TItem>) => {\n if (!props.showMoveToPosition) return\n moveToPositionTarget.value = vi\n moveToPositionDialogOpen.value = true\n}\nconst onMoveToPositionConfirm = (newIndex: number) => {\n const target = moveToPositionTarget.value\n moveToPositionTarget.value = null\n if (!target) return\n if (newIndex === target.index) return\n editor.moveItem(target.index, newIndex)\n markMoved(target.key)\n}\n\nconst resolveCompactText = (raw: TItem, key: ListEditorKey): string =>\n resolveCompactTextUtil(raw, key, {\n compactField: props.compactField,\n fallback: t('common.sortable.itemFallback'),\n })\n\nconst { resolveValidation } = useValidationRegistry<TItem>({\n getValidationState: (item, key, index) => props.getValidationState?.(item, key, index) ?? null,\n})\n\n// Skip SortableJS entirely on touch devices — touch users reorder via arrows + menu,\n// so the drag/drop library is never needed and there is no point paying its setup cost.\n// The one-shot reads below are intentional: touch detection is fixed at setup time,\n// and dragEnabled's initial value seeds SortableJS; later changes flow via the watch.\n/* eslint-disable vue/no-ref-object-reactivity-loss */\nif (!isTouch.value) {\n const sortable = useSortable(rowsContainer, modelValue, {\n // The rows container can mount/unmount across mode flips (e.g. when the\n // consumer renders a `#view-body` slot in view mode and the rows are\n // only mounted in reorder mode). vueuse's default `tryOnMounted` fires\n // exactly once and would bind to a null ref, leaving SortableJS dead.\n // `watchElement: true` re-initialises whenever the rows container ref\n // populates.\n watchElement: true,\n handle: '.a-le-drag-handle',\n animation: 150,\n // Force the fallback renderer so `dragClass` is applied to a CSS-controlled\n // clone that follows the cursor — gives us a custom, row-shaped ghost\n // instead of the opaque browser-native drag bitmap.\n forceFallback: true,\n fallbackTolerance: 3,\n fallbackOnBody: true,\n ghostClass: DRAG_GHOST_CLASS,\n chosenClass: DRAG_CHOSEN_CLASS,\n dragClass: DRAG_CLASS,\n disabled: !dragEnabled.value,\n onEnd: (event) => {\n // Resolve which row was dragged by reading its data-id attribute\n // (set via template binding on .row). SortableJS's `event.item` is\n // the moved DOM element; we only mark that one specific key as moved\n // rather than diffing the whole list, so siblings that shifted index\n // as a side-effect stay clean.\n const el = event.item as HTMLElement\n const raw = el.getAttribute('data-id')\n if (raw !== null && raw !== '') {\n const n = stringToInt(raw)\n const key: ListEditorKey = n > 0 ? n : raw\n markMoved(key)\n }\n if (props.updatePosition) {\n modelValue.value = editor.recalculatePositions(modelValue.value) as TItem[]\n }\n },\n })\n\n watch(dragEnabled, (enabled) => {\n sortable.option('disabled', !enabled)\n })\n}\n/* eslint-enable vue/no-ref-object-reactivity-loss */\n\nconst onAddClick = () => {\n if (!canAdd.value) return\n requestAutoOpen()\n emit('add', undefined)\n}\n\nconst onRowAddAfterClick = (vi: ListViewItem<TItem>) => {\n if (!canInteract.value) return\n requestAutoOpen()\n emit('add', { afterId: vi.key })\n}\n\nconst onEditClick = (vi: ListViewItem<TItem>) => {\n if (!canInteract.value) return\n if (reorderMode.value && !props.allowEditInReorder) return\n // Toggle: clicking edit while already editing closes the form, matching the\n // row-header click behaviour.\n if (editingKeys.value.has(vi.key)) {\n onCloseClick(vi)\n return\n }\n if (isInlineEdit.value) {\n beginEdit(vi)\n expandedKeys.value.delete(vi.key)\n }\n emit('edit', vi)\n}\n\nconst onExpandClick = (vi: ListViewItem<TItem>) => {\n if (props.disabled || props.loading) return\n if (reorderMode.value && !props.allowEditInReorder) return\n const key = vi.key\n const currentlyExpanded = expandedKeys.value.has(key)\n if (currentlyExpanded) {\n expandedKeys.value.delete(key)\n } else {\n for (const k of expandedKeys.value) expandedKeys.value.delete(k)\n expandedKeys.value.add(key)\n }\n emit('item-expand', vi, !currentlyExpanded)\n}\n\nconst isRowClickable = (vi: DecoratedViewItem<TItem>): boolean => {\n if (props.chips) return false\n if (props.disableRowClick) return false\n if (props.disabled || props.loading) return false\n if (reorderMode.value && !props.allowEditInReorder) return false\n if (vi.editing || vi.expanded) return true\n if (!props.readonly && props.showEditButton) return true\n if (props.readonly && hasReadonlyDetail.value) return true\n return false\n}\n\nconst onRowClick = (vi: DecoratedViewItem<TItem>) => {\n if (!isRowClickable(vi)) return\n if (vi.editing || vi.expanded) {\n onCloseClick(vi)\n return\n }\n if (props.readonly && hasReadonlyDetail.value) {\n onExpandClick(vi)\n } else {\n onEditClick(vi)\n }\n}\n\nconst {\n deleteDialog,\n deleteInFlight,\n deleteError,\n onDeleteClick: triggerDeleteClick,\n onDeleteDialogConfirm,\n onDeleteDialogCancel,\n} = useDeleteDialog<TItem, ListViewItem<TItem>>({\n onDeleteConfirm: (raw) => (props.onDeleteConfirm ? props.onDeleteConfirm(raw) : true),\n onDelete: (raw) => props.onDelete?.(raw),\n onDeleted: (vi) => {\n editor.deleteItem(vi.key)\n editingKeys.value.delete(vi.key)\n editingSnapshots.value.delete(vi.key)\n expandedKeys.value.delete(vi.key)\n emit('deleted', vi)\n },\n disableDeleteConfirm: () => props.disableDeleteConfirm || props.chips,\n})\n\nconst onDeleteClick = async (vi: ListViewItem<TItem>) => {\n if (!canInteract.value) return\n await triggerDeleteClick(vi)\n}\n\nconst onSaveClick = async (vi: ListViewItem<TItem>) => {\n if (props.onItemSave) {\n await props.onItemSave(vi.raw)\n }\n commitEdit(vi)\n emit('item-saved', vi)\n}\n\nconst onCancelClick = (vi: ListViewItem<TItem>) => {\n cancelEdit(vi)\n}\n\nconst onCloseClick = (vi: ListViewItem<TItem>) => {\n closeEdit(vi)\n expandedKeys.value.delete(vi.key)\n emit('close', vi)\n}\n\nconst keyAtIndex = (idx: number): ListEditorKey | null => {\n const item = modelValue.value[idx]\n if (!item) return null\n return item[props.keyField] as ListEditorKey\n}\n\nconst moveUp = (idx: number) => {\n if (idx <= 0) return\n const key = keyAtIndex(idx)\n editor.moveItem(idx, idx - 1)\n if (key !== null) markMoved(key)\n}\nconst moveDown = (idx: number) => {\n if (idx >= modelValue.value.length - 1) return\n const key = keyAtIndex(idx)\n editor.moveItem(idx, idx + 1)\n if (key !== null) markMoved(key)\n}\nconst moveTop = (idx: number) => {\n if (idx <= 0) return\n const key = keyAtIndex(idx)\n editor.moveItem(idx, 0)\n if (key !== null) markMoved(key)\n}\nconst moveBottom = (idx: number) => {\n if (idx >= modelValue.value.length - 1) return\n const key = keyAtIndex(idx)\n editor.moveItem(idx, modelValue.value.length - 1)\n if (key !== null) markMoved(key)\n}\n\n// Per-key actions cache: stable identity per row, see equivalent block in\n// AListEditor for rationale. Closures capture key (stable) and look up the\n// current vi via findVi at call time.\ntype ActionsBundle = {\n edit: () => void\n save: () => Promise<void> | void\n cancel: () => void\n close: () => void\n delete: () => Promise<void>\n addAfter: () => void\n toggleExpand: () => void\n moveUp: () => void\n moveDown: () => void\n moveTop: () => void\n moveBottom: () => void\n update: (data: TItem) => TItem[]\n}\nconst actionsCache = new Map<ListEditorKey, ActionsBundle>()\nconst getActions = (key: ListEditorKey): ActionsBundle => {\n let actions = actionsCache.get(key)\n if (!actions) {\n actions = {\n edit: () => {\n const vi = findVi(key)\n if (vi) onEditClick(vi)\n },\n save: () => {\n const vi = findVi(key)\n if (vi) return onSaveClick(vi)\n },\n cancel: () => {\n const vi = findVi(key)\n if (vi) onCancelClick(vi)\n },\n close: () => {\n const vi = findVi(key)\n if (vi) onCloseClick(vi)\n },\n delete: async () => {\n const vi = findVi(key)\n if (vi) await onDeleteClick(vi)\n },\n addAfter: () => {\n const vi = findVi(key)\n if (vi) onRowAddAfterClick(vi)\n },\n toggleExpand: () => {\n const vi = findVi(key)\n if (vi) onExpandClick(vi)\n },\n moveUp: () => {\n const vi = findVi(key)\n if (vi) moveUp(vi.index)\n },\n moveDown: () => {\n const vi = findVi(key)\n if (vi) moveDown(vi.index)\n },\n moveTop: () => {\n const vi = findVi(key)\n if (vi) moveTop(vi.index)\n },\n moveBottom: () => {\n const vi = findVi(key)\n if (vi) moveBottom(vi.index)\n },\n update: (data: TItem) => editor.updateItem(key, data),\n }\n actionsCache.set(key, actions)\n }\n return actions\n}\nwatch(\n () => viewItemsDecorated.value,\n (now) => {\n if (actionsCache.size === 0) return\n const liveKeys = new Set(now.map((v) => v.key))\n for (const key of actionsCache.keys()) {\n if (!liveKeys.has(key)) actionsCache.delete(key)\n }\n },\n)\n\nconst buildSlotProps = (vi: DecoratedViewItem<TItem>) => ({\n item: { ...vi, validationState: resolveValidation(vi.raw as TItem, vi.key, vi.index) },\n raw: vi.raw,\n index: vi.index,\n key: vi.key,\n readonly: props.readonly,\n disabled: props.disabled,\n expanded: vi.expanded,\n editing: vi.editing,\n dirty: vi.dirty,\n unsaved: vi.unsaved,\n reorderMode: reorderMode.value,\n moved: vi.moved,\n canMoveUp: vi.canMoveUp,\n canMoveDown: vi.canMoveDown,\n touch: isTouch.value,\n actions: getActions(vi.key),\n})\n\nconst toolbarSlotProps = computed(() => ({\n applying: applying.value,\n hasPendingChanges: totalHasPendingChanges.value,\n movedCount: totalMovedCount.value,\n error: applyError.value,\n actions: {\n apply: applyReorder,\n cancel: cancelReorderMode,\n },\n}))\n\nconst reorderToggleSlotProps = computed(() => ({\n mode: mode.value,\n disabled: !canEnterReorder.value,\n hasPendingChanges: totalHasPendingChanges.value,\n actions: {\n enterReorderMode,\n exitReorderMode: cancelReorderMode,\n },\n}))\n\nconst unsavedKeysModel = defineModel<Set<ListEditorKey>>('unsavedKeys', {\n default: () => new Set<ListEditorKey>(),\n})\n\nconst internalUnsavedKeys = computed<Set<ListEditorKey>>(() => {\n const out = new Set<ListEditorKey>()\n for (const vi of viewItemsDecorated.value) {\n if (vi.unsaved) out.add(vi.key)\n }\n return out\n})\n\nconst { hasUnsavedChanges, unsavedCount, clearUnsavedState } = useUnsavedKeysSync({\n unsavedKeysModel,\n internalUnsavedKeys,\n onClearAll: () => {\n captureDirtyBaseline()\n movedKeys.value = new Set()\n },\n onClearKey: (key) => {\n rebaselineKey(key)\n movedKeys.value.delete(key)\n },\n})\n\ndefineExpose({\n addItem: editor.addItem,\n deleteItem: editor.deleteItem,\n updateItem: editor.updateItem,\n moveItem: editor.moveItem,\n recalculatePositions: editor.recalculatePositions,\n viewItems: editor.viewItems,\n resetDirtyBaseline,\n hasUnsavedChanges,\n unsavedCount,\n clearUnsavedState,\n enterReorderMode,\n cancelReorderMode,\n applyReorder,\n})\n</script>\n\n<template>\n <div\n ref=\"rootEl\"\n class=\"a-sortable-list-editor\"\n :class=\"[\n `a-sortable-list-editor--two-rows-${twoRows}`,\n `a-sortable-list-editor--mode-${mode}`,\n {\n 'a-sortable-list-editor--readonly': readonly,\n 'a-sortable-list-editor--disabled': disabled,\n 'a-sortable-list-editor--touch': isTouch,\n 'a-sortable-list-editor--drag-enabled': dragEnabled,\n 'a-sortable-list-editor--chips': chips,\n 'a-sortable-list-editor--embedded': embedded,\n 'a-sortable-list-editor--header-floating':\n !embedded && !chips && !headerHasContent && headerVisible,\n },\n ]\"\n >\n <div class=\"a-le-card\">\n <div\n v-if=\"headerVisible\"\n class=\"a-le-header\"\n >\n <slot\n name=\"header\"\n :title=\"title\"\n v-bind=\"reorderToggleSlotProps\"\n >\n <h3\n v-if=\"title\"\n class=\"a-le-title-heading\"\n >\n {{ title }}\n </h3>\n <div class=\"a-le-header-actions\">\n <template v-if=\"reorderMode && !embedded\">\n <!-- Reorder-mode header: pending-changes count + Cancel/Apply.\n Replaces the old sticky bottom toolbar — the actions sit\n where the \"Reorder\" button lives in view mode. -->\n <slot\n name=\"reorder-toolbar\"\n v-bind=\"toolbarSlotProps\"\n >\n <LeStatus\n :class=\"{ 'a-le-toolbar-status--pending': totalHasPendingChanges }\"\n :has-pending-changes=\"totalHasPendingChanges\"\n :pending-count=\"totalMovedCount\"\n :error=\"applyError\"\n />\n <VBtn\n variant=\"text\"\n size=\"small\"\n :disabled=\"applying\"\n @click=\"cancelReorderMode\"\n >\n {{ t('common.sortable.reorderCancel') }}\n </VBtn>\n <VBtn\n color=\"primary\"\n variant=\"flat\"\n size=\"small\"\n prepend-icon=\"mdi-check\"\n :loading=\"applying\"\n :disabled=\"applying || !totalHasPendingChanges\"\n @click=\"applyReorder\"\n >\n {{ t('common.sortable.reorderApply') }}\n </VBtn>\n </slot>\n </template>\n <slot\n v-else-if=\"reorderToggleVisible\"\n name=\"reorder-toggle\"\n v-bind=\"reorderToggleSlotProps\"\n >\n <VBtn\n v-if=\"compactReorderButton\"\n variant=\"tonal\"\n color=\"primary\"\n icon\n size=\"x-small\"\n :disabled=\"!canEnterReorder\"\n @click=\"enterReorderMode\"\n >\n <VIcon\n icon=\"mdi-sort\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.reorder')\"\n />\n </VBtn>\n <VBtn\n v-else\n variant=\"tonal\"\n color=\"primary\"\n prepend-icon=\"mdi-sort\"\n size=\"small\"\n :disabled=\"!canEnterReorder\"\n @click=\"enterReorderMode\"\n >\n {{ t('common.sortable.reorder') }}\n </VBtn>\n </slot>\n </div>\n </slot>\n </div>\n\n <div\n v-if=\"loading\"\n class=\"a-le-state a-le-state--loading\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n size=\"32\"\n />\n </div>\n\n <div\n v-else-if=\"error\"\n class=\"a-le-state a-le-state--error\"\n >\n <VAlert\n type=\"error\"\n variant=\"tonal\"\n density=\"compact\"\n border=\"start\"\n >\n {{ error }}\n </VAlert>\n </div>\n\n <div\n v-else-if=\"!reorderMode && $slots['view-body']\"\n class=\"a-le-view-body\"\n >\n <slot\n name=\"view-body\"\n :items=\"modelValue\"\n :mode=\"mode\"\n :actions=\"{ enterReorderMode }\"\n />\n </div>\n\n <div\n v-else-if=\"isEmpty\"\n class=\"a-le-state a-le-state--empty\"\n >\n <slot\n name=\"empty\"\n :readonly=\"readonly\"\n :disabled=\"disabled\"\n :actions=\"{ add: onAddClick }\"\n >\n <LeEmptyState\n :title=\"emptyTitleResolved\"\n :text=\"emptyTextResolved\"\n :add-label=\"addLabelResolved\"\n :can-add=\"canAdd\"\n @add=\"onAddClick\"\n />\n </slot>\n </div>\n\n <div\n v-else\n ref=\"rowsContainer\"\n class=\"a-sortable-list-editor__rows\"\n >\n <div\n v-for=\"vi in viewItemsDecorated\"\n :key=\"String(vi.key)\"\n :data-id=\"String(vi.key)\"\n role=\"listitem\"\n :tabindex=\"keyboardNav.rowTabindex(vi.key)\"\n class=\"a-le-row\"\n :class=\"{\n 'a-le-row--two-rows': twoRows === 'always',\n 'a-le-row--editing': vi.editing,\n 'a-le-row--expanded': vi.expanded,\n 'a-le-row--unsaved': vi.unsaved,\n 'a-le-row--reorder': reorderMode,\n 'a-le-row--grabbed': keyboardNav.isGrabbed(vi.key),\n 'a-le-row--clickable': isRowClickable(vi),\n [`a-le-row--validation-${resolveValidation(vi.raw, vi.key, vi.index)}`]:\n resolveValidation(vi.raw, vi.key, vi.index) !== null,\n }\"\n @keydown=\"keyboardNav.handleKeydown(vi.key, $event)\"\n >\n <slot\n name=\"before-item\"\n v-bind=\"buildSlotProps(vi)\"\n />\n\n <div\n class=\"a-le-row-header\"\n @click=\"onRowClick(vi)\"\n >\n <LeDragHandle v-if=\"dragEnabled\" />\n\n <div class=\"a-le-row-main\">\n <slot\n name=\"item-compact\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <span class=\"a-le-title\">\n {{ resolveCompactText(vi.raw, vi.key) }}\n </span>\n </slot>\n <LeUnsavedLabel v-if=\"vi.unsaved\" />\n </div>\n\n <div\n v-if=\"!chips && !reorderMode\"\n class=\"a-le-status\"\n >\n <slot\n name=\"item-status\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <span\n v-if=\"statusField && vi.raw[statusField] != null && vi.raw[statusField] !== ''\"\n class=\"a-le-status-badge\"\n >\n {{ vi.raw[statusField] }}\n </span>\n </slot>\n </div>\n\n <div class=\"a-le-actions\">\n <slot\n name=\"item-actions\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <VBtn\n v-if=\"chips && showDeleteButton && canInteract\"\n icon\n size=\"x-small\"\n variant=\"text\"\n density=\"compact\"\n :active=\"false\"\n class=\"a-le-action a-le-action--chip-close\"\n @click.stop=\"onDeleteClick(vi)\"\n >\n <VIcon\n icon=\"mdi-close\"\n size=\"14\"\n />\n </VBtn>\n <template v-else-if=\"reorderMode\">\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :disabled=\"!vi.canMoveUp\"\n class=\"mx-1 a-le-action a-le-action--up\"\n @click.stop=\"moveUp(vi.index)\"\n >\n <VIcon\n icon=\"mdi-arrow-up\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.moveUp')\"\n />\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :disabled=\"!vi.canMoveDown\"\n class=\"mx-1 a-le-action a-le-action--down\"\n @click.stop=\"moveDown(vi.index)\"\n >\n <VIcon\n icon=\"mdi-arrow-down\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.moveDown')\"\n />\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :active=\"false\"\n class=\"mx-1 a-le-action a-le-action--menu\"\n >\n <VIcon\n icon=\"mdi-dots-vertical\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.more')\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem\n :disabled=\"!vi.canMoveUp\"\n @click.stop=\"moveTop(vi.index)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-arrow-collapse-up\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.moveToTop') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n :disabled=\"!vi.canMoveDown\"\n @click.stop=\"moveBottom(vi.index)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-arrow-collapse-down\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.moveToBottom') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-if=\"showMoveToPosition && viewItemsDecorated.length > 1\"\n @click.stop=\"openMoveToPosition(vi)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-target\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.moveToPosition.action') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-if=\"showAddAfterAction && canInteract\"\n @click.stop=\"onRowAddAfterClick(vi)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-plus\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.addAfter') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-if=\"showDeleteButton && canInteract\"\n @click.stop=\"onDeleteClick(vi)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-trash-can-outline\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.delete') }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </template>\n <template v-else>\n <VBtn\n v-if=\"showEditButton && canInteract\"\n icon\n size=\"small\"\n variant=\"tonal\"\n color=\"primary\"\n density=\"comfortable\"\n class=\"mx-1 a-le-action a-le-action--edit\"\n @click.stop=\"onEditClick(vi)\"\n >\n <VIcon\n icon=\"mdi-pencil-outline\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.edit')\"\n />\n </VBtn>\n <VBtn\n v-if=\"showDeleteButton && canInteract\"\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n class=\"mx-1 a-le-action a-le-action--delete\"\n @click.stop=\"onDeleteClick(vi)\"\n >\n <VIcon\n icon=\"mdi-trash-can-outline\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.delete')\"\n />\n </VBtn>\n <VBtn\n v-if=\"showAddAfterAction && canInteract\"\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :active=\"false\"\n class=\"mx-1 a-le-action a-le-action--menu\"\n >\n <VIcon\n icon=\"mdi-dots-vertical\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.more')\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem @click.stop=\"onRowAddAfterClick(vi)\">\n <template #prepend>\n <VIcon icon=\"mdi-plus\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.addAfter') }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </template>\n </slot>\n </div>\n </div>\n\n <template v-if=\"vi.editing && (allowEditInReorder || !reorderMode) && $slots.item\">\n <div class=\"a-le-row-body\">\n <div class=\"a-le-form\">\n <slot\n name=\"item\"\n v-bind=\"buildSlotProps(vi)\"\n />\n </div>\n </div>\n <slot\n name=\"item-footer\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <div\n v-if=\"showInlineSaveFooter && !reorderMode\"\n class=\"a-le-row-footer\"\n >\n <div class=\"a-le-row-footer-spacer\" />\n <VBtn\n variant=\"text\"\n :disabled=\"vi.loading\"\n @click.stop=\"onCancelClick(vi)\"\n >\n {{ t('common.button.cancel') }}\n </VBtn>\n <VBtn\n color=\"primary\"\n variant=\"flat\"\n prepend-icon=\"mdi-check\"\n :disabled=\"vi.loading\"\n @click.stop=\"onSaveClick(vi)\"\n >\n {{ t('common.button.save') }}\n </VBtn>\n </div>\n </slot>\n </template>\n\n <div\n v-else-if=\"\n vi.expanded && (allowEditInReorder || !reorderMode) && $slots['item-readonly']\n \"\n class=\"a-le-row-body\"\n >\n <div class=\"a-le-form\">\n <slot\n name=\"item-readonly\"\n v-bind=\"buildSlotProps(vi)\"\n />\n </div>\n </div>\n\n <slot\n name=\"after-item\"\n v-bind=\"buildSlotProps(vi)\"\n />\n </div>\n </div>\n\n <slot\n v-if=\"canAdd && !loading && !error && !isEmpty\"\n name=\"add-button\"\n :readonly=\"readonly\"\n :disabled=\"disabled\"\n :props=\"{ onClick: onAddClick }\"\n :actions=\"{ add: onAddClick }\"\n >\n <button\n type=\"button\"\n class=\"a-le-row-add\"\n @click=\"onAddClick\"\n >\n <VIcon\n icon=\"mdi-plus\"\n size=\"18\"\n />\n <span>{{ addLabelResolved }}</span>\n </button>\n </slot>\n </div>\n\n <LeMoveToPositionDialog\n v-model=\"moveToPositionDialogOpen\"\n :total=\"viewItemsDecorated.length\"\n :current-index=\"moveToPositionTarget?.index ?? 0\"\n :item-label=\"moveToPositionLabel\"\n @confirm=\"onMoveToPositionConfirm\"\n />\n\n <LeDeleteDialog\n v-model=\"deleteDialog\"\n :title=\"deleteConfirmTitleResolved\"\n :text=\"deleteConfirmTextResolved\"\n :confirm-label=\"t('common.sortable.delete')\"\n :cancel-label=\"t('common.button.cancel')\"\n :error=\"deleteError\"\n :in-flight=\"deleteInFlight\"\n @confirm=\"onDeleteDialogConfirm\"\n @cancel=\"onDeleteDialogCancel\"\n />\n\n <div\n class=\"a-le-sr-only\"\n aria-live=\"polite\"\n role=\"status\"\n >\n {{\n keyboardNav.grabbedKey.value !== null\n ? t('common.sortable.keyboardGrab.status', {\n n: keyboardNav.grabbedIndex.value + 1,\n total: keyboardNav.totalCount.value,\n })\n : ''\n }}\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use './styles/tokens';\n@use './styles/shared';\n\n// Variant-specific rules for ASortableListEditor — reorder-mode trims, drag\n// clone styling, chips flex-wrap layout, and the validation rail.\n.a-sortable-list-editor {\n &__rows {\n display: flex;\n flex-direction: column;\n }\n\n // View-mode body slot — gives the consumer's slot content breathing room\n // inside the editor card. Match the row's horizontal rhythm (~16 px) and\n // add a modest vertical inset so cards don't sit flush against the border.\n .a-le-view-body {\n padding: 12px 16px;\n }\n\n // Reorder-mode trims the row-header padding since the drag handle already\n // eats some of the horizontal rhythm.\n .a-le-row--reorder .a-le-row-header {\n padding-left: 12px;\n padding-right: 8px;\n gap: 8px;\n }\n\n // Drag rendering — SortableJS clone + ghost + chosen source.\n .a-le-row--ghost {\n opacity: 0.35;\n background: var(--le-primary-state);\n }\n\n .a-le-row--chosen {\n opacity: 0.5;\n }\n\n // Floating clone that follows the cursor. Row-shaped card with elevation;\n // action column and status badge hidden so the preview stays clean.\n .a-le-row--drag {\n background: var(--le-surface);\n border: 1px solid var(--le-border);\n border-radius: var(--le-radius);\n box-shadow: var(--le-elev-3);\n max-width: 420px;\n opacity: 0.96;\n pointer-events: none;\n }\n\n .a-le-row--drag .a-le-actions,\n .a-le-row--drag .a-le-status {\n display: none;\n }\n\n // Floating-header variant — when the only thing in the header is the\n // Reorder button, drop the band entirely and float the button absolutely\n // over the editor's top-right corner so we don't waste ~50 px of vertical\n // rhythm on an empty bar.\n &--header-floating .a-le-card {\n position: relative;\n }\n\n &--header-floating .a-le-header {\n position: absolute;\n top: 6px;\n right: 6px;\n padding: 0;\n background: transparent;\n border: none;\n z-index: 2;\n }\n\n &--header-floating .a-le-header-actions {\n margin-left: 0;\n }\n\n // Embedded variant — this editor sits inside another editor's row. Drop\n // the card chrome (border, shadow), tighten rows, lighten background so it\n // visually reads as part of the parent's body, not a sibling list.\n &--embedded .a-le-card {\n background: transparent;\n border: none;\n box-shadow: none;\n border-radius: 0;\n }\n\n &--embedded .a-le-header {\n padding: 4px 0 6px;\n background: transparent;\n border: none;\n }\n\n &--embedded .a-le-title-heading {\n font-size: 13px;\n font-weight: 500;\n color: var(--le-on-surface-medium, rgb(0 0 0 / 70%));\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n\n &--embedded .a-le-row {\n background: var(--le-surface);\n border: 1px solid var(--le-border);\n border-radius: 6px;\n margin-bottom: 4px;\n }\n\n &--embedded .a-le-row:last-of-type {\n margin-bottom: 0;\n }\n\n &--embedded .a-le-row-add {\n min-height: var(--le-row-min-height);\n padding: 0 16px;\n background: transparent;\n border: 1px dashed var(--le-border);\n border-radius: 6px;\n color: var(--le-primary);\n margin-top: 4px;\n width: 100%;\n }\n\n &--embedded .a-le-row-add:hover {\n background: var(--le-primary-state);\n border-style: solid;\n }\n\n // Chips-layout variant-specific overrides — `__rows` flex-wraps into pills,\n // `row-header` gets the drag-handle-friendly 8 px left padding (vs 12 px\n // in AListEditor), `drag-handle` shrinks to match the pill height.\n &--chips &__rows {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n flex: 1 1 100%;\n }\n\n &--chips .a-le-row-header {\n padding: 2px 4px 2px 8px;\n gap: 4px;\n min-height: 28px;\n }\n\n &--chips .a-le-drag-handle {\n padding: 0;\n font-size: 16px;\n }\n}\n\n// Narrow-container / mobile layout — taller rows, always-visible actions,\n// status badge dropped to make room.\n/* stylelint-disable selector-max-compound-selectors */\n@container le-shell (max-width: 768px) {\n .a-sortable-list-editor {\n --le-row-min-height: 48px;\n --le-row-pad-y: 10px;\n\n .a-le-row:not(.a-le-row--editing) .a-le-status {\n display: none;\n }\n\n .a-le-row .a-le-action--edit,\n .a-le-row .a-le-action--delete,\n .a-le-row .a-le-action--menu,\n .a-le-row .a-le-action--up,\n .a-le-row .a-le-action--down {\n opacity: 1;\n }\n }\n}\n/* stylelint-enable selector-max-compound-selectors */\n</style>\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 (\n isUndefined(filterInnerConfig.fields[filterByFieldProp]) ||\n isUndefined(filterInnerData[filterByFieldProp])\n) {\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>(\n 'selected',\n {\n required: false,\n default: null,\n set(newValue) {\n return isArray(newValue) ? cloneDeep(newValue) : newValue\n },\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 } =\n useCollabField(props.collab.room, props.collab.field)\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(\n isNull(filterSortByProp) ? null : filterSortByProp.key,\n 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 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) ??\n ({ 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 (\n mode: 'focus' | 'hover' | 'mounted' | 'force',\n newValue: ModelValueType,\n) => {\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 mode === 'mounted' &&\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 = (\n newValue: ValueObjectOption<T> | readonly ValueObjectOption<T>[] | null,\n) => {\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, internalItem }\">\n <VListItem\n v-bind=\"itemProps\"\n :title=\"internalItem.raw.title\"\n :subtitle=\"internalItem.raw.subtitle\"\n />\n </template>\n <template #chip=\"{ props: chipProps, internalItem }\">\n <VChip\n :closable=\"chipProps.closable as boolean\"\n size=\"small\"\n :text=\"`${internalItem.title} (${internalItem.raw.subtitle})`\"\n :disabled=\"internalItem.props.disabled\"\n @click:close=\"onChipCloseClick(internalItem.raw)\"\n >\n {{ internalItem.raw.title }}\n <span\n v-if=\"internalItem.raw.subtitle\"\n class=\"font-italic pl-1\"\n >\n ({{ internalItem.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","_data","_options","acquireFieldLock","lockedByUserLocal","releaseCollabFieldLock","acquireCollabFieldLock","system","inject","subject","onUpdate","onBlur","onFocus","errorMessageComputed","labelComputed","requiredComputed","disabledComputed","__expose","_component_VTextField","_cache","$event","ACollabLockedByUser","$slots","REQUIRED_LOCALES","slovakPluralizationRule","choice","choicesLength","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","r","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","$","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","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","storedPage","preservePage","useDatatablePageStore","page","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","consumeStoredPage","source","storedFromHash","restoredPage","tryConvertNumber","tryConvertBoolean","TimeIntervalSpecialOptions","useTimeIntervalOptions","allowed","timeIntervalOptions","useFilterTimeIntervalValidators","dialogData","datesCompare","fromComputed","untilComputed","useApiQueryBuilder","querySetLimit","queryAdd","querySetOffset","limit","querySetOrder","desc","formatValue","queryAddFilter","filterVariant","resolveTimeIntervalFilter","fromName","untilName","mandatory","exclude","fromValue","untilValue","getValue","isSimpleFilters","filterFieldValue","filterFieldConfig","nameRelated","isApiResponseList","isApiInfiniteResponseList","generateListQuery","queryBuild","querySetFilters","useApiFetchList","silentConsoleError","abortController","fetchParams","urlTemplateOverride","urlParamsOverride","forceElastic","searchApi","resolvedParams","resData","createDefaultPaginationOptions","sortKey","sortOrder","externalPaginationRef","mergedOptions","setSortBy","arg1","arg2","apiCreateOne","FilterDataKey","FilterConfigKey","FilterInnerDataKey","FilterInnerConfigKey","FilterSubmitResetCounterKey","FilterSelectedKey","DatatablePaginationKey","SubjectSelectCloseSidebarKey","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","internalItem","_component_VListItem","chipProps","_component_VChip","isOneOf","enumValues","autoFetchTimer","finalRaw","findLocalDataByValues","found","tryToLoadFromLocalData","count","foundItems","autoFetched","clearAutoFetchTimer","autoFetch","itemItem","chipItem","modelItemValue","getTimeIntervalOption","modelInternal","dialogCustom","displayFromTo","onDialogConfirm","onDialogClose","customOption","onEditInterval","clear","filterDataUntil","fromNewValue","untilNewValue","fromOldValue","untilOldValue","onInternalItemChange","_component_VTextarea","_component_VDialog","ADialogToolbar","_component_VCardText","ARow","AFormDatetimePicker","_component_VCardActions","_component_ABtnTertiary","_component_ABtnPrimary","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","executeParams","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","_defineProperty","_toPropertyKey","_extends","ownKeys","_objectSpread2","_objectWithoutProperties","_objectWithoutPropertiesLoose","_toPrimitive","_typeof","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","checkEl","_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","watchElement","resetOptions","defaultOptions","moveArrayElement","cleanup","initSortable","start","unrefElement","stopWatch","newElement","tryOnMounted","stop","tryOnScopeDispose","insertNodeAt","parentElement","refElement","removeNode","node","_valueIsRef","array","toValue","byteToHex","unsafeStringify","offset","rnds8","rng","_state","v1","buf","bytes","rnds","updateV1State","v1Bytes","msecs","nsecs","clockseq","tl","tmh","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","nestedSortable","needsRefresh","refresh","onBeforeUnmount","_withModifiers","withModifiers","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_VTabs","_component_VTab","AFormTextField","AFormSwitch","ASortable","dialog","FilterBookmarkDialog","closeSidebarOnMobile","provide","submitFilter","submitFilterBookmark","resetFilter","touched","renderedFieldNames","_component_VForm","FilterBookmarks","FilterDetailItem","AFilterSubmitButton","AFilterResetButton","AFilterBookmarkButton","active","getTitleFromConfig","titleT","selectedArray","fieldOrder","valueArray","clickClose","showDetail","toggleFilterDetail","AFilterAdvancedButton","FiltersSelected","apiDeleteOne","useContainerWidth","useElementSize","isNarrow","useKeyboardNav","focusedKey","grabbedKey","orderedKeys","isGrabbed","grabbedIndex","totalCount","rowTabindex","ordered","focusRowElement","setFocus","prevOrderedKeys","fallbackIndex","releaseGrab","isFormField","handleKeydown","focusedItem","inReorder","isGrabbedNow","grabbedSomewhere","onFormField","ListEditorValidationKey","useListEditorItemValidation","registry","stateRef","lastKey","isValidState","useValidationRegistry","itemValidationStates","raw","fromRegistry","fromProp","useListEditor","keyField","positionField","positionMultiplier","updatePositionEnabled","viewItems","recalculatePositions","newPosition","finalize","isItem","resolveIndexByKey","resolveIndex","idOrItem","resolveInsertIndex","hint","positionHint","insertIndex","fromIndex","toIndex","len","resolveCompactText","pick","fromField","setsEqual","useUnsavedKeysSync","suppressNextModelWatch","hasUnsavedChanges","unsavedCount","useDirtyBaseline","getEntries","excludeFields","hasExcludes","excludeSet","stringifyContent","copy","dirtyBaseline","captureDirtyBaseline","next","rebaselineKey","entry","isItemDirty","baseline","useDeleteDialog","deleteDialog","deleteTarget","deleteInFlight","deleteError","performDelete","vi","useInlineEditing","editingKeys","editingSnapshots","pendingAutoOpen","clearEditing","beginEdit","cancelEdit","snap","commitEdit","closeEdit","requestAutoOpen","newKeys","oldKeys","oldSet","addedKey","SharedReorderRegistryKey","useReorderMode","applying","applyError","reorderMode","movedCount","hasPendingChanges","clonePayload","isEmbedded","enterReorderMode","cancelReorderMode","applyReorder","newMode","oldMode","open","_component_VCardTitle","_component_VAlert","$emit","targetPosition","totalLabel","isInvalid","DRAG_GHOST_CLASS","DRAG_CHOSEN_CLASS","slots","useSlots","display","useDisplay","isTouch","editor","expandedKeys","movedKeys","resetDirtyBaseline","snapshot","rowsContainer","isInlineEdit","hasReadonlyDetail","hit","canInteract","canEnterReorder","embeddedRef","allowEditInReorderRef","childContributions","shallowReactive","hasChanges","totalMovedCount","totalHasPendingChanges","canAdd","dragEnabled","addLabelResolved","emptyTitleResolved","emptyTextResolved","deleteConfirmTitleResolved","deleteConfirmTextResolved","reorderToggleVisible","compactReorderButton","headerVisible","headerHasContent","showInlineSaveFooter","markMoved","dirtyKeys","out","decoratorCache","viewItemsDecorated","total","liveKeys","editing","expanded","unsaved","canMoveUp","canMoveDown","decorated","findVi","keyboardNav","moveUp","moveDown","moveTop","moveBottom","moveToPositionDialogOpen","moveToPositionTarget","moveToPositionLabel","openMoveToPosition","onMoveToPositionConfirm","resolveCompactTextUtil","resolveValidation","enabled","onAddClick","onRowAddAfterClick","onCloseClick","onExpandClick","currentlyExpanded","isRowClickable","onRowClick","triggerDeleteClick","onDeleteDialogConfirm","onDeleteDialogCancel","onSaveClick","onCancelClick","keyAtIndex","actionsCache","getActions","actions","buildSlotProps","toolbarSlotProps","reorderToggleSlotProps","unsavedKeysModel","internalUnsavedKeys","clearUnsavedState","_normalizeProps","LeStatus","_hoisted_6","_hoisted_7","_hoisted_8","LeEmptyState","LeDragHandle","_hoisted_11","_hoisted_12","LeUnsavedLabel","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","LeMoveToPositionDialog","LeDeleteDialog","_hoisted_21","modelValueSelected","loadingLocal","loadingComputed","tryLoadModelValue","tryLoadValue","prefetch","idsToFetch","fetchedData","onChipCloseClick","closedItem","onAutocompleteModelUpdate","cloned"],"mappings":"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","x_google_ignoreList":[17,28,29,30,84,85,86,87,88,89]}
|
|
1
|
+
{"version":3,"file":"AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-CfAKR0IJ.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/composables/system/datatablePageStore.ts","../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/labs/filters/AFilterTimeInterval.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.js","../node_modules/uuid/dist/stringify.js","../node_modules/uuid/dist/rng.js","../node_modules/uuid/dist/v1.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/labs/filters/AFilterAdvancedButton.vue","../src/labs/filters/FiltersSelected.vue","../src/labs/filters/AFilterWrapper.vue","../src/services/api/apiDeleteOne.ts","../src/labs/listEditor/composables/useContainerWidth.ts","../src/labs/listEditor/composables/useKeyboardNav.ts","../src/labs/listEditor/composables/useListEditorItemValidation.ts","../src/labs/listEditor/composables/useValidationRegistry.ts","../src/labs/listEditor/composables/useListEditor.ts","../src/labs/listEditor/composables/resolveCompactText.ts","../src/labs/listEditor/composables/useUnsavedKeysSync.ts","../src/labs/listEditor/composables/useDirtyBaseline.ts","../src/labs/listEditor/composables/useDeleteDialog.ts","../src/labs/listEditor/composables/useInlineEditing.ts","../src/labs/listEditor/composables/useReorderMode.ts","../src/labs/listEditor/internal/LeDeleteDialog.vue","../src/labs/listEditor/internal/LeMoveToPositionDialog.vue","../src/labs/listEditor/internal/LeEmptyState.vue","../src/labs/listEditor/internal/LeStatus.vue","../src/labs/listEditor/internal/LeUnsavedLabel.vue","../src/labs/listEditor/internal/LeDragHandle.vue","../src/labs/listEditor/internal/constants.ts","../src/labs/listEditor/ASortableListEditor.vue","../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-label-large',\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 (\n isString(value) &&\n /^[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}\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) ||\n isUndefined(value) ||\n value === '' ||\n value === 0 ||\n isEmptyArray(value) ||\n 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> =\n Symbol.for('anzu:AvailableLanguages')\nexport const DefaultLanguageSymbol: InjectionKey<LanguageCode | undefined> =\n 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 =\n 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 {\n CollabFieldDataEnvelope,\n CollabRoom,\n CollabRoomPlainData,\n} 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> = Symbol(\n 'anzu:collabRoomDataChanged',\n)\n\nexport const collabReconnectEventBusKey: EventBusKey<'reconnect'> = Symbol('anzu:collabReconnect')\n\nexport const collabStartingEventBusKey: EventBusKey<CollabStartingEvent> =\n Symbol('anzu:collabStarting')\n\nexport const collabGatheringBufferDataEventBusKey: EventBusKey<CollabGatheringBufferDataEvent> =\n Symbol('anzu:collabGatheringBufferData')\n\nexport const collabApprovedJoinRequestEventBusKey: EventBusKey<CollabApprovedJoinRequestEvent> =\n Symbol('anzu:collabApprovedJoinRequest')\n\nexport const collabRejectedJoinRequestEventBusKey: EventBusKey<CollabRejectedJoinRequestEvent> =\n Symbol('anzu:collabRejectedJoinRequest')\n\nexport const collabJoinRequestEventBusKey: EventBusKey<CollabJoinRequestEvent> =\n 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> =\n Symbol('anzu:collabRequestToTakeModeration')\n\nexport const collabKickedFromRoomEventBusKey: EventBusKey<CollabKickedFromRoomEvent> = Symbol(\n 'anzu:collabKickedFromRoom',\n)\n\nexport const collabPurgeRoomEventBusKey: EventBusKey<CollabPurgeRoomEvent> =\n Symbol('anzu:collabPurgeRoom')\n\nexport function useCollabRoomDataChangeEventBus() {\n return useEventBus<CollabRoomDataChangedEvent, CollabFieldDataEnvelope>(\n collabRoomDataChangedEventBusKey,\n )\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>(\n collabApprovedRequestToTakeModerationEventBusKey,\n )\n}\n\nexport function useCollabRejectedRequestToTakeModerationEventBus() {\n return useEventBus<CollabRejectedRequestToTakeModerationEvent>(\n collabRejectedRequestToTakeModerationEventBusKey,\n )\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 =\n (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> = Symbol(\n 'anzu:collabFieldLockStatus',\n)\n\nexport function useCollabFieldLockStatusEventBus() {\n return useEventBus<CollabFieldLockStatusEvent, CollabFieldLockStatusPayload>(\n collabFieldLockStatusEventBusKey,\n )\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 =\n (typeof CollabAccessRoomStatus)[keyof typeof CollabAccessRoomStatus]\n\nexport interface CollabRoomInfoCallback {\n room: CollabRoomInfo\n}\n\ninterface CollabAccessRoomCallback {\n status: CollabAccessRoomStatusType\n}\n\nexport interface CollabSuccessAccessRoomCallback\n extends CollabAccessRoomCallback, CollabRoomInfoCallback {\n status: typeof CollabAccessRoomStatus.Ok\n}\n\nexport interface CollabOccupiedAccessRoomCallback\n 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, 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 =\n | CollabSuccessChangeRoomLockCallback\n | 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 =\n (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 =\n (typeof CollabRequestToJoinStatus)[keyof typeof CollabRequestToJoinStatus]\n\nexport interface CollabRequestToJoinStatusCallback {\n status: CollabRequestToJoinStatusType\n}\n\nexport interface CollabClientToServerEvents {\n subscribeCollabRoomInfo: (\n room: CollabRoom,\n callback: (data: CollabRoomInfoCallback) => void,\n ) => void\n unsubscribeCollabRoomInfo: (\n room: CollabRoom,\n callback: (data: CollabRoomInfoCallback) => void,\n ) => void\n joinCollabRoom: (\n room: CollabRoom,\n options: CollabRoomOptions,\n callback: (data: CollabAccessRoomCallbackTypes) => void,\n ) => void\n leaveCollabRoom: (\n room: CollabRoom,\n callback: (data: CollabAccessRoomCallbackTypes) => void,\n ) => 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<\n Socket<CollabServerToClientEvents, CollabClientToServerEvents> | undefined\n> = ref()\nconst collabRoomInfoState = reactive(new Map<CollabRoom, CollabRoomInfo>())\nconst collabFieldLocksState = reactive(new Map<CollabRoom, Map<CollabFieldName, CollabFieldLock>>())\nconst collabFieldDataBufferState = reactive(\n new Map<CollabRoom, Map<CollabFieldName, CollabFieldData>>(),\n)\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(\n room: CollabRoom,\n field: CollabFieldName,\n disableAutoUnsubscribe = false,\n) {\n const { collabOptions } = useCommonAdminCollabOptions()\n const { currentUserId } = useCollabCurrentUserId()\n const { collabSocket, collabFieldLocksState, collabFieldDataBufferState, collabRoomInfoState } =\n 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<\n undefined | ((payload: CollabFieldLockStatusPayload) => void)\n >()\n\n const collabGatheringBufferDataEventBus = useCollabGatheringBufferDataEventBus()\n const unsubscribeCollabGatheringBufferData = ref<undefined | Fn>()\n const collabGatheringBufferDataCallback = ref<undefined | Fn>()\n\n const fieldChangeEventBusListener = (\n event: CollabRoomDataChangedEvent,\n payload?: CollabFieldDataEnvelope,\n ) => {\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 = (\n callback: (data: CollabFieldLockStatusPayload) => void,\n ) => {\n fieldLockStatusCallback.value = callback\n unsubscribeCollabFieldLockStatusListener.value = fieldLockStatusEventBus.on(\n fieldLockStatusEventBusListener,\n )\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(\n 'acquireFieldLock',\n room,\n field,\n options,\n (error, response: CollabChangeRoomLockCallbackTypes) => {\n const statusEvent: CollabFieldLockStatusEvent = { field, room }\n if (error || isCollabFailedChangeRoomLockCallback(response)) {\n return void fieldLockStatusEventBus.emit(\n statusEvent,\n createFieldLockStatusPayload(\n CollabFieldLockType.Acquire,\n CollabFieldLockStatus.Failure,\n ),\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(\n CollabFieldLockType.Acquire,\n CollabFieldLockStatus.Success,\n ),\n )\n }\n },\n )\n }\n\n const releaseCollabFieldLock = (\n data: CollabFieldData,\n options: Partial<CollabFieldLockOptions> = {},\n ) => {\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(\n 'releaseFieldLock',\n room,\n field,\n data,\n options,\n (error, response: CollabChangeRoomLockCallbackTypes) => {\n const statusEvent: CollabFieldLockStatusEvent = { field, room }\n if (error || isCollabFailedChangeRoomLockCallback(response)) {\n return void fieldLockStatusEventBus.emit(\n statusEvent,\n createFieldLockStatusPayload(\n CollabFieldLockType.Release,\n CollabFieldLockStatus.Failure,\n ),\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(\n CollabFieldLockType.Release,\n CollabFieldLockStatus.Success,\n ),\n )\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 {\n CollabComponentConfig,\n CollabFieldData,\n CollabFieldLockOptions,\n} 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\nconst releaseFieldLock = ref(\n (_data: CollabFieldData, _options?: Partial<CollabFieldLockOptions>) => {},\n)\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 (\n data.status === CollabFieldLockStatus.Failure &&\n data.type === CollabFieldLockType.Acquire\n ) {\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)\n 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 }}<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\n/**\n * Custom Slovak Pluralization Rule.\n *\n * Automatically detects the format of the translation string based on the number\n * of pipe-separated choices (`choicesLength`) and returns the correct index.\n *\n * Case A: 4 choices (Extended format with explicit 0 support)\n * Structure: \"0 items | 1 item | 2-4 items | 5+ items\"\n * - 0 -> Index 0\n * - 1 -> Index 1\n * - 2-4 -> Index 2\n * - 5+ -> Index 3\n *\n * Case B: 3 choices (Starndard Slovak format)\n * Structure: \"1 item | 2-4 items | 5+ items\"\n * - 1 -> Index 0\n * - 2-4 -> Index 1\n * - 5+ -> Index 2 (Includes 0)\n *\n * Case C: 2 choices or fewer (Fallback)\n * - 1 -> Index 0\n * - Other-> Index 1\n */\nexport const slovakPluralizationRule = (choice: number, choicesLength: number) => {\n if (choicesLength === 4) {\n if (choice === 0) return 0\n if (choice === 1) return 1\n if (choice >= 2 && choice <= 4) return 2\n return 3\n }\n if (choicesLength === 3) {\n if (choice === 1) return 0\n if (choice >= 2 && choice <= 4) return 1\n return 2\n }\n return choice === 1 ? 0 : 1\n}\n\nexport const i18n = createI18n<[MessageSchema]>({\n globalInjection: false,\n locale: REQUIRED_LOCALES[0],\n fallbackLocale: false,\n pluralRules: {\n sk: slovakPluralizationRule,\n },\n missing: (locale: Locale, key: Path) => {\n if (REQUIRED_LOCALES.includes(locale) && !key.startsWith('system.subject.')) {\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 = {\n id: number\n titleT: string\n sortBy?: DatatableSortBy\n customData?: any\n}\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 = [\n HTTP_STATUS_OK,\n HTTP_STATUS_CREATED,\n HTTP_STATUS_ACCEPTED,\n HTTP_STATUS_NO_CONTENT,\n]\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 = (\n error: any,\n): 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 = (\n error: any,\n): 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","import type { AxiosError } from 'axios'\n\nexport const isAnzuApiAxiosError = (error: unknown): 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 declare cause: AxiosError<any, any>\n\n constructor(cause: AxiosError<any, any>) {\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 {\n isAnzuApiValidationError,\n type ValidationError,\n} 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 =\n | 'created'\n | 'deleted'\n | 'updated'\n | 'published'\n | 'unpublished'\n | 'enabled'\n | '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 = (\n errors: ValidationError[],\n duration = -1,\n fieldIsTranslated = false,\n ) => {\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)\n return dayjs().utc().format('YYYY-MM-DDTHH:mm:ss') + SUFFIX\n if (ignoreFractionalSeconds && ignoreSeconds)\n return dayjs().utc().format('YYYY-MM-DDTHH:mm:00') + SUFFIX\n if (!ignoreFractionalSeconds && ignoreSeconds)\n 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 (\n isoDate === DATETIME_MAX ||\n isoDate === DATETIME_MIN ||\n isoDate === '' ||\n isNull(isoDate) ||\n isUndefined(isoDate)\n )\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 = (\n isoDate: DatetimeUTC | DatetimeUTCNullable | string | null,\n edgeDateValue = '',\n): string => {\n if (\n isoDate === DATETIME_MAX ||\n isoDate === DATETIME_MIN ||\n isoDate === '' ||\n isNull(isoDate) ||\n isUndefined(isoDate)\n )\n return edgeDateValue\n return dayjs(isoDate).format('DD.MM.YYYY')\n}\n\nexport const timePretty = (\n isoDate: DatetimeUTC | DatetimeUTCNullable | string | null,\n edgeDateValue = '',\n): string => {\n if (\n isoDate === DATETIME_MAX ||\n isoDate === DATETIME_MIN ||\n isoDate === '' ||\n isNull(isoDate) ||\n isUndefined(isoDate)\n )\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 (\n typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3,6})?Z$/.test(value)\n )\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 :data-cy=\"dataCy\"\n class=\"text-medium-emphasis px-2\"\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 = (\n urlTemplate: string,\n urlParams: UrlParams,\n overrideUrlTemplate = '',\n) => {\n if (isEmptyObject(urlParams)) return urlTemplate\n return stringUrlTemplateReplace(\n overrideUrlTemplate === '' ? urlTemplate : overrideUrlTemplate,\n urlParams,\n )\n}\n","import { HTTP_STATUS_VALID_ALL } from '@/composables/statusCodes'\n\nexport const isValidHTTPStatus = (statusCode: number) => {\n return HTTP_STATUS_VALID_ALL.includes(statusCode)\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport {\n AnzuApiValidationError,\n axiosErrorResponseHasValidationData,\n} 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 {\n AnzuApiForbiddenError,\n axiosErrorResponseIsForbidden,\n} 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) ||\n 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 =\n 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(\n newHours ?? (modelValue.value ? modelValue.value.hours.toString() : '12'),\n )\n const minutesInt = parseInt(\n newMinutes ?? (modelValue.value ? modelValue.value.minutes.toString() : '0'),\n )\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\n .set('date', newValue.getDate())\n .set('month', newValue.getMonth())\n .set('year', newValue.getFullYear())\n}\n\nconst watchTimePicker = (\n newValue: null | { hours: number; minutes: number },\n internal: dayjs.Dayjs,\n) => {\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 (\n isNull(datetimeInternal.value) &&\n (isNull(props.defaultValue) || isUndefined(props.defaultValue))\n ) {\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 if (!isNull(props.defaultValue) && !isUndefined(props.defaultValue)) {\n datetimeInternal.value = dayjs(props.defaultValue, 'YYYY-MM-DDTHH:mm:ss.SSSSSSZ')\n } else {\n datetimeInternal.value = null\n }\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 }}<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 } =\n useCollabField(props.collab.room, props.collab.field)\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)\n 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 { ref } from 'vue'\n\nconst storedPage = ref<number>(1)\nconst preservePage = ref<boolean>(false)\n\nexport function useDatatablePageStore() {\n const setStoredPage = (page: number) => {\n storedPage.value = page\n }\n\n const setPreservePage = () => {\n preservePage.value = true\n }\n\n const consumeStoredPage = (): number | null => {\n if (preservePage.value) {\n preservePage.value = false\n return storedPage.value\n }\n return null\n }\n\n return {\n setStoredPage,\n setPreservePage,\n consumeStoredPage,\n }\n}\n","import { reactive, type Ref, toRaw } from 'vue'\nimport { useDatatablePageStore } from '@/composables/system/datatablePageStore'\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>[]>(\n filterFields: F,\n): 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 = (\n name: keyof FilterData<F>,\n filterData: FilterData<F>,\n filterConfig: FilterConfig<F>,\n ) => {\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(\n (item) => item === optionValue,\n )\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 (\n isString(filterData[name as keyof FilterData<F>]) ||\n isNumber(filterData[name as keyof FilterData<F>])\n ) {\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<\n F extends readonly MakeFilterOption<string>[] = readonly MakeFilterOption<string>[],\n>(\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 const { consumeStoredPage } = useDatatablePageStore()\n let source: 'hash' | 'localStorage' = 'hash'\n let storedFromHash = parseLocationHash()\n if (isNull(storedFromHash)) {\n source = 'localStorage'\n storedFromHash = loadFilterLocalStorage()\n }\n if (\n isNull(storedFromHash) ||\n (isEmptyObject(storedFromHash.filters) && isEmptyObject(storedFromHash.sortBy))\n ) {\n const restoredPage = consumeStoredPage()\n if (restoredPage !== null) {\n pagination.value = { ...pagination.value, page: restoredPage }\n }\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 const restoredPage = consumeStoredPage()\n pagination.value = {\n ...pagination.value,\n sortBy: storedFromHash.sortBy,\n ...(restoredPage !== null ? { page: restoredPage } : {}),\n }\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<\n F extends readonly MakeFilterOption<string>[] = readonly MakeFilterOption<string>[],\n> = {\n general: GeneralFilterOptions\n touched: boolean\n fields: {\n [P in F[number]['name']]: FilterField\n }\n}\n\nexport type FilterData<\n F extends readonly MakeFilterOption<string>[] = readonly MakeFilterOption<string>[],\n> = {\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","import { ref } from 'vue'\nimport { isArray, isBoolean, isNull, isNumber, isString, isUndefined } from '@/utils/common'\nimport type { FilterVariant } from '@/types/Filter'\nimport type {\n AllowedFilterValues,\n FilterConfig,\n FilterData,\n FilterField,\n} from '@/labs/filters/filterFactory'\nimport type { DatetimeUTCNullable } from '@/types/common'\nimport {\n TimeIntervalSpecialOptions,\n type TimeIntervalToolsValue,\n} from '@/labs/filters/filterTimeIntervalTools'\nimport {\n dateModifyMinutes,\n dateTimeNow,\n dateTimeToDate,\n dateToUtc,\n getMonthInterval,\n} 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)\n 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 = (\n filterVariant: FilterVariant,\n field: string,\n value: string | number | boolean,\n ): 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 (\n config.mandatory &&\n !config.exclude &&\n !isUndefined(config.default) &&\n !isNull(config.default)\n ) {\n return encodeURIComponent(\n isArray(config.default) ? config.default.join(',') : config.default,\n )\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\n .map((item) => (isString(item) ? encodeURIComponent(item) : item))\n .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>(\n value: unknown,\n): value is ApiInfiniteResponseList<T> => {\n return isObject(value) && Object.hasOwn(value, 'hasNextPage')\n}\n","import {\n AnzuApiResponseCodeError,\n isAnzuApiResponseCodeError,\n} from '@/model/error/AnzuApiResponseCodeError'\nimport {\n AnzuApiValidationError,\n axiosErrorResponseHasValidationData,\n} 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 {\n AnzuApiForbiddenError,\n axiosErrorResponseIsForbidden,\n} 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 type UseApiFetchListParams = {\n client: AxiosClientFn\n system: string\n entity: string\n urlTemplate?: string\n urlParams?: UrlParams\n options?: AxiosRequestConfig\n silentConsoleError?: boolean\n}\n\nexport type FetchListParams = {\n urlTemplate?: string\n urlParams?: UrlParams\n forceElastic?: boolean\n}\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 } =\n 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\nexport const useApiFetchList = <R>(params: UseApiFetchListParams): UseApiFetchListReturnType<R> => {\n const {\n client,\n system,\n entity,\n urlTemplate,\n urlParams,\n options = {},\n silentConsoleError = false,\n } = params\n\n let abortController: AbortController | null = null\n\n const executeFetch = async (\n pagination: Ref<Pagination>,\n filterData: FilterData<any>,\n filterConfig: FilterConfig<any>,\n fetchParams: FetchListParams = {},\n ): Promise<R> => {\n abortController = new AbortController()\n\n const {\n urlTemplate: urlTemplateOverride,\n urlParams: urlParamsOverride,\n forceElastic = false,\n } = fetchParams\n\n try {\n const searchApi = filterConfig.general.elastic || forceElastic ? '/search' : ''\n const resolvedParams = 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(resolvedParams) ? template : replaceUrlParameters(template, resolvedParams)) +\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,\n currentViewCount: res.data.data.length,\n }\n } else if (isApiResponseList(resData)) {\n pagination.value = {\n ...pagination.value,\n totalCount: resData.totalCount,\n 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 if (!silentConsoleError)\n console.error('Axios error: ' + urlTemplate, ...(err.cause ? [err.cause] : []))\n throw new AnzuApiAxiosError(err)\n }\n\n if (!silentConsoleError) 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 params?: FetchListParams,\n ) => Promise<R>\n abortFetch: () => void\n}\n","import {\n type DatatableSortBy,\n SortOrder,\n type SortOrderType,\n} 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 = {\n ...pagination.value,\n sortBy: { key: arg1, order: arg2 as SortOrderType },\n }\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 {\n AnzuApiValidationError,\n axiosErrorResponseHasValidationData,\n} 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 {\n AnzuApiForbiddenError,\n axiosErrorResponseIsForbidden,\n} 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(\n 'anzu:FilterInnerConfigKey',\n)\n\nexport const FilterSubmitResetCounterKey: InjectionKey<Ref<number>> = Symbol.for(\n 'anzu:FilterSubmitResetCounterKey',\n)\nexport const FilterSelectedKey: InjectionKey<\n Ref<Map<string, ValueObjectOption<string | number>[]>>\n> = Symbol.for('anzu:FilterSelectedKey')\n\nexport const DatatablePaginationKey: InjectionKey<Ref<Pagination>> = Symbol.for(\n 'anzu:DatatablePaginationKey',\n)\n\nexport const SubjectSelectCloseSidebarKey: InjectionKey<() => void> = Symbol.for(\n 'anzu:SubjectSelectCloseSidebarKey',\n)\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]\n ? { value: 1, title: t(props.trueT) }\n : { 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, [\n { title: modelValue.value.title, value: modelValue.value.value },\n ])\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')\n return t('common.model.filterPlaceholder.startsWith')\n if (filterConfigCurrent.value.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (filterConfigCurrent.value.variant === 'search')\n 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, [\n { title: modelValue.value + '', value: modelValue.value },\n ])\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 {\n type FilterConfig,\n type FilterData,\n useFilterClearHelpers,\n} 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 (\n isUndefined(filterInnerConfig.fields[filterByFieldProp]) ||\n isUndefined(filterInnerData[filterByFieldProp])\n) {\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(\n isNull(filterSortByProp) ? null : filterSortByProp.key,\n filterSortByProp?.order,\n)\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) ??\n ({ 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')\n return t('common.model.filterPlaceholder.startsWith')\n if (filterConfigCurrent.value.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (filterConfigCurrent.value.variant === 'search')\n 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, internalItem }\">\n <VListItem\n v-bind=\"itemProps\"\n :title=\"internalItem.raw.title\"\n :subtitle=\"internalItem.raw.subtitle\"\n />\n </template>\n <template #chip=\"{ props: chipProps, internalItem }\">\n <VChip\n :closable=\"chipProps.closable as boolean\"\n size=\"small\"\n :text=\"`${internalItem.title} (${internalItem.raw.subtitle})`\"\n :disabled=\"internalItem.props.disabled\"\n >\n {{ internalItem.raw.title }}\n <span\n v-if=\"internalItem.raw.subtitle\"\n class=\"font-italic pl-1\"\n >\n ({{ internalItem.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 {\n type FilterConfig,\n type FilterData,\n useFilterClearHelpers,\n} 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 =\n | ((ids: IntegerId[]) => Promise<any[]>)\n | ((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>) =>\n values.includes(item.value),\n )\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(\n pagination,\n filterInnerData,\n filterInnerConfig,\n )\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')\n return t('common.model.filterPlaceholder.startsWith')\n if (filterConfigCurrent.value.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (filterConfigCurrent.value.variant === 'search')\n 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) => ({\n title: item.title,\n value: item.value,\n }))\n updateFilterSelected(selected.value)\n return\n }\n if (isArray(newValue)) {\n loading.value = true\n try {\n selectedItemsCache.value = await props.fetchItemsMinimalByIds(\n newValue as Array<IntegerId & DocId>,\n )\n selected.value = selectedItemsCache.value.map((item) => ({\n title: item.title,\n value: item.value,\n }))\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) => ({\n title: item.title,\n value: item.value,\n }))[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, internalItem: 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, internalItem: 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, [\n { title: found.title as string, value: found.value as string },\n ])\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","<script setup lang=\"ts\">\nimport { computed, inject, nextTick, ref, watch } from 'vue'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport { isArray, isBoolean, isNull, isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { type AllowedFilterValues, useFilterClearHelpers } from '@/labs/filters/filterFactory'\nimport {\n TimeIntervalSpecialOptions,\n type TimeIntervalToolsValue,\n useFilterTimeIntervalValidators,\n useTimeIntervalOptions,\n} from '@/labs/filters/filterTimeIntervalTools'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport AFormDatetimePicker from '@/components/form/AFormDatetimePicker.vue'\nimport type { DatetimeUTCNullable } from '@/types/common'\nimport ARow from '@/components/ARow.vue'\nimport { dateTimeNow, dateTimePretty, isDatetimeUTC } from '@/utils/datetime'\nimport { useAlerts } from '@/composables/system/alerts'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nconst props = withDefaults(\n defineProps<{\n nameFrom: string\n nameUntil: string\n allowed?: TimeIntervalToolsValue[]\n placeholder?: string | undefined\n dataCy?: string\n }>(),\n {\n allowed: undefined,\n placeholder: undefined,\n dataCy: 'filter-time-interval',\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.nameFrom]) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterConfig.fields[props.nameUntil]) ||\n isUndefined(filterData) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterData[props.nameFrom]) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterData[props.nameUntil])\n) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst modelValue = computed({\n get() {\n return filterData[props.nameFrom]\n },\n set(newValue) {\n filterData[props.nameFrom] = newValue\n updateSelected(newValue)\n filterConfig.touched = true\n nextTick(() => {\n emit('change')\n })\n },\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { timeIntervalOptions, getTimeIntervalOption } = useTimeIntervalOptions(props.allowed)\nconst modelInternal = ref<TimeIntervalToolsValue>(null)\nconst dialogCustom = ref(false)\nconst dialogData = ref<{ from: DatetimeUTCNullable; until: DatetimeUTCNullable }>({\n from: null,\n until: dateTimeNow(),\n})\nconst displayFromTo = ref(false)\n\nconst { v$ } = useFilterTimeIntervalValidators(dialogData)\n\nconst filterConfigCurrent = computed(() => filterConfig.fields[props.nameFrom])\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return filterConfigCurrent.value.titleT ? t(filterConfigCurrent.value.titleT) : undefined\n})\n\nconst { clearOne } = useFilterClearHelpers()\nconst { showValidationError } = useAlerts()\n\nconst onClear = () => {\n displayFromTo.value = false\n modelInternal.value = null\n clearField()\n}\n\nconst onDialogConfirm = () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n displayFromTo.value = true\n dialogCustom.value = false\n filterData[props.nameUntil] = dialogData.value.until\n modelValue.value = dialogData.value.from\n}\n\nconst onDialogClose = () => {\n dialogCustom.value = false\n modelInternal.value = null\n}\n\nconst clearField = () => {\n clearOne(props.nameFrom, filterData, filterConfig)\n clearOne(props.nameUntil, filterData, filterConfig)\n filterSelected.value.delete(props.nameFrom)\n}\n\nconst updateSelected = (fromValue: AllowedFilterValues) => {\n if (isArray(fromValue) || isBoolean(fromValue)) return\n if (isNull(fromValue) || isUndefined(fromValue)) {\n filterSelected.value.delete(props.nameFrom)\n return\n }\n const found = getTimeIntervalOption(fromValue as TimeIntervalToolsValue)\n if (!found && isDatetimeUTC(fromValue)) {\n const customOption = getTimeIntervalOption(TimeIntervalSpecialOptions.Custom)!\n filterSelected.value.set(props.nameFrom, [\n {\n title:\n customOption.title +\n ': ' +\n dateTimePretty(dialogData.value.from) +\n ' - ' +\n dateTimePretty(dialogData.value.until),\n value: fromValue,\n },\n ])\n return\n }\n if (!found) return\n filterSelected.value.set(props.nameFrom, [{ title: found.title, value: fromValue }])\n}\n\nconst onEditInterval = (clear = false) => {\n v$.value.$reset()\n if (clear) {\n dialogData.value.from = null\n dialogData.value.until = dateTimeNow()\n }\n dialogCustom.value = true\n}\n\nwatch(\n modelValue,\n (newValue) => {\n if (isArray(newValue) || isBoolean(newValue)) return\n displayFromTo.value = false\n if (isUndefined(newValue) || isNull(newValue)) {\n modelInternal.value = null\n return\n }\n const found = getTimeIntervalOption(modelValue.value as TimeIntervalToolsValue)\n const filterDataUntil = filterData[props.nameUntil]\n if (!found && isDatetimeUTC(modelValue.value) && isDatetimeUTC(filterDataUntil)) {\n modelInternal.value = TimeIntervalSpecialOptions.Custom\n dialogData.value.from = modelValue.value\n dialogData.value.until = filterDataUntil\n displayFromTo.value = true\n }\n if (found) {\n modelInternal.value = found.value\n }\n },\n { immediate: true },\n)\n\nwatch(\n [() => filterData[props.nameFrom], () => filterData[props.nameUntil]],\n ([fromNewValue, untilNewValue], [fromOldValue, untilOldValue]) => {\n if (fromNewValue === fromOldValue && untilNewValue === untilOldValue) return\n updateSelected(fromNewValue)\n },\n { immediate: true },\n)\n\nconst onInternalItemChange = (item: ValueObjectOption<TimeIntervalToolsValue>) => {\n if (item.value === TimeIntervalSpecialOptions.Custom) {\n onEditInterval(true)\n return\n }\n filterData[props.nameUntil] = null\n modelValue.value = item.value\n}\n</script>\n\n<template>\n <VTextarea\n v-if=\"displayFromTo\"\n :label=\"label\"\n :model-value=\"dateTimePretty(dialogData.from) + ' - ' + dateTimePretty(dialogData.until)\"\n readonly\n rows=\"1\"\n auto-grow\n hide-details\n append-inner-icon=\"mdi-menu-down\"\n clearable\n class=\"cursor-pointer\"\n @click:clear.stop=\"onClear\"\n @click.stop=\"onEditInterval()\"\n />\n <VSelect\n v-else\n v-model=\"modelInternal\"\n item-title=\"title\"\n item-value=\"value\"\n :label=\"label\"\n :clearable=\"!isNull(modelInternal)\"\n no-filter\n :data-cy=\"dataCy\"\n :items=\"timeIntervalOptions\"\n hide-details\n autocomplete=\"off\"\n @click:clear.stop=\"onClear\"\n >\n <template #item=\"{ props: itemProps, internalItem }\">\n <VListItem\n v-bind=\"itemProps\"\n @click=\"onInternalItemChange(internalItem)\"\n />\n </template>\n </VSelect>\n <VDialog\n v-if=\"dialogCustom\"\n :model-value=\"true\"\n width=\"auto\"\n :min-width=\"360\"\n >\n <VCard>\n <ADialogToolbar @on-cancel=\"onDialogClose\">\n <slot name=\"title\">\n {{ label }}\n </slot>\n </ADialogToolbar>\n <VCardText>\n <ARow>\n <AFormDatetimePicker\n v-model=\"dialogData.from\"\n :v=\"v$.dialogData.from\"\n :label=\"t('common.filter.timeInterval.from')\"\n required\n />\n </ARow>\n <ARow>\n <AFormDatetimePicker\n v-model=\"dialogData.until\"\n :v=\"v$.dialogData.until\"\n :label=\"t('common.filter.timeInterval.until')\"\n required\n />\n </ARow>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onDialogClose\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n data-cy=\"button-confirm\"\n @click.stop=\"onDialogConfirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n\n<style lang=\"scss\" scoped>\n.v-text-field.cursor-pointer {\n ::v-deep(.v-field),\n ::v-deep(.v-field__input) {\n cursor: pointer;\n }\n}\n</style>\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))\n return\n filterSelected.value.set(props.name, [\n { title: dateTimePretty(modelValue.value), value: modelValue.value },\n ])\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')\n return t('common.model.filterPlaceholder.startsWith')\n if (filterConfigCurrent.value.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (filterConfigCurrent.value.variant === 'search')\n 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, [\n { title: modelValue.value + '', value: modelValue.value },\n ])\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 {\n createFilter,\n createFilterStore,\n type MakeFilterOption,\n} 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<\n TData = UserAdminConfigDataFilterBookmark | UserAdminConfigDataPinnedWidgets,\n>\n extends AnzuUserAndTimeTrackingAware, 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 =\n (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 {\n type UserAdminConfig,\n type UserAdminConfigLayoutTypeType,\n UserAdminConfigType,\n} 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(\n identifier.systemResource,\n '_',\n )\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(\n identifier.systemResource,\n '_',\n )\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 {\n AnzuApiResponseCodeError,\n isAnzuApiResponseCodeError,\n} from '@/model/error/AnzuApiResponseCodeError'\nimport {\n AnzuApiValidationError,\n axiosErrorResponseHasValidationData,\n} 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 {\n AnzuApiForbiddenError,\n axiosErrorResponseIsForbidden,\n} from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_ACCEPTED, 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\nexport type ExecuteRequestParams<T> = {\n urlTemplate?: string\n urlParams?: UrlParams\n object?: T\n}\n\nexport type UseApiRequestParams = {\n client: AxiosClientFn\n method: Method\n system: string\n entity: string\n urlTemplate?: string\n urlParams?: UrlParams\n options?: AxiosRequestConfig\n silentConsoleError?: boolean\n}\n\nexport const useApiRequest = <R, T = R>(\n params: UseApiRequestParams,\n): UseApiAnyRequestReturnType<R, T> => {\n const {\n client,\n method,\n system,\n entity,\n urlTemplate,\n urlParams,\n options = {},\n silentConsoleError = false,\n } = params\n\n let abortController: AbortController | null = null\n\n const executeRequest = async (executeParams: ExecuteRequestParams<T> = {}): Promise<R> => {\n abortController = new AbortController()\n\n const urlTemplateOverride = executeParams.urlTemplate\n const urlParamsOverride = executeParams.urlParams\n const object = executeParams.object\n\n try {\n const axiosConfig: AxiosRequestConfig = { method }\n const resolvedParams = 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(resolvedParams)) {\n axiosConfig.url = replaceUrlParameters(template, resolvedParams)\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 || res.status === HTTP_STATUS_ACCEPTED) {\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 if (!silentConsoleError)\n console.error('Axios error: ' + urlTemplate, ...(err.cause ? [err.cause] : []))\n throw new AnzuApiAxiosError(err)\n }\n\n if (!silentConsoleError) 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: (params?: ExecuteRequestParams<T>) => 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 = () =>\n useApiFetchList<UserAdminConfig[]>({ client, system, entity, urlTemplate: END_POINT })\n\n const fetchUserAdminConfig = (id: IntegerId) => {\n const { executeRequest } = useApiRequest<UserAdminConfig>({\n client,\n method: 'GET',\n system,\n entity,\n })\n return executeRequest({ urlTemplate: endPoint + '/:id', urlParams: { id } })\n }\n\n const createUserAdminConfig = (data: UserAdminConfig) => {\n const { executeRequest } = useApiRequest<UserAdminConfig>({\n client,\n method: 'POST',\n system,\n entity,\n })\n return executeRequest({ urlTemplate: endPoint, object: data })\n }\n\n const updateUserAdminConfig = (id: IntegerId, data: UserAdminConfig) => {\n const { executeRequest } = useApiRequest<UserAdminConfig>({\n client,\n method: 'PUT',\n system,\n entity,\n })\n return executeRequest({ urlTemplate: endPoint + '/:id', urlParams: { id }, object: data })\n }\n\n const deleteUserAdminConfig = (id: IntegerId) => {\n const { executeRequest } = useApiRequest({ client, method: 'DELETE', system, entity })\n return executeRequest({ urlTemplate: endPoint + '/:id', urlParams: { id } })\n }\n\n const updateUserAdminConfigPositions = (ids: IntegerId[]) => {\n const { executeRequest } = useApiRequest<{ userAdminConfigs: IntegerId[] }>({\n client,\n method: 'PATCH',\n system,\n entity,\n })\n return executeRequest({\n urlTemplate: endPoint + '/update-positions',\n object: { userAdminConfigs: ids },\n })\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 (\n isUndefined(pagination) ||\n isUndefined(filterConfig) ||\n isUndefined(filterData) ||\n isUndefined(filterSelected)\n) {\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 = {\n ...pagination.value,\n sortBy: { key: config.sortBy!.key, order: config.sortBy!.order },\n }\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 variant=\"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 location=\"bottom\"\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.7\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nfunction _arrayWithoutHoles(r) {\n if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _defineProperty(e, r, t) {\n return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nfunction _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nfunction _iterableToArray(r) {\n if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = _objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nfunction _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nfunction _toConsumableArray(r) {\n return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n }\n}\n\nvar version = \"1.15.7\";\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 ? 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 var el = this.el;\n savedInputChecked.forEach(function (checkEl) {\n if (el.contains(checkEl)) {\n checkEl.checked = true;\n }\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, watch } from \"vue\";\nimport { defaultDocument, tryOnMounted, tryOnScopeDispose, unrefElement } from \"@vueuse/core\";\nimport Sortable from \"sortablejs\";\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, watchElement = false, ...resetOptions } = options;\n\tconst defaultOptions = { onUpdate: (e) => {\n\t\tmoveArrayElement(list, e.oldIndex, e.newIndex, e);\n\t} };\n\tconst cleanup = () => {\n\t\tsortable === null || sortable === void 0 || sortable.destroy();\n\t\tsortable = void 0;\n\t};\n\tconst initSortable = (target) => {\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 start = () => {\n\t\tconst target = typeof el === \"string\" ? document === null || document === void 0 ? void 0 : document.querySelector(el) : unrefElement(el);\n\t\tif (target) initSortable(target);\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\tlet stopWatch;\n\tif (watchElement && typeof el !== \"string\") stopWatch = watch(() => unrefElement(el), (newElement) => {\n\t\tcleanup();\n\t\tif (newElement) initSortable(newElement);\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\telse tryOnMounted(start);\n\tconst stop = () => {\n\t\tcleanup();\n\t};\n\ttryOnScopeDispose(() => {\n\t\tstopWatch === null || stopWatch === void 0 || stopWatch();\n\t\tcleanup();\n\t});\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//#endregion\nexport { insertNodeAt, moveArrayElement, removeNode, useSortable };\n","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","const rnds8 = new Uint8Array(16);\nexport default function rng() {\n return crypto.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","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (!buf && !options && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return _v4(options, buf, offset);\n}\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}\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 {\n SortableItemDataAware,\n SortableItemNewPositions,\n} 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: (\n index: number,\n data: SortablePropItem,\n position: number | null,\n dirty?: boolean | null,\n ) => void\n onRemoveDialogConfirm: () => void\n removeById: (id: DocId | IntegerId) => SortableItemNewPositions\n updateData: (\n id: DocId | IntegerId,\n data: SortablePropItem,\n position: number | null,\n dirty?: boolean | null,\n ) => void\n refresh: () => void\n destroy: () => void\n removeDialog: Ref<boolean>\n addAfterId: (\n targetId: DocId | IntegerId | null,\n data: SortablePropItem,\n ) => 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 = (\n targetIndex: number | null,\n data: SortablePropItem,\n ): 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 = (\n targetId: DocId | IntegerId | null,\n data: SortablePropItem,\n ): 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 {\n SortableEmit,\n SortableItem,\n SortablePropItem,\n} 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)\n ? WIDGET_HTML_ID_PREFIX + randomUuid.value\n : 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))\n 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 {\n UserAdminConfigLayoutTypeDefault,\n UserAdminConfigTypeDefault,\n} 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 {\n type UserAdminConfig,\n UserAdminConfigLayoutType,\n UserAdminConfigType,\n} from '@/types/UserAdminConfig'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport {\n DatatablePaginationKey,\n FilterConfigKey,\n FilterDataKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport { useFilterHelpers } from '@/labs/filters/filterFactory'\nimport {\n hasAnzuApiValidationErrorSpecific,\n isAnzuApiValidationError,\n} 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\n ? props.datatableHiddenColumns\n : undefined,\n sortBy:\n 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(\n e,\n 'error_field_not_unique',\n 'cms.userAdminConfig.model.systemResource',\n )\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 {{\n activeTab === 'add'\n ? t('common.button.add')\n : t('common.filter.bookmark.saveBookmarkOrder')\n }}\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 :data-cy=\"dataCy\"\n class=\"text-medium-emphasis px-2\"\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 SubjectSelectCloseSidebarKey,\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 closeSidebarOnMobile = inject(SubjectSelectCloseSidebarKey, () => {})\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 closeSidebarOnMobile()\n })\n}\n\nconst { clearAll, clearAllFilterSelected } = useFilterClearHelpers()\n\nconst submitFilterBookmark = () => {\n nextTick(() => {\n submitResetCounter.value++\n emit('bookmarkLoadAfter')\n closeSidebarOnMobile()\n })\n}\n\nconst resetFilter = () => {\n clearAll(filterData, filterConfig)\n clearAllFilterSelected(filterData, filterConfig, filterSelected)\n nextTick(() => {\n submitResetCounter.value++\n emit('reset')\n closeSidebarOnMobile()\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 density=\"compact\">\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","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n tooltipT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n tooltipT: 'common.button.advancedFilters',\n buttonClass: 'mt-1',\n dataCy: 'filter-advanced',\n },\n)\nconst emit = defineEmits<{\n (e: 'advancedFilter'): void\n}>()\n\nconst active = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n active.value = !active.value\n emit('advancedFilter')\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-filter-variant\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(tooltipT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterSelectedKey,\n} from '@/labs/filters/filterInjectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { useFilterClearHelpers } from '@/labs/filters/filterFactory'\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nconst filterSelected = inject(FilterSelectedKey)\n\nif (isUndefined(filterConfig) || isUndefined(filterData) || isUndefined(filterSelected)) {\n throw new Error('Incorrect provide/inject config.')\n}\n\nconst { t } = useI18n()\n\nconst getTitleFromConfig = (name: string) => {\n const titleT = filterConfig.fields?.[name]?.titleT\n if (titleT) return t(titleT)\n return name\n}\n\nconst selectedArray = computed(() => {\n const fieldOrder = Object.keys(filterConfig.fields)\n return Array.from(filterSelected.value)\n .map(([key, valueArray]) => ({\n name: key,\n title: getTitleFromConfig(key),\n options: valueArray,\n }))\n .sort((a, b) => fieldOrder.indexOf(a.name) - fieldOrder.indexOf(b.name))\n})\n\nconst { clearOneFilterSelected, isClearable } = useFilterClearHelpers()\n\nconst clickClose = (name: string, optionValue: number | string) => {\n clearOneFilterSelected(name, optionValue, filterData, filterConfig, filterSelected)\n filterConfig.touched = true\n}\n</script>\n\n<template>\n <div\n v-for=\"item in selectedArray\"\n :key=\"item.name\"\n class=\"a-selected-filters\"\n >\n <div class=\"a-selected-filters__label text-body-small\">\n {{ item.title }}:\n </div>\n <div\n v-for=\"option in item.options\"\n :key=\"option.value\"\n class=\"a-selected-filters__chips\"\n >\n <VChip\n v-if=\"isClearable(item.name, filterConfig)\"\n closable\n size=\"small\"\n class=\"a-selected-filters__chip\"\n @click:close.stop=\"clickClose(item.name, option.value)\"\n >\n <template #close>\n <VIcon\n size=\"16\"\n icon=\"mdi-close-circle\"\n />\n </template>\n {{ option.title }}\n </VChip>\n <VChip\n v-else\n size=\"small\"\n class=\"a-selected-filters__chip\"\n >\n {{ option.title }}\n </VChip>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-selected-filters {\n display: inline-flex;\n align-items: center;\n background: #f5f5f5;\n border-radius: 20px;\n padding: 4px 4px 4px 12px;\n margin: 0 4px 2px 0;\n gap: 8px;\n max-width: 100%;\n\n &__label {\n white-space: nowrap;\n }\n\n &__chips {\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n }\n\n &__chip {\n background: white;\n box-shadow: none;\n\n .v-chip__content {\n max-width: 40vw;\n }\n\n &:hover .v-chip__close {\n opacity: 0.8;\n }\n }\n\n .v-chip__close {\n opacity: 0.3;\n transition: opacity 0.2s;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport AFilterAdvancedButton from '@/labs/filters/AFilterAdvancedButton.vue'\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 FiltersSelected from '@/labs/filters/FiltersSelected.vue'\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 AFilterBookmarkButton from '@/components/buttons/filter/AFilterBookmarkButton.vue'\nimport FilterBookmarks from '@/labs/filters/FilterBookmarks.vue'\nimport type { IntegerIdNullable } from '@/types/common'\nimport { type AxiosInstance } from 'axios'\n\nconst props = withDefaults(\n defineProps<{\n enableTop?: boolean\n hideButtons?: boolean\n formName?: string\n userId?: IntegerIdNullable | undefined\n client?: (() => AxiosInstance) | undefined\n store?: FilterStoreIdentifier | boolean // false to disable, FilterStoreIdentifier to custom store key\n alwaysVisible?: boolean\n hideMore?: boolean\n }>(),\n {\n enableTop: false,\n hideButtons: false,\n formName: 'search',\n userId: undefined,\n client: undefined,\n store: true,\n alwaysVisible: false,\n hideMore: false,\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})\nconst showDetail = defineModel<boolean>('showDetail', { default: false, required: false })\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nif (isUndefined(filterConfig) || isUndefined(filterData)) {\n throw new Error('Incorrect provide/inject config.')\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}\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 toggleFilterDetail = () => {\n showDetail.value = !showDetail.value\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\nif (props.alwaysVisible) {\n showDetail.value = true\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 <VRow\n v-if=\"enableTop\"\n density=\"comfortable\"\n >\n <VCol>\n <slot name=\"top\" />\n </VCol>\n </VRow>\n <VRow density=\"compact\">\n <VCol v-if=\"store && userId && isDefined(client)\">\n <slot name=\"bookmarks\">\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 </slot>\n </VCol>\n </VRow>\n <VRow\n v-if=\"!alwaysVisible\"\n density=\"comfortable\"\n >\n <VCol\n v-if=\"!hideMore\"\n cols=\"auto\"\n >\n <AFilterAdvancedButton\n :button-active=\"showDetail\"\n @advanced-filter=\"toggleFilterDetail\"\n />\n </VCol>\n <VCol>\n <div class=\"a-filter__container\">\n <div class=\"a-filter__search\">\n <slot name=\"search\" />\n </div>\n <FiltersSelected />\n </div>\n </VCol>\n <VCol\n v-if=\"!hideButtons\"\n class=\"text-right\"\n cols=\"auto\"\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 </VCol>\n </VRow>\n <div v-if=\"!hideMore\">\n <component :is=\"alwaysVisible ? 'div' : 'VSlideYTransition'\">\n <div\n v-show=\"showDetail\"\n :class=\"{ 'mt-6 pa-4 system-border-a': !alwaysVisible }\"\n >\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 || 6\"\n :md=\"filterConfig.fields[fieldName].render.md || 4\"\n :lg=\"filterConfig.fields[fieldName].render.lg || 3\"\n :xl=\"filterConfig.fields[fieldName].render.xl || 2\"\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 </component>\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 &__search {\n display: inline-flex;\n vertical-align: middle;\n min-width: 100%;\n height: 34px;\n\n @include media-breakpoint-up(sm) {\n min-width: 50%;\n margin-right: 8px;\n }\n\n @include media-breakpoint-up(md) {\n min-width: 40%;\n }\n\n @include media-breakpoint-up(lg) {\n min-width: 30%;\n }\n }\n}\n</style>\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport {\n AnzuApiValidationError,\n axiosErrorResponseHasValidationData,\n} 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 {\n AnzuApiForbiddenError,\n axiosErrorResponseIsForbidden,\n} 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","import { computed, type ComputedRef, type Ref } from 'vue'\nimport { useElementSize } from '@vueuse/core'\n\n// Aligns JS-driven layout decisions (close button variant, mobile title icon)\n// with the CSS `@container le-shell` queries which fire on the editor's own\n// width rather than the viewport. Default threshold matches the 768/769 split\n// in `_shared.scss` and per-component narrow-container blocks.\nexport function useContainerWidth(\n el: Ref<HTMLElement | null | undefined>,\n threshold = 769,\n): { width: Ref<number>; isNarrow: ComputedRef<boolean> } {\n const { width } = useElementSize(el)\n const isNarrow = computed(() => width.value > 0 && width.value < threshold)\n return { width, isNarrow }\n}\n","import { computed, ref, watch, type ComputedRef, type Ref } from 'vue'\nimport type { ListEditorKey } from '@/labs/listEditor/types/listEditorTypes'\n\nexport interface KeyboardNavViewItem {\n key: ListEditorKey\n expanded?: boolean\n canExpand?: boolean\n canIndent?: boolean\n canOutdent?: boolean\n}\n\nexport type KeyboardNavVariant = 'flat' | 'sortable' | 'nested'\n\nexport interface KeyboardNavOptions {\n viewItems: ComputedRef<KeyboardNavViewItem[]>\n variant: KeyboardNavVariant\n isReorderMode: Ref<boolean> | ComputedRef<boolean>\n disabled?: Ref<boolean> | ComputedRef<boolean>\n\n isEditing: (key: ListEditorKey) => boolean\n\n onToggleEdit?: (key: ListEditorKey) => void\n onCancelEdit?: (key: ListEditorKey) => void\n\n onMoveUp?: (key: ListEditorKey) => void\n onMoveDown?: (key: ListEditorKey) => void\n onMoveTop?: (key: ListEditorKey) => void\n onMoveBottom?: (key: ListEditorKey) => void\n\n onIndent?: (key: ListEditorKey) => void\n onOutdent?: (key: ListEditorKey) => void\n onToggleChildren?: (key: ListEditorKey, expand: boolean) => void\n\n onCancelReorder?: () => void\n}\n\nexport interface KeyboardNavApi {\n focusedKey: Ref<ListEditorKey | null>\n grabbedKey: Ref<ListEditorKey | null>\n /** 0-based index of the grabbed row in the current ordering, or -1 if no grab. */\n grabbedIndex: ComputedRef<number>\n /** Total count of rows currently in the editor. */\n totalCount: ComputedRef<number>\n isFocused: (key: ListEditorKey) => boolean\n isGrabbed: (key: ListEditorKey) => boolean\n rowTabindex: (key: ListEditorKey) => number\n setFocus: (key: ListEditorKey | null) => void\n releaseGrab: () => void\n handleKeydown: (key: ListEditorKey, e: KeyboardEvent) => void\n}\n\n// Roving tabindex + keyboard navigation for list-editor rows. Single tabstop\n// per editor; arrow keys move an internal pointer; reorder mode adds a \"grab\"\n// state where Enter/Space picks up the focused row and arrows move it.\nexport function useKeyboardNav(options: KeyboardNavOptions): KeyboardNavApi {\n const focusedKey = ref<ListEditorKey | null>(null)\n const grabbedKey = ref<ListEditorKey | null>(null)\n\n const orderedKeys = computed<ListEditorKey[]>(() => options.viewItems.value.map((v) => v.key))\n\n const isFocused = (key: ListEditorKey): boolean => focusedKey.value === key\n const isGrabbed = (key: ListEditorKey): boolean => grabbedKey.value === key\n\n const grabbedIndex = computed<number>(() => {\n if (grabbedKey.value === null) return -1\n return orderedKeys.value.indexOf(grabbedKey.value)\n })\n\n const totalCount = computed<number>(() => orderedKeys.value.length)\n\n function rowTabindex(key: ListEditorKey): number {\n const ordered = orderedKeys.value\n if (ordered.length === 0) return -1\n if (focusedKey.value === null) return ordered[0] === key ? 0 : -1\n return focusedKey.value === key ? 0 : -1\n }\n\n function focusRowElement(key: ListEditorKey | null) {\n if (key === null || typeof document === 'undefined') return\n void Promise.resolve().then(() => {\n const el = document.querySelector<HTMLElement>(`[data-id=\"${CSS.escape(String(key))}\"]`)\n el?.focus()\n })\n }\n\n function setFocus(key: ListEditorKey | null) {\n focusedKey.value = key\n focusRowElement(key)\n }\n\n // When the focused row is removed (e.g. via delete), fall to the row that\n // took its slot, or to the new last row if it was at the end. Without this,\n // focus vanishes to <body> after a delete and the user has to Tab back in.\n // We snapshot the previous ordering so we can look up where the focused key\n // *was* — by the time the watcher fires, the key is already gone from `now`.\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n let prevOrderedKeys: ListEditorKey[] = [...orderedKeys.value]\n watch(orderedKeys, (now) => {\n if (focusedKey.value === null) {\n prevOrderedKeys = [...now]\n return\n }\n if (now.includes(focusedKey.value)) {\n prevOrderedKeys = [...now]\n return\n }\n if (now.length === 0) {\n focusedKey.value = null\n prevOrderedKeys = []\n return\n }\n const oldIndex = prevOrderedKeys.indexOf(focusedKey.value)\n const fallbackIndex = Math.min(Math.max(oldIndex, 0), now.length - 1)\n setFocus(now[fallbackIndex])\n prevOrderedKeys = [...now]\n })\n\n // Releasing a grab when the grabbed row is no longer in the list — keeps the\n // grab state consistent if the row gets removed externally.\n watch(orderedKeys, (now) => {\n if (grabbedKey.value !== null && !now.includes(grabbedKey.value)) {\n grabbedKey.value = null\n }\n })\n\n function releaseGrab() {\n grabbedKey.value = null\n }\n\n function isFormField(target: EventTarget | null): boolean {\n const el = target as HTMLElement | null\n return !!el?.matches?.('input, textarea, select, [contenteditable], [contenteditable=\"true\"]')\n }\n\n function handleKeydown(key: ListEditorKey, e: KeyboardEvent) {\n if (options.disabled?.value) return\n\n const ordered = orderedKeys.value\n const i = ordered.indexOf(key)\n if (i < 0) return\n\n const focusedItem = options.viewItems.value[i]\n const inReorder = options.isReorderMode.value\n const isGrabbedNow = grabbedKey.value === key\n const grabbedSomewhere = grabbedKey.value !== null\n\n // Form fields keep native key behavior (cursor, newlines, selection) for\n // every key except Escape. Esc still closes the edit panel even mid-typing.\n const onFormField = isFormField(e.target)\n\n switch (e.key) {\n case 'ArrowUp':\n if (onFormField) return\n e.preventDefault()\n if (inReorder && isGrabbedNow) {\n options.onMoveUp?.(key)\n } else if (i > 0) {\n setFocus(ordered[i - 1])\n }\n return\n\n case 'ArrowDown':\n if (onFormField) return\n e.preventDefault()\n if (inReorder && isGrabbedNow) {\n options.onMoveDown?.(key)\n } else if (i < ordered.length - 1) {\n setFocus(ordered[i + 1])\n }\n return\n\n case 'Home':\n if (onFormField) return\n e.preventDefault()\n if (inReorder && isGrabbedNow) {\n options.onMoveTop?.(key)\n } else if (ordered.length > 0) {\n setFocus(ordered[0])\n }\n return\n\n case 'End':\n if (onFormField) return\n e.preventDefault()\n if (inReorder && isGrabbedNow) {\n options.onMoveBottom?.(key)\n } else if (ordered.length > 0) {\n setFocus(ordered[ordered.length - 1])\n }\n return\n\n case 'ArrowLeft':\n if (options.variant !== 'nested' || onFormField) return\n e.preventDefault()\n if (inReorder && isGrabbedNow && focusedItem.canOutdent) {\n options.onOutdent?.(key)\n } else if (focusedItem.expanded) {\n options.onToggleChildren?.(key, false)\n }\n return\n\n case 'ArrowRight':\n if (options.variant !== 'nested' || onFormField) return\n e.preventDefault()\n if (inReorder && isGrabbedNow && focusedItem.canIndent) {\n options.onIndent?.(key)\n } else if (focusedItem.canExpand && !focusedItem.expanded) {\n options.onToggleChildren?.(key, true)\n }\n return\n\n case 'Enter':\n case ' ': // Space\n if (onFormField) return\n e.preventDefault()\n if (inReorder) {\n if (isGrabbedNow) {\n grabbedKey.value = null\n } else {\n grabbedKey.value = key\n }\n } else {\n options.onToggleEdit?.(key)\n }\n return\n\n case 'Escape':\n if (grabbedSomewhere) {\n e.preventDefault()\n grabbedKey.value = null\n return\n }\n if (inReorder) {\n e.preventDefault()\n options.onCancelReorder?.()\n return\n }\n if (options.isEditing(key)) {\n e.preventDefault()\n options.onCancelEdit?.(key)\n return\n }\n return\n\n default:\n return\n }\n }\n\n return {\n focusedKey,\n grabbedKey,\n grabbedIndex,\n totalCount,\n isFocused,\n isGrabbed,\n rowTabindex,\n setFocus,\n releaseGrab,\n handleKeydown,\n }\n}\n","import {\n computed,\n getCurrentInstance,\n inject,\n onBeforeUnmount,\n watch,\n type ComputedRef,\n type InjectionKey,\n type Ref,\n} from 'vue'\nimport type {\n ListEditorKey,\n ListEditorValidationState,\n} from '@/labs/listEditor/types/listEditorTypes'\n\nexport interface ListEditorValidationRegistry {\n register: (\n key: ListEditorKey,\n state: Ref<ListEditorValidationState> | ComputedRef<ListEditorValidationState>,\n ) => void\n unregister: (key: ListEditorKey) => void\n}\n\nexport const ListEditorValidationKey = Symbol(\n 'le.validation',\n) as InjectionKey<ListEditorValidationRegistry>\n\nexport interface UseListEditorItemValidationOptions {\n /**\n * Stable identity of the row in the editor's v-model. Pass a getter so the\n * composable can re-register if the key ever swaps.\n */\n key: () => ListEditorKey\n /**\n * Reactive validation state. Common shape: a computed reading vuelidate's\n * `v$.$dirty && v$.$invalid` and returning 'invalid' or null.\n */\n state:\n | Ref<ListEditorValidationState>\n | ComputedRef<ListEditorValidationState>\n | (() => ListEditorValidationState)\n}\n\n// Lets a row's inline form report its own validation state to the surrounding\n// list editor without prop-drilling. The parent editor `provide`s the registry;\n// any descendant in the slot tree can `inject` it via this composable.\n//\n// No-op when called outside an editor (e.g. a form re-used elsewhere) — the\n// inject silently returns null.\nexport function useListEditorItemValidation(options: UseListEditorItemValidationOptions): void {\n const registry = inject(ListEditorValidationKey, null)\n if (!registry) return\n if (!getCurrentInstance()) return\n\n const stateRef = computed<ListEditorValidationState>(() => {\n const s = options.state\n if (typeof s === 'function') return s()\n return s.value\n })\n\n let lastKey: ListEditorKey | null = null\n watch(\n options.key,\n (now) => {\n if (lastKey !== null && lastKey !== now) registry.unregister(lastKey)\n registry.register(now, stateRef)\n lastKey = now\n },\n { immediate: true },\n )\n\n onBeforeUnmount(() => {\n if (lastKey !== null) registry.unregister(lastKey)\n })\n}\n","import { provide, reactive, type ComputedRef, type Ref } from 'vue'\nimport {\n ListEditorValidationKey,\n type ListEditorValidationRegistry,\n} from '@/labs/listEditor/composables/useListEditorItemValidation'\nimport type {\n ListEditorKey,\n ListEditorValidationState,\n} from '@/labs/listEditor/types/listEditorTypes'\n\nconst isValidState = (v: unknown): v is Exclude<ListEditorValidationState, null> =>\n v === 'valid' || v === 'invalid' || v === 'warning'\n\nexport interface UseValidationRegistryOptions<TItem extends Record<string, any>> {\n /**\n * Caller-provided fallback callback. Tried only when no descendant has\n * registered a state for the row via `useListEditorItemValidation`.\n */\n getValidationState?: (item: TItem, key: ListEditorKey, index: number) => ListEditorValidationState\n}\n\nexport interface UseValidationRegistryApi<TItem extends Record<string, any>> {\n /**\n * Resolves a row's validation state by checking, in order:\n * 1. The provide/inject registry (descendants registered via `useListEditorItemValidation`)\n * 2. The `getValidationState` prop fallback\n * 3. The item's own `validationState` field\n *\n * Returns null when none of the above flagged a state.\n */\n resolveValidation: (raw: TItem, key?: ListEditorKey, index?: number) => ListEditorValidationState\n}\n\n/**\n * Sets up the per-item validation provide/inject registry shared by all 3\n * editor variants. Descendant rows can register their `'invalid'`/`'valid'`/\n * `'warning'` state via `useListEditorItemValidation`; the editor's row-render\n * priority order is registry → prop callback → item field.\n *\n * Used by `AListEditor`, `ASortableListEditor`, `ANestedSortableListEditor`.\n */\nexport function useValidationRegistry<TItem extends Record<string, any>>(\n options: UseValidationRegistryOptions<TItem>,\n): UseValidationRegistryApi<TItem> {\n const itemValidationStates = reactive(\n new Map<\n ListEditorKey,\n Ref<ListEditorValidationState> | ComputedRef<ListEditorValidationState>\n >(),\n )\n\n provide<ListEditorValidationRegistry>(ListEditorValidationKey, {\n register(key, state) {\n itemValidationStates.set(key, state)\n },\n unregister(key) {\n itemValidationStates.delete(key)\n },\n })\n\n const resolveValidation = (\n raw: TItem,\n key?: ListEditorKey,\n index?: number,\n ): ListEditorValidationState => {\n if (key !== undefined) {\n const fromRegistry = itemValidationStates.get(key)?.value\n if (isValidState(fromRegistry)) return fromRegistry\n }\n if (options.getValidationState && key !== undefined && index !== undefined) {\n const fromProp = options.getValidationState(raw, key, index)\n if (isValidState(fromProp)) return fromProp\n }\n const v = raw.validationState\n if (isValidState(v)) return v\n return null\n }\n\n return { resolveValidation }\n}\n","import { computed, type ComputedRef, type Ref } from 'vue'\nimport type {\n ListEditorKey,\n ListViewItem,\n PositionHint,\n UseListEditorOptions,\n} from '@/labs/listEditor/types/listEditorTypes'\n\nexport interface ListEditorApi<TItem> {\n viewItems: ComputedRef<ListViewItem<TItem>[]>\n addItem: (data: TItem, positionHint?: PositionHint) => TItem[]\n deleteItem: (idOrItem: ListEditorKey | TItem) => TItem[]\n updateItem: (idOrItem: ListEditorKey | TItem, data: TItem) => TItem[]\n moveItem: (fromIndex: number, toIndex: number) => TItem[]\n recalculatePositions: (items: TItem[]) => TItem[]\n}\n\n/**\n * Flat list editor core. Pure data behavior shared by AListEditor and\n * ASortableListEditor. Does not touch the DOM, SortableJS, or emits.\n *\n * The caller passes a writable ref (typically `defineModel<TItem[]>`).\n * Mutators write a new array to `model.value` and also return it.\n * Input items are never mutated — when positions need to change, a new\n * item object is produced with `{ ...item, [positionField]: n }`.\n */\nexport function useListEditor<TItem extends Record<string, any>>(\n model: Ref<TItem[]>,\n options: UseListEditorOptions = {},\n): ListEditorApi<TItem> {\n const keyField = options.keyField ?? 'id'\n const positionField = options.positionField ?? 'position'\n const positionMultiplier = options.positionMultiplier ?? 1\n const updatePositionEnabled = options.updatePosition === true\n\n const viewItems = computed<ListViewItem<TItem>[]>(() =>\n model.value.map((raw, index) => ({\n key: raw[keyField] as ListEditorKey,\n index,\n raw,\n position: raw[positionField] as number | undefined,\n })),\n )\n\n const recalculatePositions = (items: TItem[]): TItem[] =>\n items.map((item, idx) => {\n const newPosition = (idx + 1) * positionMultiplier\n if (item[positionField] === newPosition) return item\n return { ...item, [positionField]: newPosition }\n })\n\n const finalize = (arr: TItem[]): TItem[] => {\n const result = updatePositionEnabled ? recalculatePositions(arr) : arr\n model.value = result\n return result\n }\n\n const isItem = (value: ListEditorKey | TItem): value is TItem =>\n value !== null && typeof value === 'object'\n\n const resolveIndexByKey = (items: TItem[], key: ListEditorKey): number =>\n items.findIndex((x) => x[keyField] === key)\n\n const resolveIndex = (items: TItem[], idOrItem: ListEditorKey | TItem): number => {\n const key = isItem(idOrItem) ? (idOrItem[keyField] as ListEditorKey) : idOrItem\n return resolveIndexByKey(items, key)\n }\n\n const resolveInsertIndex = (items: TItem[], hint?: PositionHint): number => {\n if (!hint) return items.length\n if (hint.afterId !== undefined) {\n const idx = resolveIndexByKey(items, hint.afterId)\n return idx === -1 ? items.length : idx + 1\n }\n if (hint.afterIndex !== undefined) {\n if (hint.afterIndex < 0) return items.length\n return Math.min(hint.afterIndex + 1, items.length)\n }\n if (hint.index !== undefined) {\n return Math.max(0, Math.min(hint.index, items.length))\n }\n return items.length\n }\n\n const addItem = (data: TItem, positionHint?: PositionHint): TItem[] => {\n const arr = [...model.value]\n const insertIndex = resolveInsertIndex(arr, positionHint)\n arr.splice(insertIndex, 0, data)\n return finalize(arr)\n }\n\n const deleteItem = (idOrItem: ListEditorKey | TItem): TItem[] => {\n const idx = resolveIndex(model.value, idOrItem)\n if (idx === -1) return model.value\n const arr = [...model.value]\n arr.splice(idx, 1)\n return finalize(arr)\n }\n\n const updateItem = (idOrItem: ListEditorKey | TItem, data: TItem): TItem[] => {\n const idx = resolveIndex(model.value, idOrItem)\n if (idx === -1) return model.value\n const arr = [...model.value]\n arr[idx] = data\n return finalize(arr)\n }\n\n const moveItem = (fromIndex: number, toIndex: number): TItem[] => {\n const len = model.value.length\n if (fromIndex === toIndex) return model.value\n if (fromIndex < 0 || fromIndex >= len) return model.value\n if (toIndex < 0 || toIndex >= len) return model.value\n const arr = [...model.value]\n const [el] = arr.splice(fromIndex, 1)\n arr.splice(toIndex, 0, el)\n return finalize(arr)\n }\n\n return {\n viewItems,\n addItem,\n deleteItem,\n updateItem,\n moveItem,\n recalculatePositions,\n }\n}\n","import type { ListEditorKey } from '@/labs/listEditor/types/listEditorTypes'\n\n// Fallback chain for the row's compact (collapsed) display text. Used by\n// every editor variant when the consumer didn't provide an `#item-compact`\n// slot — picks the first non-empty value from the configured `compactField`\n// or a sensible set of common fields, then falls back to the row's key.\n//\n// Pure function — no Vue reactivity. Pass the i18n `t` so the caller's\n// translation context is preserved.\nexport function resolveCompactText<TItem extends Record<string, any>>(\n raw: TItem,\n key: ListEditorKey,\n options: {\n compactField?: string | null\n fallback: string\n },\n): string {\n const pick = (v: unknown): string | null => (v == null || v === '' ? null : String(v))\n const fromField = options.compactField ? pick(raw[options.compactField]) : null\n if (fromField !== null) return fromField\n const fallbacks = [\n pick(raw.title),\n pick(raw.name),\n pick(raw.texts?.title),\n pick(raw.text),\n pick(key),\n ]\n const hit = fallbacks.find((v): v is string => v !== null)\n return hit ?? options.fallback\n}\n","import { computed, watch, type ComputedRef, type Ref } from 'vue'\nimport type { ListEditorKey } from '@/labs/listEditor/types/listEditorTypes'\n\nconst setsEqual = (a: Set<ListEditorKey>, b: Set<ListEditorKey>): boolean =>\n a.size === b.size && [...a].every((k) => b.has(k))\n\nexport interface UseUnsavedKeysSyncOptions {\n /** v-model-bound external Set (consumer's `defineModel<Set<ListEditorKey>>('unsavedKeys', …)`). */\n unsavedKeysModel: Ref<Set<ListEditorKey>>\n /** Internal source of truth — typically a computed deriving `dirty || moved` per row. */\n internalUnsavedKeys: ComputedRef<Set<ListEditorKey>>\n /**\n * Called when the consumer clears every unsaved key externally\n * (`unsavedKeys.value = new Set()` after a successful parent-form save).\n * Editor variants typically re-capture the dirty baseline here.\n */\n onClearAll: () => void\n /**\n * Called per-key when the consumer rebases just one row (e.g. dropped a\n * specific key from the unsaved set). Editor variants typically\n * re-baseline that key only.\n */\n onClearKey: (key: ListEditorKey) => void\n}\n\nexport interface UseUnsavedKeysSyncApi {\n hasUnsavedChanges: ComputedRef<boolean>\n unsavedCount: ComputedRef<number>\n /**\n * Imperative API exposed via `defineExpose` — callers pass a key to clear\n * just that row, omit it to clear everything (mirrors the model-driven\n * paths).\n */\n clearUnsavedState: (key?: ListEditorKey) => void\n}\n\n/**\n * Two-way sync between an editor's own per-row dirty/moved state and the\n * external `v-model:unsaved-keys` Set the consumer passes in.\n *\n * Internal → external: when `internalUnsavedKeys` changes, write a fresh\n * Set into the model (skipping no-op writes).\n *\n * External → internal: when the consumer overwrites the model (typically\n * to clear it after a successful save), call `onClearAll` (full clear) or\n * `onClearKey` (per-key) so the editor's dirty baseline catches up.\n *\n * The `suppressNext` flag keeps the watcher pair from ping-ponging when\n * the internal change is what triggered the model write.\n *\n * Used by `AListEditor`, `ASortableListEditor`, `ANestedSortableListEditor`.\n */\nexport function useUnsavedKeysSync(options: UseUnsavedKeysSyncOptions): UseUnsavedKeysSyncApi {\n let suppressNextModelWatch = false\n\n watch(\n options.internalUnsavedKeys,\n (now) => {\n if (setsEqual(options.unsavedKeysModel.value, now)) return\n suppressNextModelWatch = true\n options.unsavedKeysModel.value = new Set(now)\n },\n { immediate: true },\n )\n\n watch(options.unsavedKeysModel, (now) => {\n if (suppressNextModelWatch) {\n suppressNextModelWatch = false\n return\n }\n if (now.size === 0 && options.internalUnsavedKeys.value.size > 0) {\n options.onClearAll()\n } else {\n // Selective per-key clear: rebaseline keys present in internal but\n // absent in model.\n for (const key of options.internalUnsavedKeys.value) {\n if (!now.has(key)) options.onClearKey(key)\n }\n }\n })\n\n const hasUnsavedChanges = computed<boolean>(() => options.internalUnsavedKeys.value.size > 0)\n const unsavedCount = computed<number>(() => options.internalUnsavedKeys.value.size)\n\n const clearUnsavedState = (key?: ListEditorKey) => {\n if (key === undefined) {\n options.onClearAll()\n } else {\n options.onClearKey(key)\n }\n }\n\n return { hasUnsavedChanges, unsavedCount, clearUnsavedState }\n}\n","import { ref, watch, type Ref } from 'vue'\nimport type { ListEditorKey } from '@/labs/listEditor/types/listEditorTypes'\n\nexport interface UseDirtyBaselineOptions {\n /**\n * Field names to strip from item payload before hashing. Useful when the\n * consumer rewrites fields as a side effect of other operations (e.g. flat\n * sortable rewrites `[positionField]` on every row whose index shifts after\n * a move, nested sortable rewrites `[positionField, parentField]`) — those\n * rewrites shouldn't flag unchanged rows as dirty.\n */\n excludeFields?: string[]\n /**\n * Source ref to watch for reassignments. When provided, a shallow watch\n * captures the baseline on every `.value` reassignment (async fetch arriving\n * is the canonical case). In-place mutations (push/splice) don't fire the\n * watch, so a user-added row stays dirty against the prior baseline.\n */\n source?: Ref<unknown>\n}\n\nexport interface UseDirtyBaselineApi<TItem> {\n dirtyBaseline: Ref<Map<ListEditorKey, string>>\n captureDirtyBaseline: () => void\n rebaselineKey: (key: ListEditorKey) => void\n isItemDirty: (key: ListEditorKey, data: TItem) => boolean\n stringifyContent: (data: TItem) => string\n}\n\n/**\n * Dirty-baseline tracking shared across list-editor variants. Captures a\n * content snapshot (key → stringified payload) so per-row \"unsaved\" markers\n * can be derived by diffing current data against the baseline.\n *\n * Pure data behaviour — no DOM, no emits, no editor-specific state. Consumers\n * (the components) own any related state like `movedKeys` and invoke\n * `captureDirtyBaseline()` themselves when resetting; splitting that out\n * keeps the composable focused on a single responsibility.\n *\n * Note: the initial baseline is captured the first time this function runs,\n * reading from `getEntries()` immediately. Callers that want to reset the\n * baseline later (e.g. after a successful parent-form save) call\n * `captureDirtyBaseline()` again. When `options.source` is provided, a shallow\n * watch re-captures the baseline on every source ref reassignment — covers the\n * async-load-fills-empty-editor case without conflating user-driven in-place\n * pushes (Vue 3 shallow watch only fires on `.value` replacement).\n */\nexport function useDirtyBaseline<TItem extends Record<string, any>>(\n getEntries: () => Array<{ key: ListEditorKey; data: TItem }>,\n options: UseDirtyBaselineOptions = {},\n): UseDirtyBaselineApi<TItem> {\n const excludeFields = options.excludeFields ?? []\n const hasExcludes = excludeFields.length > 0\n // Pre-build the exclude lookup once at setup. With a typical exclude list\n // of 1-2 fields the savings are tiny, but the Set is referenced from the\n // hot stringify path so it's worth the one-time cost.\n const excludeSet = hasExcludes ? new Set(excludeFields) : null\n\n // `JSON.stringify` per-call is intentionally NOT memoized by data\n // reference. Some consumers mutate item fields in place (e.g. a v-model\n // bound to `data.title` inside an inline form) — that mutation doesn't\n // change the object identity, so a WeakMap cache would return a stale\n // dirty result. Correctness wins; the per-call cost is bounded by item\n // size and only pays at render time. For very large forms (100+ rows of\n // deeply-nested objects) this dominates GC; profile and revisit if it\n // shows up in a flame graph for a real consumer.\n const stringifyContent = (data: TItem): string => {\n if (!hasExcludes) return JSON.stringify(data)\n const copy = { ...data } as Record<string, unknown>\n for (const field of excludeSet!) {\n delete copy[field]\n }\n return JSON.stringify(copy)\n }\n\n const dirtyBaseline = ref(new Map<ListEditorKey, string>()) as Ref<Map<ListEditorKey, string>>\n\n const captureDirtyBaseline = () => {\n const next = new Map<ListEditorKey, string>()\n for (const { key, data } of getEntries()) {\n next.set(key, stringifyContent(data))\n }\n dirtyBaseline.value = next\n }\n\n const rebaselineKey = (key: ListEditorKey) => {\n const entries = getEntries()\n const entry = entries.find((e) => e.key === key)\n if (entry) {\n dirtyBaseline.value.set(key, stringifyContent(entry.data))\n } else {\n dirtyBaseline.value.delete(key)\n }\n }\n\n const isItemDirty = (key: ListEditorKey, data: TItem): boolean => {\n const baseline = dirtyBaseline.value.get(key)\n if (baseline === undefined) return true\n return baseline !== stringifyContent(data)\n }\n\n captureDirtyBaseline()\n\n // Editor mounted with empty model: capture baseline on the next source-ref\n // reassignment (async fetch arriving). Vue's shallow watch only fires on\n // `.value` replacement, not on in-place push/splice — so a user-driven first\n // add stays dirty. Stops itself once the baseline has anything in it.\n if (options.source && dirtyBaseline.value.size === 0) {\n const stopInitialFillWatch = watch(options.source, () => {\n captureDirtyBaseline()\n if (dirtyBaseline.value.size > 0) {\n stopInitialFillWatch()\n }\n })\n }\n\n return {\n dirtyBaseline,\n captureDirtyBaseline,\n rebaselineKey,\n isItemDirty,\n stringifyContent,\n }\n}\n","import { ref, type Ref } from 'vue'\n\nexport interface UseDeleteDialogOptions<TItem, ViewItem> {\n /**\n * Confirm hook — called before any destructive work. Returning `false`\n * aborts the delete silently; rejecting is treated the same as the caller's\n * `onDelete` rejecting (error message surfaced in the dialog).\n */\n onDeleteConfirm?: (item: TItem) => Promise<boolean> | boolean\n /**\n * Destructive work hook — consumer-side deletion (e.g. API call). If it\n * throws, the error is surfaced in the dialog and the local state is not\n * mutated.\n */\n onDelete?: (item: TItem) => Promise<void> | void\n /**\n * Called once the delete has succeeded end-to-end. The consumer performs\n * the editor mutation + clears component-local state here (editingKeys,\n * editingSnapshots, expanded flags, etc.). Keeping this step outside the\n * composable is deliberate — it lets each editor variant own its\n * per-component state shape without leaking it into the shared code.\n */\n onDeleted: (item: ViewItem) => void\n /**\n * Runs at click time. When true, the confirmation dialog is skipped and\n * delete proceeds immediately. Lets callers bypass the dialog for\n * specific modes (e.g. chips) without threading a prop through.\n */\n disableDeleteConfirm: () => boolean\n}\n\nexport interface UseDeleteDialogApi<ViewItem> {\n deleteDialog: Ref<boolean>\n deleteTarget: Ref<ViewItem | null>\n deleteInFlight: Ref<boolean>\n deleteError: Ref<string | null>\n performDelete: (vi: ViewItem) => Promise<boolean>\n onDeleteClick: (vi: ViewItem) => Promise<void>\n onDeleteDialogConfirm: () => Promise<void>\n onDeleteDialogCancel: () => void\n}\n\n/**\n * Delete-flow state + handlers shared across list-editor variants. Owns the\n * dialog boolean, the target row, the in-flight flag and the error string;\n * dispatches to the caller's confirm/delete/deleted hooks in the right order.\n *\n * Pure behaviour — no template, no editor dependency. The dialog markup\n * stays in each component (it references component-local slots and refs).\n */\nexport function useDeleteDialog<\n TItem extends Record<string, any>,\n ViewItem extends { key: string | number; raw: TItem },\n>(options: UseDeleteDialogOptions<TItem, ViewItem>): UseDeleteDialogApi<ViewItem> {\n const deleteDialog = ref(false)\n const deleteTarget = ref<ViewItem | null>(null) as Ref<ViewItem | null>\n const deleteInFlight = ref(false)\n const deleteError = ref<string | null>(null)\n\n const performDelete = async (vi: ViewItem): Promise<boolean> => {\n deleteError.value = null\n if (options.onDeleteConfirm) {\n const ok = await options.onDeleteConfirm(vi.raw)\n if (!ok) return false\n }\n if (options.onDelete) {\n deleteInFlight.value = true\n try {\n await options.onDelete(vi.raw)\n } catch (err) {\n deleteInFlight.value = false\n deleteError.value = err instanceof Error ? err.message : String(err)\n return false\n }\n deleteInFlight.value = false\n }\n options.onDeleted(vi)\n return true\n }\n\n const onDeleteClick = async (vi: ViewItem) => {\n if (options.disableDeleteConfirm()) {\n await performDelete(vi)\n return\n }\n deleteTarget.value = vi\n deleteError.value = null\n deleteDialog.value = true\n }\n\n const onDeleteDialogConfirm = async () => {\n if (!deleteTarget.value) return\n const ok = await performDelete(deleteTarget.value as ViewItem)\n if (ok) {\n deleteDialog.value = false\n deleteTarget.value = null\n }\n }\n\n const onDeleteDialogCancel = () => {\n if (deleteInFlight.value) return\n deleteDialog.value = false\n deleteTarget.value = null\n deleteError.value = null\n }\n\n return {\n deleteDialog,\n deleteTarget,\n deleteInFlight,\n deleteError,\n performDelete,\n onDeleteClick,\n onDeleteDialogConfirm,\n onDeleteDialogCancel,\n }\n}\n","import { nextTick, ref, watch, type ComputedRef, type Ref } from 'vue'\nimport { cloneDeep } from '@/utils/common'\nimport type { ListEditorKey } from '@/labs/listEditor/types/listEditorTypes'\n\nexport interface UseInlineEditingOptions<TItem> {\n /**\n * DOM ref of the scrolling container — the parent element that wraps every\n * row. Used to scope `querySelector` during the auto-scroll step so a page\n * with multiple editor instances doesn't accidentally scroll a sibling's\n * row into view.\n */\n rowsContainer: Ref<HTMLElement | null>\n /**\n * CSS selector for the per-row element to scroll into view. Flat editors\n * target the row directly (`.a-le-row`); the nested variant wraps rows\n * for drag/drop so the selector is the wrapper (`.a-le-row-wrapper`).\n * Must contain a `[data-id=\"...\"]` slot — filled at call time with the\n * CSS-escaped key.\n */\n rowSelector: string\n /**\n * Whether consumer-provided `#item` slot is present AND this variant is in\n * an inline-edit-capable configuration. Flat/sortable toggle this off in\n * chips mode; nested derives it from the slot existence. Auto-open on add\n * is a no-op when this is false.\n */\n isInlineEdit: ComputedRef<boolean>\n /**\n * Called when the user cancels an open edit. Consumer writes the snapshot\n * back to the underlying editor (flat: `editor.updateItem(vi.index, data)`;\n * nested: `editor.updateItem(vi.key, data)`) — the signature differs per\n * variant so the composable stays agnostic and delegates via this callback.\n */\n restoreSnapshot: (key: ListEditorKey, data: TItem) => void\n /**\n * Flat list of keys the auto-open watch should react to. Flat editors\n * return `modelValue.map(...)`; the nested variant walks the tree. Called\n * as the watch source getter — keep it referentially stable-ish so watch\n * dependencies are honoured.\n */\n watchKeys: () => ListEditorKey[]\n /**\n * Look up raw data for a key during auto-open so we can snapshot it before\n * the user starts editing. Flat editors return the item out of modelValue;\n * nested walks its tree. Returning `null` aborts the auto-open.\n */\n findEntry: (key: ListEditorKey) => { data: TItem } | null\n /**\n * Nested-only hook — after the new key is marked editing, the nested\n * variant needs to expand ancestors so the row is visible. Flat variants\n * don't need this and pass `undefined`.\n */\n afterAutoOpen?: (key: ListEditorKey) => void\n}\n\nexport interface UseInlineEditingApi<TItem, ViewItem> {\n editingKeys: Ref<Set<ListEditorKey>>\n editingSnapshots: Ref<Map<ListEditorKey, TItem>>\n pendingAutoOpen: Ref<boolean>\n clearEditing: () => void\n beginEdit: (vi: ViewItem) => void\n cancelEdit: (vi: ViewItem) => void\n commitEdit: (vi: ViewItem) => void\n closeEdit: (vi: ViewItem) => void\n requestAutoOpen: () => void\n}\n\n/**\n * Inline-edit lifecycle shared across list-editor variants.\n *\n * Owns:\n * - the per-key editing set (rows currently rendering the inline form),\n * - per-key content snapshots (taken on edit-open, used to revert on\n * cancel),\n * - the `pendingAutoOpen` flag + watch that auto-opens the most-recently\n * appended row after an `@add` emit resolves,\n * - the double-`nextTick` + `scrollIntoView` dance that pulls the new row\n * into view on long lists.\n *\n * Agnostic of the underlying editor composable — callers pass a\n * `restoreSnapshot` callback so the flat/nested signature mismatch\n * (`updateItem(index, data)` vs `updateItem(key, data)`) stays in the\n * consumer.\n */\nexport function useInlineEditing<\n TItem extends Record<string, any>,\n ViewItem extends { key: ListEditorKey; raw: TItem },\n>(options: UseInlineEditingOptions<TItem>): UseInlineEditingApi<TItem, ViewItem> {\n const editingKeys = ref<Set<ListEditorKey>>(new Set())\n const editingSnapshots = ref(new Map<ListEditorKey, TItem>()) as Ref<Map<ListEditorKey, TItem>>\n const pendingAutoOpen = ref(false)\n\n const clearEditing = () => {\n editingKeys.value.clear()\n editingSnapshots.value.clear()\n }\n\n const beginEdit = (vi: ViewItem) => {\n if (!editingSnapshots.value.has(vi.key)) {\n editingSnapshots.value.set(vi.key, cloneDeep(vi.raw) as TItem)\n }\n editingKeys.value.add(vi.key)\n }\n\n const cancelEdit = (vi: ViewItem) => {\n const snap = editingSnapshots.value.get(vi.key)\n if (snap) {\n options.restoreSnapshot(vi.key, snap as TItem)\n }\n editingKeys.value.delete(vi.key)\n editingSnapshots.value.delete(vi.key)\n }\n\n const commitEdit = (vi: ViewItem) => {\n editingKeys.value.delete(vi.key)\n editingSnapshots.value.delete(vi.key)\n }\n\n const closeEdit = (vi: ViewItem) => {\n editingKeys.value.delete(vi.key)\n editingSnapshots.value.delete(vi.key)\n }\n\n const requestAutoOpen = () => {\n pendingAutoOpen.value = true\n }\n\n watch(options.watchKeys, (newKeys, oldKeys) => {\n if (!pendingAutoOpen.value) return\n pendingAutoOpen.value = false\n const oldSet = new Set(oldKeys ?? [])\n const addedKey = newKeys.find((k) => !oldSet.has(k))\n if (addedKey === undefined) return\n if (!options.isInlineEdit.value) return\n const entry = options.findEntry(addedKey)\n if (!entry) return\n if (!editingSnapshots.value.has(addedKey)) {\n editingSnapshots.value.set(addedKey, cloneDeep(entry.data) as TItem)\n }\n editingKeys.value.add(addedKey)\n options.afterAutoOpen?.(addedKey)\n // Scroll the newly added row into view so the user sees their new item\n // even on long lists where the append lands below the viewport fold.\n // Double nextTick so the inline-edit body has rendered; `block: 'center'`\n // because `'nearest'` often decides a partially-visible row is good\n // enough and does nothing.\n nextTick(() => {\n nextTick(() => {\n const el = options.rowsContainer.value?.querySelector<HTMLElement>(\n `${options.rowSelector}[data-id=\"${CSS.escape(String(addedKey))}\"]`,\n )\n el?.scrollIntoView({ block: 'center', behavior: 'smooth' })\n })\n })\n })\n\n return {\n editingKeys,\n editingSnapshots,\n pendingAutoOpen,\n clearEditing,\n beginEdit,\n cancelEdit,\n commitEdit,\n closeEdit,\n requestAutoOpen,\n }\n}\n","import { computed, ref, watch, type ComputedRef, type InjectionKey, type Ref } from 'vue'\nimport type { ListEditorKey } from '@/labs/listEditor/types/listEditorTypes'\n\n// Registry that lets embedded inner editors push their reorder pending-count\n// up to the nearest non-embedded outer editor. The outer's reorder toolbar\n// status (\"N pending changes\") then reflects child moves too — so toggling\n// the order of an answer inside a question increments the outer's counter\n// just like a question move would.\nexport interface SharedReorderRegistry {\n register: (\n id: symbol,\n movedCount: ComputedRef<number>,\n hasPendingChanges: ComputedRef<boolean>,\n ) => void\n unregister: (id: symbol) => void\n}\n\nexport const SharedReorderRegistryKey = Symbol(\n 'le.sharedReorderRegistry',\n) as InjectionKey<SharedReorderRegistry>\n\nexport type ReorderModeValue = 'view' | 'reorder'\n\nexport interface UseReorderModeEmit<T> {\n reorderStart: () => void\n reorderCancel: () => void\n reorderApplied: (payload: T) => void\n reorderApplyError: (err: unknown) => void\n reorderEnd: () => void\n}\n\nexport interface UseReorderModeOptions<T> {\n /**\n * v-model-backed mode ref — the composable reads + writes, but the\n * component owns the `defineModel('mode', ...)` so external\n * `v-model:mode` bindings still flow. Passing the ref in avoids\n * duplicating the defineModel contract inside the composable.\n */\n mode: Ref<ReorderModeValue>\n /**\n * Reorder snapshot — cloned on enter, restored on cancel, cleared on\n * apply. Stays at component level (the dirty-baseline needs to read it\n * indirectly too), but the composable owns every assignment.\n */\n snapshot: Ref<T | null>\n /**\n * Keys the user has actively moved this session (drag, arrow buttons,\n * indent/outdent). Cleared on every mode transition. Stays at component\n * level because the per-row decorator reads it for the `moved` flag.\n */\n movedKeys: Ref<Set<ListEditorKey>>\n modelValue: Ref<T>\n /**\n * Deep-clone the model value for snapshotting. Caller-provided because\n * the nested tree shape and flat array shape need different serializer\n * handling (both use `cloneDeep` in practice, but the callsite already\n * imports it).\n */\n cloneModel: (m: T) => T\n applyModel: (m: T) => void\n canEnterReorder: ComputedRef<boolean>\n /**\n * Hook run after mode flips to `reorder` but before emit — nested uses\n * this to expand every branch + init sortable instances, flat uses it\n * (via nothing — the sortable initialises lazily via a watch in the\n * flat variant). Left optional.\n */\n onEnter?: () => void\n /**\n * Hook run after mode flips back to `view` on cancel — nested destroys\n * its sortable instances here. Flat doesn't need it.\n */\n onCancel?: () => void\n /**\n * Hook run after apply succeeds — nested destroys its sortable instances\n * here. Flat doesn't need it.\n */\n onApplyEnd?: () => void\n /**\n * Called from the mode watcher when mode flips externally from `view` to\n * `reorder` (e.g. v-model:mode bound by the parent) — each variant uses\n * this to clear variant-specific caches that `enterReorderMode` itself\n * also clears via its own call-site. The flat variant clears editing +\n * expanded; nested clears editing only (children-expanded stays).\n */\n onExternalEnter?: () => void\n /**\n * Async persist callback wired from the parent — identical semantics to\n * the old `props.onReorderApply`. Receives the cloned payload (array for\n * flat, tree for nested); throwing surfaces the error in the header\n * toolbar via `applyError`.\n */\n onReorderApply?: (payload: T) => Promise<void> | void\n /**\n * Optional override for the payload passed to `onReorderApply` + the\n * `reorder-applied` emit — defaults to `cloneModel(modelValue)`. Exists\n * so consumers could send a different shape than their stored snapshot\n * if the need arises; both current callers use the default.\n */\n clonePayload?: (m: T) => T\n /**\n * Embedded mode — the editor follows external mode changes but does NOT\n * own a snapshot or apply/cancel logic. The parent (a non-embedded outer\n * editor) takes a deep snapshot covering this editor's data too, so cancel\n * at the top restores everything. Used for the \"shared reorder\" pattern\n * where a single Reorder button drives multiple stacked editors.\n */\n embedded?: ComputedRef<boolean> | Ref<boolean>\n emit: UseReorderModeEmit<T>\n}\n\nexport interface UseReorderModeApi {\n applying: Ref<boolean>\n applyError: Ref<string | null>\n hasPendingChanges: ComputedRef<boolean>\n movedCount: ComputedRef<number>\n reorderMode: ComputedRef<boolean>\n enterReorderMode: () => void\n cancelReorderMode: () => void\n applyReorder: () => Promise<void>\n}\n\n/**\n * Reorder-mode state machine shared between ASortableListEditor and\n * ANestedSortableListEditor. Owns the `applying` + `applyError` flags, the\n * pending-changes counters, and the enter / cancel / apply transitions —\n * plus the mode watcher that fires when the v-model:mode flips externally.\n *\n * The snapshot and `movedKeys` sets stay at component level because the\n * per-row decorator + dirty-baseline read them directly; the composable\n * takes them as refs so it can still drive the state machine.\n */\nexport function useReorderMode<T>(options: UseReorderModeOptions<T>): UseReorderModeApi {\n const applying = ref(false)\n const applyError = ref<string | null>(null)\n\n const reorderMode = computed(() => options.mode.value === 'reorder')\n const movedCount = computed(() => options.movedKeys.value.size)\n const hasPendingChanges = computed(() => movedCount.value > 0)\n\n const clonePayload = (): T =>\n options.clonePayload\n ? options.clonePayload(options.modelValue.value)\n : options.cloneModel(options.modelValue.value)\n\n const isEmbedded = (): boolean => options.embedded?.value === true\n\n const enterReorderMode = () => {\n if (!options.canEnterReorder.value || reorderMode.value) return\n if (!isEmbedded()) {\n options.snapshot.value = options.cloneModel(options.modelValue.value)\n }\n options.movedKeys.value = new Set()\n applyError.value = null\n options.mode.value = 'reorder'\n options.onEnter?.()\n options.emit.reorderStart()\n }\n\n const cancelReorderMode = () => {\n if (!reorderMode.value) return\n if (!isEmbedded() && options.snapshot.value) {\n options.applyModel(options.snapshot.value as T)\n }\n options.snapshot.value = null\n options.movedKeys.value = new Set()\n applyError.value = null\n applying.value = false\n options.mode.value = 'view'\n options.onCancel?.()\n options.emit.reorderCancel()\n options.emit.reorderEnd()\n }\n\n const applyReorder = async () => {\n if (!reorderMode.value) return\n const payload = clonePayload()\n applyError.value = null\n if (!isEmbedded() && options.onReorderApply) {\n applying.value = true\n try {\n await options.onReorderApply(payload)\n } catch (err) {\n applying.value = false\n applyError.value = err instanceof Error ? err.message : String(err)\n options.emit.reorderApplyError(err)\n return\n }\n applying.value = false\n }\n // Deliberately keep `movedKeys` populated — consumer still has to persist\n // the new order via their own API call before rows are truly \"saved\"; we\n // let them clear the state manually via `resetDirtyBaseline` on success.\n options.snapshot.value = null\n options.mode.value = 'view'\n options.onApplyEnd?.()\n options.emit.reorderApplied(payload)\n options.emit.reorderEnd()\n }\n\n // Handle external mode flips (v-model:mode from a parent) — mirror the\n // same bookkeeping enterReorderMode / cancelReorderMode do so the state\n // stays consistent whether the transition came from a button click or a\n // parent binding. Embedded editors do NOT take a snapshot; their parent\n // (the outer non-embedded editor) owns one that covers nested data too.\n //\n // The view→reorder→view cleanup path differs between embedded and\n // non-embedded:\n // - non-embedded cancel: snapshot is set → clear state here\n // - non-embedded apply: applyReorder nulls snapshot BEFORE flipping\n // mode, so the snapshot-guarded branch is skipped → movedKeys stays\n // populated until consumer calls resetDirtyBaseline (the contract)\n // - embedded: no snapshot ever, clear state on every view transition\n // so the inner editor's movedKeys doesn't outlive a parent\n // cancel/apply (otherwise rows would render as `unsaved` after the\n // parent restores the original data)\n watch(options.mode, (newMode, oldMode) => {\n if (newMode === 'reorder' && oldMode !== 'reorder') {\n if (!isEmbedded() && !options.snapshot.value) {\n options.snapshot.value = options.cloneModel(options.modelValue.value)\n }\n options.movedKeys.value = new Set()\n options.onExternalEnter?.()\n }\n if (newMode === 'view' && oldMode === 'reorder') {\n if (options.snapshot.value) {\n options.snapshot.value = null\n options.movedKeys.value = new Set()\n applyError.value = null\n applying.value = false\n } else if (isEmbedded()) {\n options.movedKeys.value = new Set()\n applyError.value = null\n applying.value = false\n }\n }\n })\n\n return {\n applying,\n applyError,\n hasPendingChanges,\n movedCount,\n reorderMode,\n enterReorderMode,\n cancelReorderMode,\n applyReorder,\n }\n}\n","<script setup lang=\"ts\">\n// Shared delete-confirmation dialog used by all three list-editor variants.\n// The outer editors keep their own dialog-related state (open flag, in-flight,\n// error message) and supply i18n-resolved title / text / button labels — this\n// component is pure presentation plus confirm/cancel emits.\n\nexport interface Props {\n title: string\n text: string\n confirmLabel?: string\n cancelLabel?: string\n error?: string | null\n inFlight?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n confirmLabel: 'Delete',\n cancelLabel: 'Cancel',\n error: null,\n inFlight: false,\n})\n\ndefineEmits<{\n confirm: []\n cancel: []\n}>()\n\nconst open = defineModel<boolean>({ required: true })\n</script>\n\n<template>\n <VDialog\n v-model=\"open\"\n max-width=\"420\"\n :persistent=\"inFlight\"\n >\n <VCard>\n <VCardTitle class=\"text-headline-small\">\n {{ title }}\n </VCardTitle>\n <VCardText>\n {{ text }}\n <VAlert\n v-if=\"error\"\n type=\"error\"\n variant=\"tonal\"\n density=\"compact\"\n class=\"mt-3\"\n >\n {{ error }}\n </VAlert>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <VBtn\n variant=\"text\"\n :disabled=\"inFlight\"\n @click=\"$emit('cancel')\"\n >\n {{ cancelLabel }}\n </VBtn>\n <VBtn\n color=\"error\"\n variant=\"flat\"\n :loading=\"inFlight\"\n :disabled=\"inFlight\"\n @click=\"$emit('confirm')\"\n >\n {{ confirmLabel }}\n </VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nexport interface Props {\n total: number\n currentIndex: number\n itemLabel?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n itemLabel: undefined,\n})\n\nconst emit = defineEmits<{\n confirm: [newIndex: number]\n}>()\n\nconst open = defineModel<boolean>({ required: true })\n\nconst { t } = useI18n()\n\n// `currentIndex` is read once at setup to seed the field; subsequent changes\n// to the prop don't reset the user's typed-in value mid-edit, only re-opening\n// the dialog (via the `open` watcher below) does.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst targetPosition = ref<number>(props.currentIndex + 1)\n\nwatch(open, (now) => {\n if (now) targetPosition.value = props.currentIndex + 1\n})\n\nconst totalLabel = computed(() => Math.max(props.total, 1))\nconst isInvalid = computed<boolean>(\n () =>\n !Number.isFinite(targetPosition.value) ||\n targetPosition.value < 1 ||\n targetPosition.value > totalLabel.value,\n)\n\nconst onConfirm = () => {\n if (isInvalid.value) return\n const newIndex = Math.max(0, Math.min(props.total - 1, targetPosition.value - 1))\n emit('confirm', newIndex)\n open.value = false\n}\n\nconst onCancel = () => {\n open.value = false\n}\n</script>\n\n<template>\n <VDialog\n v-model=\"open\"\n max-width=\"420\"\n persistent\n >\n <VCard>\n <VCardTitle>\n {{ t('common.sortable.moveToPosition.title') }}\n </VCardTitle>\n\n <VCardText>\n <p\n v-if=\"itemLabel\"\n class=\"text-body-medium mb-3\"\n >\n {{ t('common.sortable.moveToPosition.itemDescription', { label: itemLabel }) }}\n </p>\n <VTextField\n v-model.number=\"targetPosition\"\n type=\"number\"\n :min=\"1\"\n :max=\"totalLabel\"\n :label=\"t('common.sortable.moveToPosition.positionLabel', { max: totalLabel })\"\n :hint=\"\n t('common.sortable.moveToPosition.positionHint', {\n current: currentIndex + 1,\n max: totalLabel,\n })\n \"\n :error=\"isInvalid\"\n autofocus\n density=\"comfortable\"\n variant=\"outlined\"\n @keydown.enter.prevent=\"onConfirm\"\n />\n </VCardText>\n\n <VCardActions>\n <VSpacer />\n <VBtn\n variant=\"text\"\n @click=\"onCancel\"\n >\n {{ t('common.sortable.reorderCancel') }}\n </VBtn>\n <VBtn\n color=\"primary\"\n variant=\"elevated\"\n :disabled=\"isInvalid\"\n @click=\"onConfirm\"\n >\n {{ t('common.sortable.moveToPosition.confirm') }}\n </VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n'\n\n// Shared empty-state block used by all three list-editor variants. Since the\n// refactor to a flat `.a-le-*` namespace, the block class no longer depends\n// on the parent variant — the same three classes render inside any editor.\n\nexport interface Props {\n title: string\n text: string\n addLabel?: string | null\n canAdd?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n addLabel: null,\n canAdd: false,\n})\n\ndefineEmits<{\n add: []\n}>()\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"a-le-empty\">\n <h3 class=\"a-le-empty-title\">\n {{ title }}\n </h3>\n <p class=\"a-le-empty-text\">\n {{ text }}\n </p>\n <VBtn\n v-if=\"addLabel && canAdd\"\n color=\"primary\"\n variant=\"flat\"\n prepend-icon=\"mdi-plus\"\n @click=\"$emit('add')\"\n >\n {{ t('common.sortable.addFirst') }}\n </VBtn>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n'\n\n// Reorder-mode header status pill. Emits `.a-le-toolbar-status` on its root,\n// caller adds the `--pending` modifier via class binding. inheritAttrs stays\n// default so additional classes (e.g. the --pending modifier) stick to the\n// root div.\n\nexport interface Props {\n hasPendingChanges: boolean\n pendingCount: number\n error?: string | null\n}\n\nwithDefaults(defineProps<Props>(), {\n error: null,\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"a-le-toolbar-status\">\n <VIcon\n v-if=\"hasPendingChanges\"\n icon=\"mdi-circle-medium\"\n color=\"warning\"\n size=\"18\"\n />\n <span\n v-if=\"error\"\n class=\"text-body-small\"\n >\n {{ error }}\n </span>\n <span\n v-else-if=\"hasPendingChanges\"\n class=\"text-body-small\"\n >\n {{ t('common.sortable.pendingChanges', { count: pendingCount }) }}\n </span>\n <span\n v-else\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ t('common.sortable.noPendingChanges') }}\n </span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n'\n\n// Small \"unsaved\" pill (warning dot + translated label). Emits the shared\n// `.a-le-unsaved-label` class directly — the flat `.a-le-*` namespace means\n// every variant shares the same selector, no per-variant BEM prefix needed.\n\nexport interface Props {\n label?: string | null\n}\n\nwithDefaults(defineProps<Props>(), {\n label: null,\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <span class=\"a-le-unsaved-label\">\n <VIcon\n icon=\"mdi-circle-medium\"\n size=\"12\"\n />\n {{ label ?? t('common.sortable.unsaved') }}\n </span>\n</template>\n","<script setup lang=\"ts\">\n// Drag-handle icon. Emits the shared `.a-le-drag-handle` class so SortableJS\n// `handle` selectors ('.a-le-drag-handle') match across every variant.\n</script>\n\n<template>\n <VIcon\n class=\"a-le-drag-handle\"\n icon=\"mdi-drag\"\n size=\"20\"\n />\n</template>\n","// Shared internal constants for the list-editor variants.\n// Class names are referenced both as SortableJS option strings and as CSS\n// selectors in `_shared.scss`; centralising them avoids the typo risk that\n// comes with the same string literal living in 2+ places.\n\nexport const DRAG_GHOST_CLASS = 'a-le-row--ghost'\nexport const DRAG_CHOSEN_CLASS = 'a-le-row--chosen'\nexport const DRAG_CLASS = 'a-le-row--drag'\n","<script setup lang=\"ts\" generic=\"TItem extends Record<string, any>\">\nimport {\n computed,\n inject,\n onBeforeUnmount,\n provide,\n ref,\n shallowReactive,\n shallowRef,\n useSlots,\n useTemplateRef,\n watch,\n type ComputedRef,\n} from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useDisplay } from 'vuetify'\nimport { useContainerWidth } from '@/labs/listEditor/composables/useContainerWidth'\nimport { useKeyboardNav } from '@/labs/listEditor/composables/useKeyboardNav'\nimport { useValidationRegistry } from '@/labs/listEditor/composables/useValidationRegistry'\nimport { useSortable } from '@vueuse/integrations/useSortable'\nimport { useListEditor } from '@/labs/listEditor/composables/useListEditor'\nimport { resolveCompactText as resolveCompactTextUtil } from '@/labs/listEditor/composables/resolveCompactText'\nimport { useUnsavedKeysSync } from '@/labs/listEditor/composables/useUnsavedKeysSync'\nimport { useDirtyBaseline } from '@/labs/listEditor/composables/useDirtyBaseline'\nimport { useDeleteDialog } from '@/labs/listEditor/composables/useDeleteDialog'\nimport { useInlineEditing } from '@/labs/listEditor/composables/useInlineEditing'\nimport {\n useReorderMode,\n SharedReorderRegistryKey,\n type SharedReorderRegistry,\n} from '@/labs/listEditor/composables/useReorderMode'\nimport LeDeleteDialog from '@/labs/listEditor/internal/LeDeleteDialog.vue'\nimport LeMoveToPositionDialog from '@/labs/listEditor/internal/LeMoveToPositionDialog.vue'\nimport LeEmptyState from '@/labs/listEditor/internal/LeEmptyState.vue'\nimport LeStatus from '@/labs/listEditor/internal/LeStatus.vue'\nimport LeUnsavedLabel from '@/labs/listEditor/internal/LeUnsavedLabel.vue'\nimport LeDragHandle from '@/labs/listEditor/internal/LeDragHandle.vue'\nimport {\n DRAG_GHOST_CLASS,\n DRAG_CHOSEN_CLASS,\n DRAG_CLASS,\n} from '@/labs/listEditor/internal/constants'\nimport { cloneDeep } from '@/utils/common'\nimport { stringToInt } from '@/utils/string'\nimport type {\n ListEditorKey,\n ListEditorValidationState,\n ListViewItem,\n PositionHint,\n} from '@/labs/listEditor/types/listEditorTypes'\n\nexport interface DecoratedViewItem<T> extends ListViewItem<T> {\n editing: boolean\n expanded: boolean\n loading: boolean\n dirty: boolean\n moved: boolean\n unsaved: boolean\n canMoveUp: boolean\n canMoveDown: boolean\n}\n\nexport type ReorderMode = 'view' | 'reorder'\n\n// Public slot scope shapes — see AListEditor for the rationale on hoisting.\nexport interface RowActions<TItem> {\n edit: () => void\n save: () => Promise<void> | void\n cancel: () => void\n close: () => void\n delete: () => Promise<void>\n addAfter: () => void\n toggleExpand: () => void\n moveUp: () => void\n moveDown: () => void\n moveTop: () => void\n moveBottom: () => void\n update: (data: TItem) => TItem[]\n}\nexport interface RowSlotProps<TItem extends Record<string, any>> {\n item: DecoratedViewItem<TItem> & { validationState: ListEditorValidationState }\n raw: TItem\n index: number\n key: ListEditorKey\n readonly: boolean\n disabled: boolean\n expanded: boolean\n editing: boolean\n dirty: boolean\n unsaved: boolean\n reorderMode: boolean\n moved: boolean\n canMoveUp: boolean\n canMoveDown: boolean\n touch: boolean\n actions: RowActions<TItem>\n}\nexport interface ToolbarSlotProps {\n applying: boolean\n hasPendingChanges: boolean\n movedCount: number\n error: string | null\n actions: { apply: () => Promise<void>; cancel: () => void }\n}\nexport interface ReorderToggleSlotProps {\n mode: ReorderMode\n disabled: boolean\n hasPendingChanges: boolean\n actions: { enterReorderMode: () => void; exitReorderMode: () => void }\n}\nexport interface HeaderSlotProps extends ReorderToggleSlotProps {\n title: string | null\n}\nexport interface EmptySlotProps {\n readonly: boolean\n disabled: boolean\n actions: { add: () => void }\n}\nexport interface AddButtonSlotProps {\n readonly: boolean\n disabled: boolean\n props: { onClick: () => void }\n actions: { add: () => void }\n}\nexport interface ViewBodySlotProps<TItem extends Record<string, any>> {\n items: TItem[]\n mode: ReorderMode\n actions: { enterReorderMode: () => void }\n}\n\nexport interface Props<TItem extends Record<string, any>> {\n keyField?: string\n positionField?: string\n positionMultiplier?: number\n updatePosition?: boolean\n\n readonly?: boolean\n disabled?: boolean\n loading?: boolean\n error?: string | null\n\n title?: string | null\n\n compactField?: string | null\n statusField?: string | null\n twoRows?: 'never' | 'mobile' | 'always'\n chips?: boolean\n\n showAddButton?: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n showAddAfterAction?: boolean\n\n addLabel?: string | null\n emptyTitle?: string | null\n emptyText?: string | null\n\n disableRowClick?: boolean\n disableDeleteConfirm?: boolean\n deleteConfirmTitle?: string | null\n deleteConfirmText?: string | null\n\n closeVariant?: 'auto' | 'icon' | 'labeled'\n\n loadingKeys?: Set<ListEditorKey> | null\n\n showReorderToggle?: boolean\n disableReorder?: boolean\n disableDrag?: boolean\n showMoveToPosition?: boolean\n\n /**\n * Embedded mode — this editor is nested inside another editor's `#item`\n * slot and follows a shared `v-model:mode` from the outer editor. When\n * set, the editor:\n * - hides its own Reorder button + Cancel/Apply toolbar\n * - skips the snapshot/restore (the outer editor's deep snapshot covers\n * nested data, so cancel at the top reverts everything)\n * - paints lighter chrome so it visually reads as part of the parent row\n * Pair with `v-model:mode` bound to the same ref the outer editor uses.\n */\n embedded?: boolean\n /**\n * Allow rows to remain inline-editable while the editor is in reorder\n * mode. By default, entering reorder closes any open inline edit and the\n * `#item` slot body is hidden — this keeps the visual focus on dragging.\n * Set this when the open row's body needs to render in reorder mode (e.g.\n * the parent editor of a shared-reorder pair, where the open question\n * exposes its embedded answers list for dragging).\n */\n allowEditInReorder?: boolean\n\n getValidationState?: (item: TItem, key: ListEditorKey, index: number) => ListEditorValidationState\n\n onDeleteConfirm?: (item: TItem) => Promise<boolean> | boolean\n onDelete?: (item: TItem) => Promise<void> | void\n onItemSave?: (item: TItem) => Promise<void> | void\n onReorderApply?: (items: TItem[]) => Promise<void> | void\n}\n\nconst props = withDefaults(defineProps<Props<TItem>>(), {\n keyField: 'id',\n positionField: 'position',\n positionMultiplier: 1,\n updatePosition: false,\n readonly: false,\n disabled: false,\n loading: false,\n error: null,\n title: null,\n compactField: null,\n statusField: null,\n twoRows: 'never',\n chips: false,\n showAddButton: true,\n showDeleteButton: true,\n showEditButton: true,\n showAddAfterAction: false,\n addLabel: null,\n emptyTitle: null,\n emptyText: null,\n disableRowClick: false,\n disableDeleteConfirm: false,\n deleteConfirmTitle: null,\n deleteConfirmText: null,\n closeVariant: 'auto',\n loadingKeys: null,\n showReorderToggle: true,\n disableReorder: false,\n disableDrag: false,\n showMoveToPosition: false,\n embedded: false,\n allowEditInReorder: false,\n getValidationState: undefined,\n onDeleteConfirm: undefined,\n onDelete: undefined,\n onItemSave: undefined,\n onReorderApply: undefined,\n})\n\nconst emit = defineEmits<{\n add: [positionHint: PositionHint | undefined]\n edit: [item: ListViewItem<TItem>]\n deleted: [item: ListViewItem<TItem>]\n close: [item: ListViewItem<TItem>]\n 'item-saved': [item: ListViewItem<TItem>]\n 'item-expand': [item: ListViewItem<TItem>, expanded: boolean]\n 'reorder-start': []\n 'reorder-cancel': []\n 'reorder-applied': [items: TItem[]]\n 'reorder-apply-error': [error: unknown]\n 'reorder-end': []\n}>()\n\ndefineSlots<{\n header?: (props: HeaderSlotProps) => unknown\n 'reorder-toggle'?: (props: ReorderToggleSlotProps) => unknown\n 'reorder-toolbar'?: (props: ToolbarSlotProps) => unknown\n empty?: (props: EmptySlotProps) => unknown\n 'add-button'?: (props: AddButtonSlotProps) => unknown\n 'view-body'?: (props: ViewBodySlotProps<TItem>) => unknown\n item?: (props: RowSlotProps<TItem>) => unknown\n 'item-compact'?: (props: RowSlotProps<TItem>) => unknown\n 'item-readonly'?: (props: RowSlotProps<TItem>) => unknown\n 'item-status'?: (props: RowSlotProps<TItem>) => unknown\n 'item-actions'?: (props: RowSlotProps<TItem>) => unknown\n 'item-footer'?: (props: RowSlotProps<TItem>) => unknown\n 'before-item'?: (props: RowSlotProps<TItem>) => unknown\n 'after-item'?: (props: RowSlotProps<TItem>) => unknown\n}>()\n\nconst modelValue = defineModel<TItem[]>({ required: true })\nconst mode = defineModel<ReorderMode>('mode', { default: 'view' })\n\nconst { t } = useI18n()\nconst slots = useSlots()\nconst display = useDisplay()\n\nconst rootEl = useTemplateRef<HTMLElement>('rootEl')\nconst { isNarrow } = useContainerWidth(rootEl)\n\nconst isTouch = computed<boolean>(() => display.platform.value.touch)\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst editor = useListEditor<TItem>(modelValue, {\n keyField: props.keyField,\n positionField: props.positionField,\n positionMultiplier: props.positionMultiplier,\n updatePosition: props.updatePosition,\n})\n\nconst expandedKeys = ref<Set<ListEditorKey>>(new Set())\n\n// Initial snapshot of each item, keyed by row key. Compared against current data to\n// detect \"dirty\" (unsaved) rows. Reset externally after a successful parent-form save.\n// `position` is deliberately stripped out: drag-drop rewrites it on every row\n// whose flat index shifts as a side-effect, and flagging those unmoved rows\n// as dirty would paint ghost \"unsaved\" markers. The per-row visual cue is\n// what matters; position data still flows to the parent on apply.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { captureDirtyBaseline, rebaselineKey, isItemDirty } = useDirtyBaseline<TItem>(\n () =>\n modelValue.value.map((item) => ({\n key: item[props.keyField] as ListEditorKey,\n data: item,\n })),\n { excludeFields: [props.positionField], source: modelValue },\n)\n\n// Keys the user has actively moved during this reorder session. Clearing\n// this set is part of \"mark current data as saved\" — paired with\n// captureDirtyBaseline in the exposed resetDirtyBaseline so the orange\n// badges go away when consumers confirm a server save.\nconst movedKeys = ref<Set<ListEditorKey>>(new Set())\n\nconst resetDirtyBaseline = () => {\n captureDirtyBaseline()\n movedKeys.value = new Set()\n}\n\nconst snapshot = shallowRef<TItem[] | null>(null)\n\nconst rowsContainer = useTemplateRef<HTMLElement>('rowsContainer')\n\nconst isInlineEdit = computed(() => !props.chips && !!slots.item)\nconst hasReadonlyDetail = computed(() => !props.chips && !!slots['item-readonly'])\n\nconst {\n editingKeys,\n editingSnapshots,\n clearEditing,\n beginEdit,\n cancelEdit,\n commitEdit,\n closeEdit,\n requestAutoOpen,\n} = useInlineEditing<TItem, ListViewItem<TItem>>({\n rowsContainer,\n rowSelector: '.a-le-row',\n isInlineEdit,\n restoreSnapshot: (key, data) => editor.updateItem(key, data),\n watchKeys: () => modelValue.value.map((it) => it[props.keyField] as ListEditorKey),\n findEntry: (key) => {\n const hit = modelValue.value.find((it) => (it[props.keyField] as ListEditorKey) === key)\n return hit ? { data: hit } : null\n },\n afterAutoOpen: (key) => {\n expandedKeys.value.delete(key)\n },\n})\n\nconst canInteract = computed(() => !props.readonly && !props.disabled && !props.loading)\nconst canEnterReorder = computed(\n () => canInteract.value && !props.disableReorder && modelValue.value.length > 1,\n)\n\nconst embeddedRef = computed(() => props.embedded)\nconst allowEditInReorderRef = computed(() => props.allowEditInReorder)\n\nconst {\n applying,\n applyError,\n hasPendingChanges,\n movedCount,\n reorderMode,\n enterReorderMode,\n cancelReorderMode,\n applyReorder,\n} = useReorderMode<TItem[]>({\n mode,\n snapshot,\n movedKeys,\n modelValue,\n cloneModel: (m) => cloneDeep(m) as TItem[],\n applyModel: (m) => {\n modelValue.value = m\n },\n canEnterReorder,\n embedded: embeddedRef,\n onEnter: () => {\n if (!allowEditInReorderRef.value) {\n clearEditing()\n expandedKeys.value.clear()\n }\n },\n onExternalEnter: () => {\n if (!allowEditInReorderRef.value) {\n clearEditing()\n expandedKeys.value.clear()\n }\n },\n onReorderApply: (items) => props.onReorderApply?.(items),\n emit: {\n reorderStart: () => emit('reorder-start'),\n reorderCancel: () => emit('reorder-cancel'),\n reorderApplied: (payload) => emit('reorder-applied', payload),\n reorderApplyError: (err) => emit('reorder-apply-error', err),\n reorderEnd: () => emit('reorder-end'),\n },\n})\n\n// Cross-editor pending-changes aggregation. When this editor is the outer\n// (non-embedded) one in a stacked-editor setup, it provides a registry that\n// embedded children push their own movedCount + hasPendingChanges into.\n// The toolbar's \"N pending changes\" then totals across all levels — drag a\n// question OR drag an answer inside an open question and the same counter\n// increments either way. When this editor IS embedded, it injects the\n// nearest parent's registry and registers itself.\n// shallowReactive (not reactive) so the stored ComputedRef objects don't get\n// auto-unwrapped — we read `.value` on them inside the aggregator computeds.\n// `embedded` is a setup-time decision; it doesn't flip during a component's\n// lifetime so reading it once at root scope is intentional.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst childContributions = props.embedded\n ? null\n : shallowReactive(\n new Map<symbol, { count: ComputedRef<number>; hasChanges: ComputedRef<boolean> }>(),\n )\n\nif (childContributions) {\n const registry: SharedReorderRegistry = {\n register: (id, count, hasChanges) => {\n childContributions.set(id, { count, hasChanges })\n },\n unregister: (id) => {\n childContributions.delete(id)\n },\n }\n provide(SharedReorderRegistryKey, registry)\n}\n\nif (props.embedded) {\n const parent = inject(SharedReorderRegistryKey, null)\n if (parent) {\n const id = Symbol('le.embedded')\n parent.register(id, movedCount, hasPendingChanges)\n onBeforeUnmount(() => parent.unregister(id))\n }\n}\n\nconst totalMovedCount = computed<number>(() => {\n let sum = movedCount.value\n if (childContributions) {\n for (const c of childContributions.values()) sum += c.count.value\n }\n return sum\n})\n\nconst totalHasPendingChanges = computed<boolean>(() => {\n if (hasPendingChanges.value) return true\n if (childContributions) {\n for (const c of childContributions.values()) {\n if (c.hasChanges.value) return true\n }\n }\n return false\n})\n\nconst canAdd = computed(() => canInteract.value && props.showAddButton && !reorderMode.value)\n// Chips mode keeps drag always-on (no mode toggle) on non-touch devices.\nconst dragEnabled = computed(\n () => (reorderMode.value || props.chips) && !isTouch.value && !props.disableDrag,\n)\n\nconst addLabelResolved = computed(() =>\n props.addLabel ? t(props.addLabel) : t('common.sortable.add'),\n)\nconst emptyTitleResolved = computed(() => props.emptyTitle ?? t('common.sortable.emptyTitle'))\nconst emptyTextResolved = computed(() => props.emptyText ?? t('common.sortable.emptyText'))\nconst deleteConfirmTitleResolved = computed(\n () => props.deleteConfirmTitle ?? t('common.sortable.deleteConfirmTitle'),\n)\nconst deleteConfirmTextResolved = computed(\n () => props.deleteConfirmText ?? t('common.sortable.deleteConfirmText'),\n)\n\nconst reorderToggleVisible = computed<boolean>(\n (): boolean =>\n !props.chips &&\n !props.embedded &&\n props.showReorderToggle &&\n !reorderMode.value &&\n modelValue.value.length > 0,\n)\n\n// When there IS a title and viewport is narrow, the reorder button shrinks to an\n// icon-only round button to keep the single-line header from overflowing.\nconst compactReorderButton = computed<boolean>((): boolean => !!props.title && isNarrow.value)\n\nconst headerVisible = computed<boolean>(\n (): boolean =>\n !!(\n props.title ||\n slots.header ||\n slots['reorder-toggle'] ||\n reorderToggleVisible.value ||\n (reorderMode.value && !props.embedded)\n ),\n)\n\n// Editor band-only header — true when the only thing in the header is the\n// reorder button (no title, no slot). Lets the template float the button\n// over the editor's top-right corner instead of reserving an empty band.\nconst headerHasContent = computed<boolean>(\n (): boolean =>\n !!(\n props.title ||\n slots.header ||\n slots['reorder-toggle'] ||\n slots['view-body'] ||\n (reorderMode.value && !props.embedded)\n ),\n)\n\n// Per-row edit footer (Save + Cancel) is only meaningful if the consumer wants a\n// per-item persist callback. Without it the expectation is that the parent form's\n// global save flushes everything, so we hide the per-row buttons by default.\nconst showInlineSaveFooter = computed(() => !!props.onItemSave)\n\n// Tracks only rows the user actively moved (drag, arrow buttons) — snapshot\n// vs current-index diffing would also flag side-effect index shifts, which\n// isn't what the user means by \"unsaved\".\nconst markMoved = (key: ListEditorKey) => {\n movedKeys.value.add(key)\n}\n\n// Decoupled dirty pass — see AListEditor for rationale.\nconst dirtyKeys = computed<Set<ListEditorKey>>(() => {\n const out = new Set<ListEditorKey>()\n for (const item of modelValue.value) {\n const key = item[props.keyField] as ListEditorKey\n if (isItemDirty(key, item)) out.add(key)\n }\n return out\n})\n\n// Per-key decorator cache — see AListEditor for rationale.\nconst decoratorCache = new Map<ListEditorKey, DecoratedViewItem<TItem>>()\nconst viewItemsDecorated = computed<DecoratedViewItem<TItem>[]>(() => {\n const total = modelValue.value.length\n const next: DecoratedViewItem<TItem>[] = []\n const liveKeys = new Set<ListEditorKey>()\n for (const vi of editor.viewItems.value) {\n liveKeys.add(vi.key)\n const editing = editingKeys.value.has(vi.key)\n const expanded = expandedKeys.value.has(vi.key)\n const loading = props.loadingKeys?.has(vi.key) ?? false\n const moved = movedKeys.value.has(vi.key)\n const dirty = dirtyKeys.value.has(vi.key)\n const unsaved = dirty || moved\n const canMoveUp = vi.index > 0\n const canMoveDown = vi.index < total - 1\n const cached = decoratorCache.get(vi.key)\n if (\n cached &&\n cached.raw === vi.raw &&\n cached.index === vi.index &&\n cached.position === vi.position &&\n cached.editing === editing &&\n cached.expanded === expanded &&\n cached.loading === loading &&\n cached.dirty === dirty &&\n cached.moved === moved &&\n cached.unsaved === unsaved &&\n cached.canMoveUp === canMoveUp &&\n cached.canMoveDown === canMoveDown\n ) {\n next.push(cached)\n continue\n }\n const decorated: DecoratedViewItem<TItem> = {\n ...vi,\n editing,\n expanded,\n loading,\n dirty,\n moved,\n unsaved,\n canMoveUp,\n canMoveDown,\n }\n decoratorCache.set(vi.key, decorated)\n next.push(decorated)\n }\n for (const key of decoratorCache.keys()) {\n if (!liveKeys.has(key)) decoratorCache.delete(key)\n }\n return next\n})\n\nconst isEmpty = computed(() => viewItemsDecorated.value.length === 0)\n\nconst findVi = (key: ListEditorKey): DecoratedViewItem<TItem> | undefined =>\n viewItemsDecorated.value.find((v) => v.key === key)\n\nconst keyboardNav = useKeyboardNav({\n viewItems: computed(() => viewItemsDecorated.value.map((vi) => ({ key: vi.key }))),\n variant: 'sortable',\n isReorderMode: reorderMode,\n disabled: computed(() => !canInteract.value),\n isEditing: (key) => editingKeys.value.has(key),\n onToggleEdit: (key) => {\n const vi = findVi(key)\n if (vi) onEditClick(vi)\n },\n onCancelEdit: (key) => {\n const vi = findVi(key)\n if (vi) onCloseClick(vi)\n },\n onMoveUp: (key) => {\n const vi = findVi(key)\n if (vi) moveUp(vi.index)\n },\n onMoveDown: (key) => {\n const vi = findVi(key)\n if (vi) moveDown(vi.index)\n },\n onMoveTop: (key) => {\n const vi = findVi(key)\n if (vi) moveTop(vi.index)\n },\n onMoveBottom: (key) => {\n const vi = findVi(key)\n if (vi) moveBottom(vi.index)\n },\n onCancelReorder: () => cancelReorderMode(),\n})\n\nconst moveToPositionDialogOpen = ref<boolean>(false)\nconst moveToPositionTarget = shallowRef<DecoratedViewItem<TItem> | null>(null)\nconst moveToPositionLabel = computed<string>(() =>\n moveToPositionTarget.value\n ? resolveCompactText(moveToPositionTarget.value.raw, moveToPositionTarget.value.key)\n : '',\n)\nconst openMoveToPosition = (vi: DecoratedViewItem<TItem>) => {\n if (!props.showMoveToPosition) return\n moveToPositionTarget.value = vi\n moveToPositionDialogOpen.value = true\n}\nconst onMoveToPositionConfirm = (newIndex: number) => {\n const target = moveToPositionTarget.value\n moveToPositionTarget.value = null\n if (!target) return\n if (newIndex === target.index) return\n editor.moveItem(target.index, newIndex)\n markMoved(target.key)\n}\n\nconst resolveCompactText = (raw: TItem, key: ListEditorKey): string =>\n resolveCompactTextUtil(raw, key, {\n compactField: props.compactField,\n fallback: t('common.sortable.itemFallback'),\n })\n\nconst { resolveValidation } = useValidationRegistry<TItem>({\n getValidationState: (item, key, index) => props.getValidationState?.(item, key, index) ?? null,\n})\n\n// Skip SortableJS entirely on touch devices — touch users reorder via arrows + menu,\n// so the drag/drop library is never needed and there is no point paying its setup cost.\n// The one-shot reads below are intentional: touch detection is fixed at setup time,\n// and dragEnabled's initial value seeds SortableJS; later changes flow via the watch.\n/* eslint-disable vue/no-ref-object-reactivity-loss */\nif (!isTouch.value) {\n const sortable = useSortable(rowsContainer, modelValue, {\n // The rows container can mount/unmount across mode flips (e.g. when the\n // consumer renders a `#view-body` slot in view mode and the rows are\n // only mounted in reorder mode). vueuse's default `tryOnMounted` fires\n // exactly once and would bind to a null ref, leaving SortableJS dead.\n // `watchElement: true` re-initialises whenever the rows container ref\n // populates.\n watchElement: true,\n handle: '.a-le-drag-handle',\n animation: 150,\n // Force the fallback renderer so `dragClass` is applied to a CSS-controlled\n // clone that follows the cursor — gives us a custom, row-shaped ghost\n // instead of the opaque browser-native drag bitmap.\n forceFallback: true,\n fallbackTolerance: 3,\n fallbackOnBody: true,\n ghostClass: DRAG_GHOST_CLASS,\n chosenClass: DRAG_CHOSEN_CLASS,\n dragClass: DRAG_CLASS,\n disabled: !dragEnabled.value,\n onEnd: (event) => {\n // Resolve which row was dragged by reading its data-id attribute\n // (set via template binding on .row). SortableJS's `event.item` is\n // the moved DOM element; we only mark that one specific key as moved\n // rather than diffing the whole list, so siblings that shifted index\n // as a side-effect stay clean.\n const el = event.item as HTMLElement\n const raw = el.getAttribute('data-id')\n if (raw !== null && raw !== '') {\n const n = stringToInt(raw)\n const key: ListEditorKey = n > 0 ? n : raw\n markMoved(key)\n }\n if (props.updatePosition) {\n modelValue.value = editor.recalculatePositions(modelValue.value) as TItem[]\n }\n },\n })\n\n watch(dragEnabled, (enabled) => {\n sortable.option('disabled', !enabled)\n })\n}\n/* eslint-enable vue/no-ref-object-reactivity-loss */\n\nconst onAddClick = () => {\n if (!canAdd.value) return\n requestAutoOpen()\n emit('add', undefined)\n}\n\nconst onRowAddAfterClick = (vi: ListViewItem<TItem>) => {\n if (!canInteract.value) return\n requestAutoOpen()\n emit('add', { afterId: vi.key })\n}\n\nconst onEditClick = (vi: ListViewItem<TItem>) => {\n if (!canInteract.value) return\n if (reorderMode.value && !props.allowEditInReorder) return\n // Toggle: clicking edit while already editing closes the form, matching the\n // row-header click behaviour.\n if (editingKeys.value.has(vi.key)) {\n onCloseClick(vi)\n return\n }\n if (isInlineEdit.value) {\n beginEdit(vi)\n expandedKeys.value.delete(vi.key)\n }\n emit('edit', vi)\n}\n\nconst onExpandClick = (vi: ListViewItem<TItem>) => {\n if (props.disabled || props.loading) return\n if (reorderMode.value && !props.allowEditInReorder) return\n const key = vi.key\n const currentlyExpanded = expandedKeys.value.has(key)\n if (currentlyExpanded) {\n expandedKeys.value.delete(key)\n } else {\n for (const k of expandedKeys.value) expandedKeys.value.delete(k)\n expandedKeys.value.add(key)\n }\n emit('item-expand', vi, !currentlyExpanded)\n}\n\nconst isRowClickable = (vi: DecoratedViewItem<TItem>): boolean => {\n if (props.chips) return false\n if (props.disableRowClick) return false\n if (props.disabled || props.loading) return false\n if (reorderMode.value && !props.allowEditInReorder) return false\n if (vi.editing || vi.expanded) return true\n if (!props.readonly && props.showEditButton) return true\n return false\n}\n\nconst onRowClick = (vi: DecoratedViewItem<TItem>) => {\n if (!isRowClickable(vi)) return\n if (vi.editing || vi.expanded) {\n onCloseClick(vi)\n return\n }\n if (props.readonly && hasReadonlyDetail.value) {\n onExpandClick(vi)\n } else {\n onEditClick(vi)\n }\n}\n\nconst {\n deleteDialog,\n deleteInFlight,\n deleteError,\n onDeleteClick: triggerDeleteClick,\n onDeleteDialogConfirm,\n onDeleteDialogCancel,\n} = useDeleteDialog<TItem, ListViewItem<TItem>>({\n onDeleteConfirm: (raw) => (props.onDeleteConfirm ? props.onDeleteConfirm(raw) : true),\n onDelete: (raw) => props.onDelete?.(raw),\n onDeleted: (vi) => {\n editingKeys.value.delete(vi.key)\n editingSnapshots.value.delete(vi.key)\n expandedKeys.value.delete(vi.key)\n emit('deleted', vi)\n },\n disableDeleteConfirm: () => props.disableDeleteConfirm || props.chips,\n})\n\nconst onDeleteClick = async (vi: ListViewItem<TItem>) => {\n if (!canInteract.value) return\n await triggerDeleteClick(vi)\n}\n\nconst onSaveClick = async (vi: ListViewItem<TItem>) => {\n if (props.onItemSave) {\n await props.onItemSave(vi.raw)\n }\n commitEdit(vi)\n emit('item-saved', vi)\n}\n\nconst onCancelClick = (vi: ListViewItem<TItem>) => {\n cancelEdit(vi)\n}\n\nconst onCloseClick = (vi: ListViewItem<TItem>) => {\n closeEdit(vi)\n expandedKeys.value.delete(vi.key)\n emit('close', vi)\n}\n\nconst keyAtIndex = (idx: number): ListEditorKey | null => {\n const item = modelValue.value[idx]\n if (!item) return null\n return item[props.keyField] as ListEditorKey\n}\n\nconst moveUp = (idx: number) => {\n if (idx <= 0) return\n const key = keyAtIndex(idx)\n editor.moveItem(idx, idx - 1)\n if (key !== null) markMoved(key)\n}\nconst moveDown = (idx: number) => {\n if (idx >= modelValue.value.length - 1) return\n const key = keyAtIndex(idx)\n editor.moveItem(idx, idx + 1)\n if (key !== null) markMoved(key)\n}\nconst moveTop = (idx: number) => {\n if (idx <= 0) return\n const key = keyAtIndex(idx)\n editor.moveItem(idx, 0)\n if (key !== null) markMoved(key)\n}\nconst moveBottom = (idx: number) => {\n if (idx >= modelValue.value.length - 1) return\n const key = keyAtIndex(idx)\n editor.moveItem(idx, modelValue.value.length - 1)\n if (key !== null) markMoved(key)\n}\n\n// Per-key actions cache: stable identity per row, see equivalent block in\n// AListEditor for rationale. Closures capture key (stable) and look up the\n// current vi via findVi at call time.\ntype ActionsBundle = {\n edit: () => void\n save: () => Promise<void> | void\n cancel: () => void\n close: () => void\n delete: () => Promise<void>\n addAfter: () => void\n toggleExpand: () => void\n moveUp: () => void\n moveDown: () => void\n moveTop: () => void\n moveBottom: () => void\n update: (data: TItem) => TItem[]\n}\nconst actionsCache = new Map<ListEditorKey, ActionsBundle>()\nconst getActions = (key: ListEditorKey): ActionsBundle => {\n let actions = actionsCache.get(key)\n if (!actions) {\n actions = {\n edit: () => {\n const vi = findVi(key)\n if (vi) onEditClick(vi)\n },\n save: () => {\n const vi = findVi(key)\n if (vi) return onSaveClick(vi)\n },\n cancel: () => {\n const vi = findVi(key)\n if (vi) onCancelClick(vi)\n },\n close: () => {\n const vi = findVi(key)\n if (vi) onCloseClick(vi)\n },\n delete: async () => {\n const vi = findVi(key)\n if (vi) await onDeleteClick(vi)\n },\n addAfter: () => {\n const vi = findVi(key)\n if (vi) onRowAddAfterClick(vi)\n },\n toggleExpand: () => {\n const vi = findVi(key)\n if (vi) onExpandClick(vi)\n },\n moveUp: () => {\n const vi = findVi(key)\n if (vi) moveUp(vi.index)\n },\n moveDown: () => {\n const vi = findVi(key)\n if (vi) moveDown(vi.index)\n },\n moveTop: () => {\n const vi = findVi(key)\n if (vi) moveTop(vi.index)\n },\n moveBottom: () => {\n const vi = findVi(key)\n if (vi) moveBottom(vi.index)\n },\n update: (data: TItem) => editor.updateItem(key, data),\n }\n actionsCache.set(key, actions)\n }\n return actions\n}\nwatch(\n () => viewItemsDecorated.value,\n (now) => {\n if (actionsCache.size === 0) return\n const liveKeys = new Set(now.map((v) => v.key))\n for (const key of actionsCache.keys()) {\n if (!liveKeys.has(key)) actionsCache.delete(key)\n }\n },\n)\n\nconst buildSlotProps = (vi: DecoratedViewItem<TItem>) => ({\n item: { ...vi, validationState: resolveValidation(vi.raw as TItem, vi.key, vi.index) },\n raw: vi.raw,\n index: vi.index,\n key: vi.key,\n readonly: props.readonly,\n disabled: props.disabled,\n expanded: vi.expanded,\n editing: vi.editing,\n dirty: vi.dirty,\n unsaved: vi.unsaved,\n reorderMode: reorderMode.value,\n moved: vi.moved,\n canMoveUp: vi.canMoveUp,\n canMoveDown: vi.canMoveDown,\n touch: isTouch.value,\n actions: getActions(vi.key),\n})\n\nconst toolbarSlotProps = computed(() => ({\n applying: applying.value,\n hasPendingChanges: totalHasPendingChanges.value,\n movedCount: totalMovedCount.value,\n error: applyError.value,\n actions: {\n apply: applyReorder,\n cancel: cancelReorderMode,\n },\n}))\n\nconst reorderToggleSlotProps = computed(() => ({\n mode: mode.value,\n disabled: !canEnterReorder.value,\n hasPendingChanges: totalHasPendingChanges.value,\n actions: {\n enterReorderMode,\n exitReorderMode: cancelReorderMode,\n },\n}))\n\nconst unsavedKeysModel = defineModel<Set<ListEditorKey>>('unsavedKeys', {\n default: () => new Set<ListEditorKey>(),\n})\n\nconst internalUnsavedKeys = computed<Set<ListEditorKey>>(() => {\n const out = new Set<ListEditorKey>()\n for (const vi of viewItemsDecorated.value) {\n if (vi.unsaved) out.add(vi.key)\n }\n return out\n})\n\nconst { hasUnsavedChanges, unsavedCount, clearUnsavedState } = useUnsavedKeysSync({\n unsavedKeysModel,\n internalUnsavedKeys,\n onClearAll: () => {\n captureDirtyBaseline()\n movedKeys.value = new Set()\n },\n onClearKey: (key) => {\n rebaselineKey(key)\n movedKeys.value.delete(key)\n },\n})\n\ndefineExpose({\n addItem: editor.addItem,\n deleteItem: editor.deleteItem,\n updateItem: editor.updateItem,\n moveItem: editor.moveItem,\n recalculatePositions: editor.recalculatePositions,\n viewItems: editor.viewItems,\n resetDirtyBaseline,\n hasUnsavedChanges,\n unsavedCount,\n clearUnsavedState,\n enterReorderMode,\n cancelReorderMode,\n applyReorder,\n})\n</script>\n\n<template>\n <div\n ref=\"rootEl\"\n class=\"a-sortable-list-editor\"\n :class=\"[\n `a-sortable-list-editor--two-rows-${twoRows}`,\n `a-sortable-list-editor--mode-${mode}`,\n {\n 'a-sortable-list-editor--readonly': readonly,\n 'a-sortable-list-editor--disabled': disabled,\n 'a-sortable-list-editor--touch': isTouch,\n 'a-sortable-list-editor--drag-enabled': dragEnabled,\n 'a-sortable-list-editor--chips': chips,\n 'a-sortable-list-editor--embedded': embedded,\n 'a-sortable-list-editor--header-floating':\n !embedded && !chips && !headerHasContent && headerVisible,\n },\n ]\"\n >\n <div class=\"a-le-card\">\n <div\n v-if=\"headerVisible\"\n class=\"a-le-header\"\n >\n <slot\n name=\"header\"\n :title=\"title\"\n v-bind=\"reorderToggleSlotProps\"\n >\n <h3\n v-if=\"title\"\n class=\"a-le-title-heading\"\n >\n {{ title }}\n </h3>\n <div class=\"a-le-header-actions\">\n <template v-if=\"reorderMode && !embedded\">\n <!-- Reorder-mode header: pending-changes count + Cancel/Apply.\n Replaces the old sticky bottom toolbar — the actions sit\n where the \"Reorder\" button lives in view mode. -->\n <slot\n name=\"reorder-toolbar\"\n v-bind=\"toolbarSlotProps\"\n >\n <LeStatus\n :class=\"{ 'a-le-toolbar-status--pending': totalHasPendingChanges }\"\n :has-pending-changes=\"totalHasPendingChanges\"\n :pending-count=\"totalMovedCount\"\n :error=\"applyError\"\n />\n <VBtn\n variant=\"text\"\n size=\"small\"\n :disabled=\"applying\"\n @click=\"cancelReorderMode\"\n >\n {{ t('common.sortable.reorderCancel') }}\n </VBtn>\n <VBtn\n color=\"primary\"\n variant=\"flat\"\n size=\"small\"\n prepend-icon=\"mdi-check\"\n :loading=\"applying\"\n :disabled=\"applying || !totalHasPendingChanges\"\n @click=\"applyReorder\"\n >\n {{ t('common.sortable.reorderApply') }}\n </VBtn>\n </slot>\n </template>\n <slot\n v-else-if=\"reorderToggleVisible\"\n name=\"reorder-toggle\"\n v-bind=\"reorderToggleSlotProps\"\n >\n <VBtn\n v-if=\"compactReorderButton\"\n variant=\"tonal\"\n color=\"primary\"\n icon\n size=\"x-small\"\n :disabled=\"!canEnterReorder\"\n @click=\"enterReorderMode\"\n >\n <VIcon\n icon=\"mdi-sort\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.reorder')\"\n />\n </VBtn>\n <VBtn\n v-else\n variant=\"tonal\"\n color=\"primary\"\n prepend-icon=\"mdi-sort\"\n size=\"small\"\n :disabled=\"!canEnterReorder\"\n @click=\"enterReorderMode\"\n >\n {{ t('common.sortable.reorder') }}\n </VBtn>\n </slot>\n </div>\n </slot>\n </div>\n\n <div\n v-if=\"loading\"\n class=\"a-le-state a-le-state--loading\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n size=\"32\"\n />\n </div>\n\n <div\n v-else-if=\"error\"\n class=\"a-le-state a-le-state--error\"\n >\n <VAlert\n type=\"error\"\n variant=\"tonal\"\n density=\"compact\"\n border=\"start\"\n >\n {{ error }}\n </VAlert>\n </div>\n\n <div\n v-else-if=\"!reorderMode && $slots['view-body']\"\n class=\"a-le-view-body\"\n >\n <slot\n name=\"view-body\"\n :items=\"modelValue\"\n :mode=\"mode\"\n :actions=\"{ enterReorderMode }\"\n />\n </div>\n\n <div\n v-else-if=\"isEmpty\"\n class=\"a-le-state a-le-state--empty\"\n >\n <slot\n name=\"empty\"\n :readonly=\"readonly\"\n :disabled=\"disabled\"\n :actions=\"{ add: onAddClick }\"\n >\n <LeEmptyState\n :title=\"emptyTitleResolved\"\n :text=\"emptyTextResolved\"\n :add-label=\"addLabelResolved\"\n :can-add=\"canAdd\"\n @add=\"onAddClick\"\n />\n </slot>\n </div>\n\n <div\n v-else\n ref=\"rowsContainer\"\n class=\"a-sortable-list-editor__rows\"\n >\n <div\n v-for=\"vi in viewItemsDecorated\"\n :key=\"String(vi.key)\"\n :data-id=\"String(vi.key)\"\n role=\"listitem\"\n :tabindex=\"keyboardNav.rowTabindex(vi.key)\"\n class=\"a-le-row\"\n :class=\"{\n 'a-le-row--two-rows': twoRows === 'always',\n 'a-le-row--editing': vi.editing,\n 'a-le-row--expanded': vi.expanded,\n 'a-le-row--unsaved': vi.unsaved,\n 'a-le-row--reorder': reorderMode,\n 'a-le-row--grabbed': keyboardNav.isGrabbed(vi.key),\n 'a-le-row--clickable': isRowClickable(vi),\n [`a-le-row--validation-${resolveValidation(vi.raw, vi.key, vi.index)}`]:\n resolveValidation(vi.raw, vi.key, vi.index) !== null,\n }\"\n @keydown=\"keyboardNav.handleKeydown(vi.key, $event)\"\n >\n <slot\n name=\"before-item\"\n v-bind=\"buildSlotProps(vi)\"\n />\n\n <div\n class=\"a-le-row-header\"\n @click=\"onRowClick(vi)\"\n >\n <LeDragHandle v-if=\"dragEnabled\" />\n\n <div class=\"a-le-row-main\">\n <slot\n name=\"item-compact\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <span class=\"a-le-title\">\n {{ resolveCompactText(vi.raw, vi.key) }}\n </span>\n </slot>\n <LeUnsavedLabel v-if=\"vi.unsaved\" />\n </div>\n\n <div\n v-if=\"!chips && !reorderMode\"\n class=\"a-le-status\"\n >\n <slot\n name=\"item-status\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <span\n v-if=\"statusField && vi.raw[statusField] != null && vi.raw[statusField] !== ''\"\n class=\"a-le-status-badge\"\n >\n {{ vi.raw[statusField] }}\n </span>\n </slot>\n </div>\n\n <div class=\"a-le-actions\">\n <slot\n name=\"item-actions\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <VBtn\n v-if=\"chips && showDeleteButton && canInteract\"\n icon\n size=\"x-small\"\n variant=\"text\"\n density=\"compact\"\n :active=\"false\"\n class=\"a-le-action a-le-action--chip-close\"\n @click.stop=\"onDeleteClick(vi)\"\n >\n <VIcon\n icon=\"mdi-close\"\n size=\"14\"\n />\n </VBtn>\n <template v-else-if=\"reorderMode\">\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :disabled=\"!vi.canMoveUp\"\n class=\"mx-1 a-le-action a-le-action--up\"\n @click.stop=\"moveUp(vi.index)\"\n >\n <VIcon\n icon=\"mdi-arrow-up\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.moveUp')\"\n />\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :disabled=\"!vi.canMoveDown\"\n class=\"mx-1 a-le-action a-le-action--down\"\n @click.stop=\"moveDown(vi.index)\"\n >\n <VIcon\n icon=\"mdi-arrow-down\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.moveDown')\"\n />\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :active=\"false\"\n class=\"mx-1 a-le-action a-le-action--menu\"\n >\n <VIcon\n icon=\"mdi-dots-vertical\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.more')\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem\n :disabled=\"!vi.canMoveUp\"\n @click.stop=\"moveTop(vi.index)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-arrow-collapse-up\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.moveToTop') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n :disabled=\"!vi.canMoveDown\"\n @click.stop=\"moveBottom(vi.index)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-arrow-collapse-down\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.moveToBottom') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-if=\"showMoveToPosition && viewItemsDecorated.length > 1\"\n @click.stop=\"openMoveToPosition(vi)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-target\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.moveToPosition.action') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-if=\"showAddAfterAction && canInteract\"\n @click.stop=\"onRowAddAfterClick(vi)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-plus\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.addAfter') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-if=\"showDeleteButton && canInteract\"\n @click.stop=\"onDeleteClick(vi)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-trash-can-outline\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.delete') }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </template>\n <template v-else>\n <VBtn\n v-if=\"showEditButton && canInteract\"\n icon\n size=\"small\"\n variant=\"tonal\"\n color=\"primary\"\n density=\"comfortable\"\n class=\"mx-1 a-le-action a-le-action--edit\"\n @click.stop=\"onEditClick(vi)\"\n >\n <VIcon\n icon=\"mdi-pencil-outline\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.edit')\"\n />\n </VBtn>\n <VBtn\n v-if=\"showDeleteButton && canInteract\"\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n class=\"mx-1 a-le-action a-le-action--delete\"\n @click.stop=\"onDeleteClick(vi)\"\n >\n <VIcon\n icon=\"mdi-trash-can-outline\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.delete')\"\n />\n </VBtn>\n <VBtn\n v-if=\"showAddAfterAction && canInteract\"\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :active=\"false\"\n class=\"mx-1 a-le-action a-le-action--menu\"\n >\n <VIcon\n icon=\"mdi-dots-vertical\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.more')\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem @click.stop=\"onRowAddAfterClick(vi)\">\n <template #prepend>\n <VIcon icon=\"mdi-plus\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.addAfter') }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </template>\n </slot>\n </div>\n </div>\n\n <template v-if=\"vi.editing && (allowEditInReorder || !reorderMode) && $slots.item\">\n <div class=\"a-le-row-body\">\n <div class=\"a-le-form\">\n <slot\n name=\"item\"\n v-bind=\"buildSlotProps(vi)\"\n />\n </div>\n </div>\n <slot\n name=\"item-footer\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <div\n v-if=\"showInlineSaveFooter && !reorderMode\"\n class=\"a-le-row-footer\"\n >\n <div class=\"a-le-row-footer-spacer\" />\n <VBtn\n variant=\"text\"\n :disabled=\"vi.loading\"\n @click.stop=\"onCancelClick(vi)\"\n >\n {{ t('common.button.cancel') }}\n </VBtn>\n <VBtn\n color=\"primary\"\n variant=\"flat\"\n prepend-icon=\"mdi-check\"\n :disabled=\"vi.loading\"\n @click.stop=\"onSaveClick(vi)\"\n >\n {{ t('common.button.save') }}\n </VBtn>\n </div>\n </slot>\n </template>\n\n <div\n v-else-if=\"\n $slots['item-readonly'] &&\n (readonly || vi.expanded) &&\n (allowEditInReorder || !reorderMode)\n \"\n class=\"a-le-row-body\"\n >\n <div class=\"a-le-form\">\n <slot\n name=\"item-readonly\"\n v-bind=\"buildSlotProps(vi)\"\n />\n </div>\n </div>\n\n <slot\n name=\"after-item\"\n v-bind=\"buildSlotProps(vi)\"\n />\n </div>\n </div>\n\n <slot\n v-if=\"canAdd && !loading && !error && !isEmpty\"\n name=\"add-button\"\n :readonly=\"readonly\"\n :disabled=\"disabled\"\n :props=\"{ onClick: onAddClick }\"\n :actions=\"{ add: onAddClick }\"\n >\n <button\n type=\"button\"\n class=\"a-le-row-add\"\n @click=\"onAddClick\"\n >\n <VIcon\n icon=\"mdi-plus\"\n size=\"18\"\n />\n <span>{{ addLabelResolved }}</span>\n </button>\n </slot>\n </div>\n\n <LeMoveToPositionDialog\n v-model=\"moveToPositionDialogOpen\"\n :total=\"viewItemsDecorated.length\"\n :current-index=\"moveToPositionTarget?.index ?? 0\"\n :item-label=\"moveToPositionLabel\"\n @confirm=\"onMoveToPositionConfirm\"\n />\n\n <LeDeleteDialog\n v-model=\"deleteDialog\"\n :title=\"deleteConfirmTitleResolved\"\n :text=\"deleteConfirmTextResolved\"\n :confirm-label=\"t('common.sortable.delete')\"\n :cancel-label=\"t('common.button.cancel')\"\n :error=\"deleteError\"\n :in-flight=\"deleteInFlight\"\n @confirm=\"onDeleteDialogConfirm\"\n @cancel=\"onDeleteDialogCancel\"\n />\n\n <div\n class=\"a-le-sr-only\"\n aria-live=\"polite\"\n role=\"status\"\n >\n {{\n keyboardNav.grabbedKey.value !== null\n ? t('common.sortable.keyboardGrab.status', {\n n: keyboardNav.grabbedIndex.value + 1,\n total: keyboardNav.totalCount.value,\n })\n : ''\n }}\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use './styles/tokens';\n@use './styles/shared';\n\n// Variant-specific rules for ASortableListEditor — reorder-mode trims, drag\n// clone styling, chips flex-wrap layout, and the validation rail.\n.a-sortable-list-editor {\n &__rows {\n display: flex;\n flex-direction: column;\n }\n\n // View-mode body slot — gives the consumer's slot content breathing room\n // inside the editor card. Match the row's horizontal rhythm (~16 px) and\n // add a modest vertical inset so cards don't sit flush against the border.\n .a-le-view-body {\n padding: 12px 16px;\n }\n\n // Reorder-mode trims the row-header padding since the drag handle already\n // eats some of the horizontal rhythm.\n .a-le-row--reorder .a-le-row-header {\n padding-left: 12px;\n padding-right: 8px;\n gap: 8px;\n }\n\n // Drag rendering — SortableJS clone + ghost + chosen source.\n .a-le-row--ghost {\n opacity: 0.35;\n background: var(--le-primary-state);\n }\n\n .a-le-row--chosen {\n opacity: 0.5;\n }\n\n // Floating clone that follows the cursor. Row-shaped card with elevation;\n // action column and status badge hidden so the preview stays clean.\n .a-le-row--drag {\n background: var(--le-surface);\n border: 1px solid var(--le-border);\n border-radius: var(--le-radius);\n box-shadow: var(--le-elev-3);\n max-width: 420px;\n opacity: 0.96;\n pointer-events: none;\n }\n\n .a-le-row--drag .a-le-actions,\n .a-le-row--drag .a-le-status {\n display: none;\n }\n\n // Floating-header variant — when the only thing in the header is the\n // Reorder button, drop the band entirely and float the button absolutely\n // over the editor's top-right corner so we don't waste ~50 px of vertical\n // rhythm on an empty bar.\n &--header-floating .a-le-card {\n position: relative;\n }\n\n &--header-floating .a-le-header {\n position: absolute;\n top: 6px;\n right: 6px;\n padding: 0;\n background: transparent;\n border: none;\n z-index: 2;\n }\n\n &--header-floating .a-le-header-actions {\n margin-left: 0;\n }\n\n // Embedded variant — this editor sits inside another editor's row. Drop\n // the card chrome (border, shadow), tighten rows, lighten background so it\n // visually reads as part of the parent's body, not a sibling list.\n &--embedded .a-le-card {\n background: transparent;\n border: none;\n box-shadow: none;\n border-radius: 0;\n }\n\n &--embedded .a-le-header {\n padding: 4px 0 6px;\n background: transparent;\n border: none;\n }\n\n &--embedded .a-le-title-heading {\n font-size: 13px;\n font-weight: 500;\n color: var(--le-on-surface-medium, rgb(0 0 0 / 70%));\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n\n &--embedded .a-le-row {\n background: var(--le-surface);\n border: 1px solid var(--le-border);\n border-radius: 6px;\n margin-bottom: 4px;\n }\n\n &--embedded .a-le-row:last-of-type {\n margin-bottom: 0;\n }\n\n &--embedded .a-le-row-add {\n min-height: var(--le-row-min-height);\n padding: 0 16px;\n background: transparent;\n border: 1px dashed var(--le-border);\n border-radius: 6px;\n color: var(--le-primary);\n margin-top: 4px;\n width: 100%;\n }\n\n &--embedded .a-le-row-add:hover {\n background: var(--le-primary-state);\n border-style: solid;\n }\n\n // Chips-layout variant-specific overrides — `__rows` flex-wraps into pills,\n // `row-header` gets the drag-handle-friendly 8 px left padding (vs 12 px\n // in AListEditor), `drag-handle` shrinks to match the pill height.\n &--chips &__rows {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n flex: 1 1 100%;\n }\n\n &--chips .a-le-row-header {\n padding: 2px 4px 2px 8px;\n gap: 4px;\n min-height: 28px;\n }\n\n &--chips .a-le-drag-handle {\n padding: 0;\n font-size: 16px;\n }\n}\n\n// Narrow-container / mobile layout — taller rows, always-visible actions,\n// status badge dropped to make room.\n/* stylelint-disable selector-max-compound-selectors */\n@container le-shell (max-width: 768px) {\n .a-sortable-list-editor {\n --le-row-min-height: 48px;\n --le-row-pad-y: 10px;\n\n .a-le-row:not(.a-le-row--editing) .a-le-status {\n display: none;\n }\n\n .a-le-row .a-le-action--edit,\n .a-le-row .a-le-action--delete,\n .a-le-row .a-le-action--menu,\n .a-le-row .a-le-action--up,\n .a-le-row .a-le-action--down {\n opacity: 1;\n }\n }\n}\n/* stylelint-enable selector-max-compound-selectors */\n</style>\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 (\n isUndefined(filterInnerConfig.fields[filterByFieldProp]) ||\n isUndefined(filterInnerData[filterByFieldProp])\n) {\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>(\n 'selected',\n {\n required: false,\n default: null,\n set(newValue) {\n return isArray(newValue) ? cloneDeep(newValue) : newValue\n },\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 } =\n useCollabField(props.collab.room, props.collab.field)\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(\n isNull(filterSortByProp) ? null : filterSortByProp.key,\n 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 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) ??\n ({ 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 (\n mode: 'focus' | 'hover' | 'mounted' | 'force',\n newValue: ModelValueType,\n) => {\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 mode === 'mounted' &&\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 = (\n newValue: ValueObjectOption<T> | readonly ValueObjectOption<T>[] | null,\n) => {\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, internalItem }\">\n <VListItem\n v-bind=\"itemProps\"\n :title=\"internalItem.raw.title\"\n :subtitle=\"internalItem.raw.subtitle\"\n />\n </template>\n <template #chip=\"{ props: chipProps, internalItem }\">\n <VChip\n :closable=\"chipProps.closable as boolean\"\n size=\"small\"\n :text=\"`${internalItem.title} (${internalItem.raw.subtitle})`\"\n :disabled=\"internalItem.props.disabled\"\n @click:close=\"onChipCloseClick(internalItem.raw)\"\n >\n {{ internalItem.raw.title }}\n <span\n v-if=\"internalItem.raw.subtitle\"\n class=\"font-italic pl-1\"\n >\n ({{ internalItem.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","_data","_options","acquireFieldLock","lockedByUserLocal","releaseCollabFieldLock","acquireCollabFieldLock","system","inject","subject","onUpdate","onBlur","onFocus","errorMessageComputed","labelComputed","requiredComputed","disabledComputed","__expose","_component_VTextField","_cache","$event","ACollabLockedByUser","$slots","REQUIRED_LOCALES","slovakPluralizationRule","choice","choicesLength","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","r","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","$","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","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","storedPage","preservePage","useDatatablePageStore","page","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","consumeStoredPage","source","storedFromHash","restoredPage","tryConvertNumber","tryConvertBoolean","TimeIntervalSpecialOptions","useTimeIntervalOptions","allowed","timeIntervalOptions","useFilterTimeIntervalValidators","dialogData","datesCompare","fromComputed","untilComputed","useApiQueryBuilder","querySetLimit","queryAdd","querySetOffset","limit","querySetOrder","desc","formatValue","queryAddFilter","filterVariant","resolveTimeIntervalFilter","fromName","untilName","mandatory","exclude","fromValue","untilValue","getValue","isSimpleFilters","filterFieldValue","filterFieldConfig","nameRelated","isApiResponseList","isApiInfiniteResponseList","generateListQuery","queryBuild","querySetFilters","useApiFetchList","silentConsoleError","abortController","fetchParams","urlTemplateOverride","urlParamsOverride","forceElastic","searchApi","resolvedParams","resData","createDefaultPaginationOptions","sortKey","sortOrder","externalPaginationRef","mergedOptions","setSortBy","arg1","arg2","apiCreateOne","FilterDataKey","FilterConfigKey","FilterInnerDataKey","FilterInnerConfigKey","FilterSubmitResetCounterKey","FilterSelectedKey","DatatablePaginationKey","SubjectSelectCloseSidebarKey","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","internalItem","_component_VListItem","chipProps","_component_VChip","isOneOf","enumValues","autoFetchTimer","finalRaw","findLocalDataByValues","found","tryToLoadFromLocalData","count","foundItems","autoFetched","clearAutoFetchTimer","autoFetch","itemItem","chipItem","modelItemValue","getTimeIntervalOption","modelInternal","dialogCustom","displayFromTo","onDialogConfirm","onDialogClose","customOption","onEditInterval","clear","filterDataUntil","fromNewValue","untilNewValue","fromOldValue","untilOldValue","onInternalItemChange","_component_VTextarea","_component_VDialog","ADialogToolbar","_component_VCardText","ARow","AFormDatetimePicker","_component_VCardActions","_component_ABtnTertiary","_component_ABtnPrimary","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","executeParams","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","_defineProperty","_toPropertyKey","_extends","ownKeys","_objectSpread2","_objectWithoutProperties","_objectWithoutPropertiesLoose","_toPrimitive","_typeof","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","checkEl","_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","watchElement","resetOptions","defaultOptions","moveArrayElement","cleanup","initSortable","start","unrefElement","stopWatch","newElement","tryOnMounted","stop","tryOnScopeDispose","insertNodeAt","parentElement","refElement","removeNode","node","_valueIsRef","array","toValue","byteToHex","unsafeStringify","offset","rnds8","rng","_state","v1","buf","bytes","rnds","updateV1State","v1Bytes","msecs","nsecs","clockseq","tl","tmh","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","nestedSortable","needsRefresh","refresh","onBeforeUnmount","_withModifiers","withModifiers","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_VTabs","_component_VTab","AFormTextField","AFormSwitch","ASortable","dialog","FilterBookmarkDialog","closeSidebarOnMobile","provide","submitFilter","submitFilterBookmark","resetFilter","touched","renderedFieldNames","_component_VForm","FilterBookmarks","FilterDetailItem","AFilterSubmitButton","AFilterResetButton","AFilterBookmarkButton","active","getTitleFromConfig","titleT","selectedArray","fieldOrder","valueArray","clickClose","showDetail","toggleFilterDetail","AFilterAdvancedButton","FiltersSelected","apiDeleteOne","useContainerWidth","useElementSize","isNarrow","useKeyboardNav","focusedKey","grabbedKey","orderedKeys","isGrabbed","grabbedIndex","totalCount","rowTabindex","ordered","focusRowElement","setFocus","prevOrderedKeys","fallbackIndex","releaseGrab","isFormField","handleKeydown","focusedItem","inReorder","isGrabbedNow","grabbedSomewhere","onFormField","ListEditorValidationKey","useListEditorItemValidation","registry","stateRef","lastKey","isValidState","useValidationRegistry","itemValidationStates","raw","fromRegistry","fromProp","useListEditor","keyField","positionField","positionMultiplier","updatePositionEnabled","viewItems","recalculatePositions","newPosition","finalize","isItem","resolveIndexByKey","resolveIndex","idOrItem","resolveInsertIndex","hint","positionHint","insertIndex","fromIndex","toIndex","len","resolveCompactText","pick","fromField","setsEqual","useUnsavedKeysSync","suppressNextModelWatch","hasUnsavedChanges","unsavedCount","useDirtyBaseline","getEntries","excludeFields","hasExcludes","excludeSet","stringifyContent","copy","dirtyBaseline","captureDirtyBaseline","next","rebaselineKey","entry","isItemDirty","baseline","stopInitialFillWatch","useDeleteDialog","deleteDialog","deleteTarget","deleteInFlight","deleteError","performDelete","vi","useInlineEditing","editingKeys","editingSnapshots","pendingAutoOpen","clearEditing","beginEdit","cancelEdit","snap","commitEdit","closeEdit","requestAutoOpen","newKeys","oldKeys","oldSet","addedKey","SharedReorderRegistryKey","useReorderMode","applying","applyError","reorderMode","movedCount","hasPendingChanges","clonePayload","isEmbedded","enterReorderMode","cancelReorderMode","applyReorder","newMode","oldMode","open","_component_VCardTitle","_component_VAlert","$emit","targetPosition","totalLabel","isInvalid","DRAG_GHOST_CLASS","DRAG_CHOSEN_CLASS","slots","useSlots","display","useDisplay","isTouch","editor","expandedKeys","movedKeys","resetDirtyBaseline","snapshot","rowsContainer","isInlineEdit","hasReadonlyDetail","hit","canInteract","canEnterReorder","embeddedRef","allowEditInReorderRef","childContributions","shallowReactive","hasChanges","totalMovedCount","totalHasPendingChanges","canAdd","dragEnabled","addLabelResolved","emptyTitleResolved","emptyTextResolved","deleteConfirmTitleResolved","deleteConfirmTextResolved","reorderToggleVisible","compactReorderButton","headerVisible","headerHasContent","showInlineSaveFooter","markMoved","dirtyKeys","out","decoratorCache","viewItemsDecorated","total","liveKeys","editing","expanded","unsaved","canMoveUp","canMoveDown","decorated","findVi","keyboardNav","moveUp","moveDown","moveTop","moveBottom","moveToPositionDialogOpen","moveToPositionTarget","moveToPositionLabel","openMoveToPosition","onMoveToPositionConfirm","resolveCompactTextUtil","resolveValidation","enabled","onAddClick","onRowAddAfterClick","onCloseClick","onExpandClick","currentlyExpanded","isRowClickable","onRowClick","triggerDeleteClick","onDeleteDialogConfirm","onDeleteDialogCancel","onSaveClick","onCancelClick","keyAtIndex","actionsCache","getActions","actions","buildSlotProps","toolbarSlotProps","reorderToggleSlotProps","unsavedKeysModel","internalUnsavedKeys","clearUnsavedState","_normalizeProps","LeStatus","_hoisted_6","_hoisted_7","_hoisted_8","LeEmptyState","LeDragHandle","_hoisted_11","_hoisted_12","LeUnsavedLabel","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","LeMoveToPositionDialog","LeDeleteDialog","_hoisted_21","modelValueSelected","loadingLocal","loadingComputed","tryLoadModelValue","tryLoadValue","prefetch","idsToFetch","fetchedData","onChipCloseClick","closedItem","onAutocompleteModelUpdate","cloned"],"mappings":"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","x_google_ignoreList":[17,28,29,30,84,85,86,87,88,89]}
|