@anzusystems/common-admin 1.47.0-beta.dev-1778754008 → 1.47.0-beta.dev-1782072279
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-CfOzQkN3.mjs +9377 -0
- package/dist/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-CfOzQkN3.mjs.map +1 -0
- package/dist/common-admin.css +1 -1
- package/dist/common-admin.d.ts +2 -0
- package/dist/common-admin.js +1834 -1823
- package/dist/common-admin.js.map +1 -1
- package/dist/{index-CnmSBs3P.mjs → index-BvpuJJFr.mjs} +5582 -5560
- package/dist/index-BvpuJJFr.mjs.map +1 -0
- package/dist/labs.d.ts +339 -161
- package/dist/labs.js +2329 -2115
- package/dist/labs.js.map +1 -1
- package/dist/{webfontloader-BAw7I9Gb.mjs → webfontloader-DqfwVp99.mjs} +2 -2
- package/dist/{webfontloader-BAw7I9Gb.mjs.map → webfontloader-DqfwVp99.mjs.map} +1 -1
- package/package.json +11 -11
- package/dist/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-Bkvi5ifJ.mjs +0 -9517
- package/dist/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-Bkvi5ifJ.mjs.map +0 -1
- package/dist/index-CnmSBs3P.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang-CfOzQkN3.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-Cc5LKbDD.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/form/AFormRemoteAutocompleteWithCached.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/useIsTouchDevice.ts","../src/labs/listEditor/composables/useKeyboardNav.ts","../src/labs/listEditor/utils/positions.ts","../src/labs/listEditor/utils/tempId.ts","../src/labs/listEditor/composables/useListEditorController.ts","../src/labs/listEditor/composables/resolveCompactText.ts","../src/labs/unsavedGuard/useUnsavedSection.ts","../src/labs/listEditor/composables/useDeleteDialog.ts","../src/labs/listEditor/composables/useInlineEditing.ts","../src/labs/listEditor/utils/revealInvalidRows.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=/\\[([^\\]]+)]|YYYY|YY|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}(),Y=_.prototype;return O.prototype=Y,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){Y[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 { computed, isRef, nextTick, toValue, watch } from \"vue\";\nimport { defaultDocument, tryOnMounted, tryOnScopeDispose, unrefElement } from \"@vueuse/core\";\nimport Sortable from \"sortablejs\";\n\n//#region useSortable/index.ts\n/**\n* Wrapper for sortablejs.\n* @param el\n* @param list\n* @param options\n*/\nfunction useSortable(el, list, options = {}) {\n\tlet sortable;\n\tconst { document = defaultDocument, watchElement = false,...resetOptions } = options;\n\tconst defaultOptions = { onUpdate: (e) => {\n\t\tmoveArrayElement(list, e.oldIndex, e.newIndex, e);\n\t} };\n\tconst element = computed(() => typeof el === \"string\" ? document === null || document === void 0 ? void 0 : document.querySelector(el) : unrefElement(el));\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 = element.value;\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(element, (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\n//#endregion\nexport { useSortable as i, moveArrayElement as n, removeNode as r, insertNodeAt as t };","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","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 { watchDebounced } from '@vueuse/core'\nimport { computed, getCurrentInstance, inject, type Ref, ref, watch } from 'vue'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\nimport type { Pagination } from '@/labs/filters/pagination'\nimport { usePagination } from '@/labs/filters/pagination'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { cloneDeep, isArray, isNull, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { FilterConfig, FilterData } from '@/labs/filters/filterFactory'\nimport { FilterInnerConfigKey, FilterInnerDataKey } from '@/labs/filters/filterInjectionKeys'\nimport type { DatatableSortBy } from '@/composables/system/datatableColumns'\nimport { useAlerts } from '@/composables/system/alerts'\n\ntype FetchItemsMinimalType = (\n pagination: Ref<Pagination>,\n filterData: FilterData,\n filterConfig: FilterConfig,\n) => Promise<any[]>\n\ntype UseCachedType = () => {\n fetch: any\n add: any\n addManualMinimal: any\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n label?: string | undefined\n required?: boolean\n multiple?: boolean\n clearable?: boolean\n v?: any\n errorMessage?: string\n hideLabel?: boolean\n fetchItemsMinimal: FetchItemsMinimalType\n filterByField?: string\n filterSortBy?: DatatableSortBy\n loading?: boolean\n useCached: UseCachedType\n itemTitle?: string\n itemValue?: string\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 hideLabel: false,\n filterByField: 'name',\n filterSortBy: null,\n loading: false,\n itemTitle: 'name',\n itemValue: 'id',\n minSearchChars: 2,\n minSearchText: undefined,\n },\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'blur', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'focus', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'searchChange', data: string): void\n (e: 'searchChangeDebounced', data: string): void\n}>()\n\nconst search = defineModel<string>('search', { default: '', required: false })\nconst loadingLocal = defineModel<boolean>('loadingLocal', { default: false, required: false })\nconst fetchedItemsMinimal = defineModel<Map<IntegerId | DocId, any>>('fetchedItemsMinimal', {\n required: true,\n})\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\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\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetch, add, addManualMinimal } = props.useCached()\n\nconst noDataText = computed(() => {\n if (loadingLocal.value) {\n return '$vuetify.loading'\n }\n if (fetchedItemsMinimal.value.size === 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 modelValue = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined) {\n emit(\n 'update:modelValue',\n cloneDeep<DocId | IntegerId | DocId[] | IntegerId[] | null | undefined>(newValue),\n )\n },\n})\n\nconst { t } = useI18n()\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst isFocused = ref(false)\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)\n\nconst onFocus = () => {\n isFocused.value = true\n emit('focus', modelValue.value)\n}\n\nconst onBlur = () => {\n isFocused.value = false\n props.v?.$touch()\n emit('blur', modelValue.value)\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return props.v.$errors.map((item: ErrorObject) => item.$message)\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n return props.v?.required && props.v?.required.$params.type === 'required'\n})\n\nconst { showErrorsDefault } = useAlerts()\n\nconst apiSearch = async (query: string | null) => {\n if (isNull(query) || query.length < props.minSearchChars) {\n fetchedItemsMinimal.value.clear()\n return\n }\n loadingLocal.value = true\n filterInnerData[props.filterByField] = query\n fetchedItemsMinimal.value.clear()\n try {\n const res = await props.fetchItemsMinimal(pagination, filterInnerData, filterInnerConfig)\n res.forEach((item: any) => {\n fetchedItemsMinimal.value.set(item[props.itemValue], item)\n })\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loadingLocal.value = false\n }\n}\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final: Map<IntegerId | DocId, string> = new Map()\n const finalRaw: Map<IntegerId | DocId, any> = new Map()\n if (isArray(modelValue.value)) {\n modelValue.value.forEach((value: any) => {\n final.set(value, '')\n })\n } else if (modelValue.value) {\n final.set(modelValue.value, '')\n }\n fetchedItemsMinimal.value.forEach((value) => {\n final.set(value[props.itemValue], value[props.itemTitle])\n finalRaw.set(value[props.itemValue], cloneDeep(value))\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value, raw: finalRaw.get(key) }\n })\n})\n\nconst tryToAddFromFetchedItems = (ids: Set<DocId | IntegerId>) => {\n return new Promise<boolean>((resolve) => {\n fetchedItemsMinimal.value.forEach((value, key) => {\n if (ids.has(key)) {\n addManualMinimal(cloneDeep(value))\n }\n })\n return resolve(true)\n })\n}\n\nconst onClickClear = () => {\n search.value = ''\n apiSearch('')\n if (props.multiple) {\n modelValue.value = []\n return\n }\n modelValue.value = null\n}\n\nwatchDebounced(\n search,\n (newValueBug, oldValueBug) => {\n // todo rollback fix when fixed on vuetify/vue use side\n const newValue = newValueBug as unknown as string\n const oldValue = oldValueBug as unknown as string | undefined\n if (newValue !== oldValue) {\n apiSearch(newValue)\n emit('searchChangeDebounced', newValue)\n }\n },\n { debounce: 300 },\n)\n\nwatch(search, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n emit('searchChange', newValue)\n }\n})\n\nwatch(\n modelValue,\n async (newValue) => {\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n return\n }\n const values = isArray(newValue) ? newValue : [newValue]\n const idsToFetch = new Set(values)\n await tryToAddFromFetchedItems(idsToFetch)\n\n if (idsToFetch.size > 0) {\n add(Array.from(idsToFetch) as Array<DocId & IntegerId>)\n fetch()\n }\n },\n { immediate: true },\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n v-model:search=\"search\"\n chips\n :items=\"allItems\"\n no-filter\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :loading=\"loadingLocal\"\n :no-data-text=\"noDataText\"\n autocomplete=\"off\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @click:clear=\"onClickClear\"\n >\n <template #label>\n <span\n v-if=\"!hideLabel\"\n :key=\"requiredComputed + ''\"\n >\n {{ labelComputed }}\n <span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </span>\n </template>\n <template #append-item>\n <slot name=\"append-item\" />\n </template>\n <template\n v-if=\"!multiple\"\n #selection\n />\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 <!-- @vue-skip -->\n <template #item=\"{ props: itemProps, internalItem: itemItem }\">\n <slot\n name=\"item\"\n :props=\"itemProps\"\n :item=\"itemItem\"\n >\n <VListItem :props=\"itemProps\" />\n </slot>\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport { 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, type ComputedRef } from 'vue'\nimport { useDisplay } from 'vuetify'\nimport { useMediaQuery } from '@vueuse/core'\n\n// Touch detection for the list editors. Drag-to-reorder must be suppressed on\n// touch devices (users reorder via the up/down arrow + menu fallback instead).\n//\n// Vuetify's `display.platform.touch` is evaluated once at module load from\n// `ontouchstart` / `navigator.maxTouchPoints` / UA. That misses environments\n// which expose a coarse pointer but report no touch points at load time —\n// iPadOS desktop-mode Safari, some hybrid devices, and device emulation applied\n// after the page mounted — leaving drag wrongly enabled there.\n//\n// We OR-in a reactive `(any-pointer: coarse)` media query. `any-pointer` (not\n// `pointer`) matches whenever *any* available input is coarse, which mirrors the\n// existing `maxTouchPoints`-based intent (touch-capable hybrids already suppress\n// drag today) while filling the load-time blind spots. The query resolves\n// synchronously via `matchMedia`, so consumers reading the value once at setup\n// still observe the correct result.\nexport function useIsTouchDevice(): ComputedRef<boolean> {\n const display = useDisplay()\n const coarsePointer = useMediaQuery('(any-pointer: coarse)')\n\n return computed<boolean>(() => display.platform.value.touch || coarsePointer.value)\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","export interface RenumberPositionsOptions {\n /** Item field holding the position. Defaults to `'position'`. */\n positionField?: string\n /** Multiplier applied to the 1-based index (e.g. 10 → 10, 20, 30…). Defaults to `1`. */\n positionMultiplier?: number\n}\n\n/** Non-mutating sort by ascending `position` (in-place `sort` would trigger reactivity). */\nexport const sortByPosition = <TItem extends { position: number }>(items: TItem[]): TItem[] =>\n [...items].sort((a, b) => a.position - b.position)\n\n/**\n * Non-mutating renumber to sequential positions matching array order — the same\n * renumbering the editors apply on commit. Unchanged items stay reference-equal.\n */\nexport const renumberPositions = <TItem extends Record<string, any>>(\n items: TItem[],\n options: RenumberPositionsOptions = {},\n): TItem[] => {\n const positionField = options.positionField ?? 'position'\n const positionMultiplier = options.positionMultiplier ?? 1\n return 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","let seq = 0\n\n/**\n * Unique negative temp id for new (unsaved) list rows.\n *\n * Row keys must be unique per row — duplicate or missing keys break dirty\n * tracking, validation rails and reorder targeting. A single module-wide\n * negative sequence guarantees uniqueness across all factories (two domain\n * factories can no longer both hand out `-1`), and can never collide with\n * persisted ids, which are positive. The backend assigns real ids on save.\n */\nexport const nextListEditorTempId = (): number => --seq\n","import {\n computed,\n reactive,\n ref,\n toValue,\n watch,\n type ComputedRef,\n type MaybeRefOrGetter,\n type Ref,\n} from 'vue'\nimport type {\n ListEditorKey,\n ListEditorValidationState,\n PositionHint,\n} from '@/labs/listEditor/types/listEditorTypes'\nimport { renumberPositions } from '@/labs/listEditor/utils/positions'\nimport { nextListEditorTempId } from '@/labs/listEditor/utils/tempId'\nimport { cloneDeep } from '@/utils/common'\n\n/** Per-row validity. `true` (or `{ valid: true }`) = VALID. Only `valid: false` blocks save. */\nexport type ListEditorValidationResult =\n | boolean\n | { valid: boolean; state?: 'invalid' | 'warning'; message?: string }\n\nexport type GetKey<TItem> = keyof TItem | ((item: TItem) => ListEditorKey)\nexport type PositionOption<TItem> =\n | false\n | keyof TItem\n | { field: keyof TItem; multiplier?: number }\n\nexport interface ListEditorChanges<TItem> {\n added: TItem[]\n updated: TItem[]\n moved: TItem[]\n deleted: TItem[]\n reparented: TItem[]\n}\n\nexport interface UseListEditorControllerOptions<TItem extends Record<string, any>> {\n /** Read the live list (the editor's v-model, or a consumer store getter). */\n get: () => TItem[]\n /** Write the list back. */\n set: (items: TItem[]) => void\n /** New-row factory. Optional for read-only / no-add lists. Should mint a stable temp id. */\n factory?: () => TItem\n /** Stable row identity. Default `'id'`. Never point this at the position field. */\n getKey?: GetKey<TItem>\n /** Managed order field. Default `'position'`. `false` opts out of position management. */\n position?: PositionOption<TItem>\n /**\n * Extra top-level fields to drop from the dirty content-hash (position is\n * always dropped). For a child collection a separate nested editor already\n * tracks, so editing a child doesn't flip the parent row amber. Still in the\n * payload — only the dirty comparison ignores it. Reactive (accepts a getter/ref).\n */\n dirtyExclude?: MaybeRefOrGetter<string[]>\n /** Per-row validity — `true` = valid. Drives the red rail + `hasErrors`. */\n validate?: (item: TItem) => ListEditorValidationResult\n /** Custom dirty predicate (override the default content-diff). */\n isDirty?: (current: TItem, saved: TItem | undefined) => boolean\n /** Custom save payload (overrides `getPayload`). */\n payload?: (items: TItem[]) => TItem[]\n /** Resolve a saved row's key on commit (default: existing key, else mint a temp id). */\n commitKey?: (saved: TItem, previous: TItem | undefined) => ListEditorKey\n /** Normalize server rows before they become the new baseline on commit. */\n normalizeSaved?: (savedItems: TItem[]) => TItem[]\n}\n\nexport interface ListEditorHandle<TItem extends Record<string, any>> {\n items: ComputedRef<TItem[]>\n hasUnsaved: ComputedRef<boolean>\n hasErrors: ComputedRef<boolean>\n invalidKeys: ComputedRef<Set<ListEditorKey>>\n /** Amber: is this row added / edited / moved since the last commit? */\n isUnsaved: (key: ListEditorKey) => boolean\n /** Red rail (gated): 'invalid' only once the row is unsaved or `validateAll()` ran. */\n rowState: (item: TItem, key: ListEditorKey) => ListEditorValidationState\n /** Force-show all invalid rows + return whether the list is valid. The save guard. */\n validateAll: () => boolean\n /** Normalized ordered array for a full-DTO save. */\n getPayload: () => TItem[]\n /** Change-set for partial-save endpoints. */\n getChanges: () => ListEditorChanges<TItem>\n /** Adopt saved rows as the new baseline; backfill keys; clear unsaved/submitted. */\n commit: (savedItems?: TItem[]) => void\n /** Discard unsaved edits back to the last committed baseline (or given items). */\n reset: (items?: TItem[]) => void\n addItem: (item?: TItem, hint?: PositionHint) => void\n updateItem: (\n key: ListEditorKey,\n next: TItem | Partial<TItem> | ((current: TItem) => TItem),\n ) => void\n deleteItem: (key: ListEditorKey) => void\n moveItem: (fromIndex: number, toIndex: number) => void\n /** Escape hatch: a row form (e.g. vuelidate) reports its own validity instead of `validate`. */\n registerValidity: (key: ListEditorKey, isValid: () => boolean) => () => void\n}\n\n/**\n * Component-owned state controller for the list editors (v2). Owns row keys,\n * declared dirty tracking (no fragile whole-list JSON diff on volatile fields),\n * validation summary, position renumbering, and the save lifecycle — exposed as\n * a `ListEditorHandle`. Created internally by an editor (default) or lifted by a\n * consumer via `useListEditor()` + `:editor` so the state survives unmount/remount.\n */\nexport function useListEditorController<TItem extends Record<string, any>>(\n options: UseListEditorControllerOptions<TItem>,\n): ListEditorHandle<TItem> {\n const keyField = (typeof options.getKey === 'function' ? null : (options.getKey ?? 'id')) as\n | keyof TItem\n | null\n const keyOf = (item: TItem): ListEditorKey =>\n typeof options.getKey === 'function'\n ? options.getKey(item)\n : (item[keyField as keyof TItem] as ListEditorKey)\n\n const positionOpt = options.position ?? 'position'\n const managedPosition = positionOpt !== false\n const positionField = (\n typeof positionOpt === 'object'\n ? positionOpt.field\n : positionOpt === false\n ? 'position'\n : positionOpt\n ) as string\n const positionMultiplier =\n typeof positionOpt === 'object' && positionOpt.multiplier ? positionOpt.multiplier : 1\n\n const items = computed<TItem[]>(() => options.get())\n\n // Baseline = last committed snapshot. `hashes` powers content-diff dirty\n // (position excluded so a reorder never marks a row dirty); `rows` powers `reset`.\n const dirtyExclude = computed<string[]>(() => toValue(options.dirtyExclude) ?? [])\n const normalize = (item: TItem): string => {\n const copy = { ...item } as Record<string, unknown>\n if (managedPosition) delete copy[positionField]\n for (const f of dirtyExclude.value) delete copy[f]\n return JSON.stringify(copy)\n }\n const baselineHashes = ref(new Map<ListEditorKey, string>()) as Ref<Map<ListEditorKey, string>>\n const baselineRows = ref<TItem[]>([]) as Ref<TItem[]>\n const captureBaseline = (rows: TItem[]) => {\n const map = new Map<ListEditorKey, string>()\n for (const r of rows) map.set(keyOf(r), normalize(r))\n baselineHashes.value = map\n // Deep clone: a shallow `{...r}` shares nested refs with the live row, so an\n // in-place mutation would drift the baseline (reset/re-hash read stale data).\n baselineRows.value = rows.map((r) => cloneDeep(r))\n }\n // Re-hash when the excluded-field set changes. `sync` so baseline + live\n // normalize() never disagree mid-flush (which would flash every row amber).\n watch(\n dirtyExclude,\n () => {\n const map = new Map<ListEditorKey, string>()\n for (const r of baselineRows.value) map.set(keyOf(r), normalize(r))\n baselineHashes.value = map\n },\n { flush: 'sync' },\n )\n captureBaseline(options.get())\n\n // Declared structural state the content-diff can't see.\n const movedKeys = ref(new Set<ListEditorKey>()) as Ref<Set<ListEditorKey>>\n const deletedRows = ref<TItem[]>([]) as Ref<TItem[]>\n const submitted = ref(false)\n // Reactive so a row form (re)registering its validity re-runs `invalidKeys`/`rowState`.\n const registeredValidity = reactive(new Map<ListEditorKey, () => boolean>())\n\n const isItemDirty = (item: TItem, key: ListEditorKey): boolean => {\n if (options.isDirty) {\n const saved = baselineRows.value.find((r) => keyOf(r) === key)\n return options.isDirty(item, saved)\n }\n const baseHash = baselineHashes.value.get(key)\n if (baseHash === undefined) return true // added\n if (baseHash !== normalize(item)) return true // edited\n return movedKeys.value.has(key) // moved (content-invisible)\n }\n\n const unsavedKeys = computed<Set<ListEditorKey>>(() => {\n const out = new Set<ListEditorKey>()\n for (const item of options.get()) {\n const key = keyOf(item)\n if (isItemDirty(item, key)) out.add(key)\n }\n return out\n })\n\n const isUnsaved = (key: ListEditorKey): boolean => unsavedKeys.value.has(key)\n const hasUnsaved = computed<boolean>(\n () => unsavedKeys.value.size > 0 || deletedRows.value.length > 0,\n )\n\n const resolveValidity = (\n item: TItem,\n key: ListEditorKey,\n ): { invalid: boolean; warning: boolean } => {\n const registered = registeredValidity.get(key)\n if (registered) return { invalid: !registered(), warning: false }\n if (!options.validate) return { invalid: false, warning: false }\n const r = options.validate(item)\n if (typeof r === 'boolean') return { invalid: !r, warning: false }\n return { invalid: !r.valid, warning: r.valid && r.state === 'warning' }\n }\n\n const invalidKeys = computed<Set<ListEditorKey>>(() => {\n const out = new Set<ListEditorKey>()\n for (const item of options.get()) {\n const key = keyOf(item)\n if (resolveValidity(item, key).invalid) out.add(key)\n }\n return out\n })\n const hasErrors = computed<boolean>(() => invalidKeys.value.size > 0)\n\n // Red rail gated behind \"row has been interacted with\" (unsaved) or an explicit\n // validateAll() — so a loaded-but-invalid row doesn't light up before interaction,\n // but a save attempt reveals every offender (mounted or collapsed).\n const rowState = (item: TItem, key: ListEditorKey): ListEditorValidationState => {\n const { invalid, warning } = resolveValidity(item, key)\n if (invalid) return isUnsaved(key) || submitted.value ? 'invalid' : null\n if (warning) return 'warning'\n return null\n }\n\n const validateAll = (): boolean => {\n submitted.value = true\n return invalidKeys.value.size === 0\n }\n\n const renumber = (arr: TItem[]): TItem[] =>\n managedPosition ? renumberPositions(arr, { positionField, positionMultiplier }) : arr\n\n const write = (arr: TItem[]) => options.set(renumber(arr))\n\n const getPayload = (): TItem[] =>\n options.payload ? options.payload(options.get()) : renumber(options.get())\n\n const getChanges = (): ListEditorChanges<TItem> => {\n const added: TItem[] = []\n const updated: TItem[] = []\n const moved: TItem[] = []\n for (const item of options.get()) {\n const key = keyOf(item)\n const baseHash = baselineHashes.value.get(key)\n if (baseHash === undefined) added.push(item)\n else if (baseHash !== normalize(item)) updated.push(item)\n if (movedKeys.value.has(key)) moved.push(item)\n }\n return { added, updated, moved, deleted: [...deletedRows.value], reparented: [] }\n }\n\n const commit = (savedItems?: TItem[]): void => {\n const source = savedItems ?? options.get()\n const normalized = options.normalizeSaved ? options.normalizeSaved(source) : source\n const next = normalized.map((item) => {\n const key = options.commitKey\n ? options.commitKey(\n item,\n baselineRows.value.find((r) => keyOf(r) === keyOf(item)),\n )\n : keyOf(item)\n if (key === undefined || key === null) {\n return keyField ? ({ ...item, [keyField]: nextListEditorTempId() } as TItem) : item\n }\n return item\n })\n options.set(next)\n captureBaseline(next)\n movedKeys.value = new Set()\n deletedRows.value = []\n submitted.value = false\n }\n\n const reset = (rows?: TItem[]): void => {\n options.set(rows ?? baselineRows.value.map((r) => cloneDeep(r)))\n movedKeys.value = new Set()\n deletedRows.value = []\n submitted.value = false\n }\n\n const indexOfKey = (arr: TItem[], key: ListEditorKey): number =>\n arr.findIndex((x) => keyOf(x) === key)\n\n const addItem = (item?: TItem, hint?: PositionHint): void => {\n const row = item ?? options.factory?.()\n if (row === undefined) return // no item + no factory (read-only list) → no-op\n const arr = [...options.get()]\n let at = arr.length\n if (hint?.afterId !== undefined) {\n const i = indexOfKey(arr, hint.afterId)\n at = i === -1 ? arr.length : i + 1\n } else if (hint?.index !== undefined) {\n at = Math.max(0, Math.min(hint.index, arr.length))\n }\n arr.splice(at, 0, row)\n write(arr)\n }\n\n const updateItem = (\n key: ListEditorKey,\n next: TItem | Partial<TItem> | ((current: TItem) => TItem),\n ): void => {\n const arr = [...options.get()]\n const i = indexOfKey(arr, key)\n if (i === -1) return\n const current = arr[i]\n const resolved =\n typeof next === 'function'\n ? (next as (c: TItem) => TItem)(current)\n : ({ ...current, ...(next as Partial<TItem>) } as TItem)\n arr[i] = resolved\n write(arr)\n }\n\n const deleteItem = (key: ListEditorKey): void => {\n const arr = [...options.get()]\n const i = indexOfKey(arr, key)\n if (i === -1) return\n const [removed] = arr.splice(i, 1)\n // A previously-saved row that's removed must be reported in the change-set;\n // an unsaved temp row just vanishes.\n if (baselineHashes.value.has(key)) deletedRows.value = [...deletedRows.value, removed]\n movedKeys.value.delete(key)\n write(arr)\n }\n\n const moveItem = (fromIndex: number, toIndex: number): void => {\n const arr = [...options.get()]\n if (fromIndex < 0 || fromIndex >= arr.length || toIndex < 0 || toIndex >= arr.length) return\n if (fromIndex === toIndex) return\n const [el] = arr.splice(fromIndex, 1)\n arr.splice(toIndex, 0, el)\n movedKeys.value.add(keyOf(el))\n write(arr)\n }\n\n const registerValidity = (key: ListEditorKey, isValid: () => boolean): (() => void) => {\n registeredValidity.set(key, isValid)\n return () => registeredValidity.delete(key)\n }\n\n return {\n items,\n hasUnsaved,\n hasErrors,\n invalidKeys,\n isUnsaved,\n rowState,\n validateAll,\n getPayload,\n getChanges,\n commit,\n reset,\n addItem,\n updateItem,\n deleteItem,\n moveItem,\n registerValidity,\n }\n}\n","// Compact (collapsed) display text for a list-editor row. Used by every\n// editor variant when the consumer didn't provide an `#item-compact` slot.\n// Consumers must opt in explicitly via `compactField` — there is NO implicit\n// fallback to common field names. Returns empty string otherwise; provide\n// the `#item-compact` slot for anything richer.\nexport function resolveCompactText<TItem extends Record<string, any>>(\n raw: TItem,\n options: { compactField?: string | null },\n): string {\n if (!options.compactField) return ''\n const v = raw[options.compactField]\n return v == null || v === '' ? '' : String(v)\n}\n","import {\n computed,\n getCurrentInstance,\n inject,\n onBeforeUnmount,\n provide,\n reactive,\n type ComputedRef,\n type InjectionKey,\n} from 'vue'\n\n/**\n * One named, savable section the unsaved-changes confirm dialog can name back\n * to the user. `dirty` is evaluated reactively inside the section's getter.\n */\nexport interface UnsavedSectionDescriptor {\n label: string\n dirty: boolean\n}\n\n/**\n * Getter returning a single descriptor, or an array of them for a component\n * that owns several sub-sections (e.g. page positions in one PageContentsManage).\n */\nexport type UnsavedSectionSource = () => UnsavedSectionDescriptor | UnsavedSectionDescriptor[]\n\nexport interface UnsavedSectionRegistry {\n register: (id: symbol, source: ComputedRef<UnsavedSectionDescriptor[]>) => void\n unregister: (id: symbol) => void\n /** Labels of every registered section currently flagged dirty. */\n dirtyLabels: ComputedRef<string[]>\n}\n\nexport const UnsavedSectionKey = Symbol('unsaved.sections') as InjectionKey<UnsavedSectionRegistry>\n\nexport function createUnsavedSectionRegistry(): UnsavedSectionRegistry {\n const sources = reactive(new Map<symbol, ComputedRef<UnsavedSectionDescriptor[]>>())\n\n const dirtyLabels = computed<string[]>(() => {\n const out: string[] = []\n for (const source of sources.values()) {\n for (const descriptor of source.value) {\n if (descriptor.dirty) out.push(descriptor.label)\n }\n }\n return out\n })\n\n return {\n register(id, source) {\n sources.set(id, source)\n },\n unregister(id) {\n sources.delete(id)\n },\n dirtyLabels,\n }\n}\n\n/**\n * Creates a registry and `provide`s it for descendants. Called internally by\n * `useUnsavedChangesGuard` so the guard host automatically supplies one.\n */\nexport function provideUnsavedSectionRegistry(): UnsavedSectionRegistry {\n const registry = createUnsavedSectionRegistry()\n if (getCurrentInstance()) provide(UnsavedSectionKey, registry)\n return registry\n}\n\n/**\n * Registers one or more named sections so the unsaved-changes confirm dialog\n * can tell the user *which* parts are dirty instead of a generic message.\n *\n * Pass a getter returning a descriptor — or an array of descriptors when the\n * component owns several sub-sections (e.g. one PageContentsManage owns N page\n * positions). No-op when called outside a guarded route (inject returns null).\n */\nexport function useUnsavedSection(source: UnsavedSectionSource): void {\n const registry = inject(UnsavedSectionKey, null)\n if (!registry) return\n if (!getCurrentInstance()) return\n\n const id = Symbol('unsaved.section')\n const normalized = computed<UnsavedSectionDescriptor[]>(() => {\n const resolved = source()\n return Array.isArray(resolved) ? resolved : [resolved]\n })\n\n registry.register(id, normalized)\n onBeforeUnmount(() => registry.unregister(id))\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 /** Scrolling container; scopes the auto-scroll `querySelector` to this instance. */\n rowsContainer: Ref<HTMLElement | null>\n /** Per-row selector to scroll into view (flat `.a-le-row`, nested `.a-le-row-wrapper`); needs a `[data-id]`. */\n rowSelector: string\n /** When false, auto-open-on-add is a no-op (e.g. chips mode, or no `#item` slot). */\n isInlineEdit: ComputedRef<boolean>\n /** Revert callback — the flat/nested `updateItem` signatures differ, so the consumer applies the snapshot. */\n restoreSnapshot: (key: ListEditorKey, data: TItem) => void\n /** Watch source: keys the auto-open reacts to (flat maps modelValue, nested walks the tree). */\n watchKeys: () => ListEditorKey[]\n /** Resolve raw data for a key to snapshot before editing; `null` aborts the auto-open. */\n findEntry: (key: ListEditorKey) => { data: TItem } | null\n /** Nested-only: expand ancestors so the auto-opened row is visible. */\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: the editing-key\n * set, per-key revert snapshots, and the auto-open + scroll-into-view of a\n * newly appended row. Agnostic of the editor composable via `restoreSnapshot`.\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 // Double nextTick so the inline-edit body has rendered before we scroll;\n // `block: 'center'` since `'nearest'` no-ops on partially-visible rows.\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 type { ListEditorKey } from '@/labs/listEditor/types/listEditorTypes'\n\n/**\n * Runs `validateAll()` and, on failure, opens each invalid row via `reveal()`\n * so a blocked save shows WHICH rows are wrong (QA 85050 B4-17). Shared by all\n * variants; `reveal` does the per-variant opening (nested also expands ancestors).\n */\nexport function validateAllAndReveal(\n controller: { validateAll: () => boolean; invalidKeys: { value: Set<ListEditorKey> } },\n reveal: (key: ListEditorKey) => void,\n): boolean {\n const valid = controller.validateAll()\n if (!valid) {\n for (const key of controller.invalidKeys.value) reveal(key)\n }\n return valid\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\nexport interface Props {\n title: 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 <VBtn\n v-if=\"addLabel && canAdd\"\n color=\"primary\"\n variant=\"flat\"\n prepend-icon=\"mdi-plus\"\n @click=\"$emit('add')\"\n >\n {{ addLabel || 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// `dotOnly` (chips mode) drops the label, leaving just the inline warning dot;\n// the label is kept as a native title tooltip so the marker stays meaningful.\n\nexport interface Props {\n label?: string | null\n dotOnly?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n label: null,\n dotOnly: false,\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <span\n class=\"a-le-unsaved-label\"\n :class=\"{ 'a-le-unsaved-label--dot': dotOnly }\"\n :title=\"dotOnly ? (label ?? t('common.sortable.unsaved')) : undefined\"\n >\n <VIcon\n icon=\"mdi-circle-medium\"\n size=\"12\"\n />\n <template v-if=\"!dotOnly\">\n {{ label ?? t('common.sortable.unsaved') }}\n </template>\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 { useContainerWidth } from '@/labs/listEditor/composables/useContainerWidth'\nimport { useIsTouchDevice } from '@/labs/listEditor/composables/useIsTouchDevice'\nimport { useKeyboardNav } from '@/labs/listEditor/composables/useKeyboardNav'\nimport { useSortable } from '@vueuse/integrations/useSortable'\nimport {\n useListEditorController,\n type GetKey,\n type ListEditorHandle,\n type ListEditorValidationResult,\n type PositionOption,\n} from '@/labs/listEditor/composables/useListEditorController'\nimport { resolveCompactText as resolveCompactTextUtil } from '@/labs/listEditor/composables/resolveCompactText'\nimport { useUnsavedSection } from '@/labs/unsavedGuard/useUnsavedSection'\nimport { useDeleteDialog } from '@/labs/listEditor/composables/useDeleteDialog'\nimport { useInlineEditing } from '@/labs/listEditor/composables/useInlineEditing'\nimport { validateAllAndReveal } from '@/labs/listEditor/utils/revealInvalidRows'\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} 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 validationState: ListEditorValidationState\n canMoveUp: boolean\n canMoveDown: boolean\n}\n\nexport type ReorderMode = 'view' | 'reorder'\n\n// Public slot scope shapes — see AListEditor for the hoisting rationale.\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: (next: TItem | Partial<TItem> | ((current: TItem) => TItem)) => void\n}\nexport interface RowSlotProps<TItem extends Record<string, any>> {\n item: DecoratedViewItem<TItem>\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 /**\n * New-row factory (required). The add button + \"add after this item\" insert\n * `factory()` into the model directly through the controller (positions\n * renumbered) — no consumer `@add` push handler is needed.\n */\n factory?: () => TItem\n /**\n * Stable row identity. Default `'id'`. Never point this at the position field.\n * Typed `string` (not `keyof TItem`): a bare `keyof TItem` on a generic\n * component compiles to a Boolean-only runtime type that coerces `get-key=\"id\"` to `true`.\n */\n getKey?: string | ((item: TItem) => ListEditorKey)\n /**\n * Managed order field. Default `'position'`. `false` opts out. Typed `string`\n * before `false` so the runtime prop type is `[String, Boolean, Object]`:\n * `keyof TItem` would be Boolean-only, and `false` listed first would coerce\n * `position=\"position\"` (value == prop name) to `true`.\n */\n position?: string | false | { field: string; multiplier?: number }\n /**\n * Extra fields to drop from the dirty content-hash (position is always\n * dropped). Use when a SEPARATE nested editor tracks a row's child collection,\n * so editing a child doesn't flip the parent amber. The field is still saved.\n */\n dirtyExclude?: string[]\n /** Per-row validity — `true` (or `{ valid: true }`) = VALID. Drives the red rail + save guard. */\n validate?: (item: TItem) => ListEditorValidationResult\n /**\n * Opt-in lifted state controller (from consumer's `useListEditorController()`)\n * so editor state survives this component's unmount/remount (pinned-widget\n * relocation). When omitted the editor owns an internal controller.\n */\n editor?: ListEditorHandle<TItem>\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\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 — nested inside another editor's `#item` slot, following a\n * shared `v-model:mode`. Hides own Reorder button + toolbar, skips the\n * snapshot/restore (the outer editor's deep snapshot covers nested data), and\n * paints lighter chrome. Pair with `v-model:mode` bound to the outer ref.\n */\n embedded?: boolean\n /**\n * Keep rows inline-editable in reorder mode. By default entering reorder\n * closes any open edit and hides the `#item` body to focus on dragging. Set\n * for a shared-reorder pair's parent, where the open row exposes its embedded\n * answers list for dragging.\n */\n allowEditInReorder?: boolean\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 /** Register as a named unsaved-changes section under this (translated) label. */\n unsavedSectionLabel?: string\n}\n\nconst props = withDefaults(defineProps<Props<TItem>>(), {\n factory: undefined,\n getKey: undefined,\n position: undefined,\n dirtyExclude: undefined,\n validate: undefined,\n editor: undefined,\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 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 onDeleteConfirm: undefined,\n onDelete: undefined,\n onItemSave: undefined,\n onReorderApply: undefined,\n unsavedSectionLabel: undefined,\n})\n\nconst emit = defineEmits<{\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()\n\nconst rootEl = useTemplateRef<HTMLElement>('rootEl')\nconst { isNarrow } = useContainerWidth(rootEl)\n\nconst isTouch = useIsTouchDevice()\n\n// State controller (v2). Default: this editor owns it; opt-in lift via `:editor`.\n// `factory`/`getKey`/`position`/`validate` are construction-time options read\n// once to seed the controller, not reactive props — hence the suppressed\n// reactivity-loss rule. Undefined options fall back to controller defaults\n// ('id' / 'position' / always-valid).\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst controller =\n props.editor ??\n useListEditorController<TItem>({\n get: () => modelValue.value,\n set: (v) => (modelValue.value = v),\n factory: props.factory,\n getKey: props.getKey as GetKey<TItem> | undefined,\n position: props.position as PositionOption<TItem> | undefined,\n dirtyExclude: () => props.dirtyExclude ?? [],\n validate: props.validate,\n })\n\n// Local mirror of the controller's key resolution so rendered rows key the same\n// way the controller tracks them (v2 spec point 7).\nconst getKeyOpt = props.getKey ?? 'id'\n/* eslint-enable vue/no-setup-props-reactivity-loss */\nconst keyOf = (item: TItem): ListEditorKey =>\n typeof getKeyOpt === 'function'\n ? getKeyOpt(item)\n : (item[getKeyOpt as keyof TItem] as ListEditorKey)\n\n// Managed position field (for the row position view field + move-to-position\n// dialog). Mirrors the controller's resolution.\nconst positionFieldName = computed<string>(() => {\n const p = props.position\n if (p === undefined) return 'position'\n if (p === false) return 'position'\n if (typeof p === 'object') return p.field as string\n return p as string\n})\n\n// Keyed render projection (key + index + raw + position); the controller owns the data.\nconst viewItems = computed<ListViewItem<TItem>[]>(() =>\n modelValue.value.map((raw, index) => ({\n key: keyOf(raw),\n index,\n raw,\n position: raw[positionFieldName.value] as number | undefined,\n })),\n)\n\nconst expandedKeys = ref<Set<ListEditorKey>>(new Set())\n\n// Reorder-session moved set — component view state, distinct from the\n// controller's persistent moved tracking. Drives the toolbar's \"N pending\n// changes\" counter; cleared on every mode transition by `useReorderMode`.\nconst movedKeys = ref<Set<ListEditorKey>>(new Set())\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) => controller.updateItem(key, data),\n watchKeys: () => modelValue.value.map((it) => keyOf(it)),\n findEntry: (key) => {\n const hit = modelValue.value.find((it) => keyOf(it) === 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// Stacked-editor registry: outer collects movedCount + hasChanges from embedded\n// children for the toolbar counter. shallowReactive preserves ComputedRef\n// identity (no auto-unwrap).\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 () =>\n canInteract.value && (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 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// With a title and a narrow viewport, the reorder button shrinks to an icon-only\n// 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// True when the header has substantive content (title or custom header slot).\n// When false it still renders as a slim band right-aligning just the\n// reorder/apply controls, holding height across idle ↔ reorder so it doesn't jump.\nconst headerHasContent = computed<boolean>(\n (): boolean => !!(props.title || slots.header || slots['reorder-toggle'] || slots['view-body']),\n)\n\n// Per-row Save/Cancel footer only matters with a per-item persist callback;\n// otherwise the parent form's global save flushes everything, so hide it.\nconst showInlineSaveFooter = computed(() => !!props.onItemSave)\n\n// Reorder-session moved marker (drag, arrow buttons) feeding the toolbar counter;\n// the persistent amber `unsaved` flag is the controller's.\nconst markMoved = (key: ListEditorKey) => {\n movedKeys.value.add(key)\n}\n\n// Per-key decorator cache — see AListEditor for rationale. `unsaved` (amber) and\n// `validationState` (red rail) come from the controller; `moved` is the\n// reorder-session flag.\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 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 // readonly → no amber markers (can't have unsaved changes; also dodges a\n // mount-before-load empty baseline). (QA 85050 sweep)\n const unsaved = props.readonly ? false : controller.isUnsaved(vi.key)\n const dirty = unsaved\n const validationState = controller.rowState(vi.raw, vi.key)\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.validationState === validationState &&\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 validationState,\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 ? resolveCompactText(moveToPositionTarget.value.raw) : '',\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 controller.moveItem(target.index, newIndex)\n markMoved(target.key)\n}\n\nconst resolveCompactText = (raw: TItem): string =>\n resolveCompactTextUtil(raw, { compactField: props.compactField })\n\n// Skip SortableJS on touch devices — touch users reorder via arrows + menu, so\n// don't pay its setup cost. `isTouch` resolves synchronously, so this one-shot\n// read captures the right touch state at setup; `dragEnabled`'s initial value\n// seeds SortableJS and later changes flow via the watch below.\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. a `#view-body`\n // slot in view mode, rows only in reorder mode). vueuse's default\n // `tryOnMounted` fires once and would bind to a null ref, leaving SortableJS\n // dead; `watchElement: true` re-inits whenever the ref populates.\n watchElement: true,\n handle: '.a-le-drag-handle',\n animation: 150,\n // Force the fallback renderer so `dragClass` applies to a CSS-controlled\n // clone following the cursor — a row-shaped ghost instead of the opaque\n // 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 // Own `onUpdate` REPLACES vueuse's default array-move, which moved the array\n // and renumbered positions in separate `nextTick`s — a gap that let a\n // consumer's \"sort by position\" watch re-sort on stale positions and revert\n // the drop. One synchronous `controller.moveItem` closes that window so every\n // observer sees the final order and positions at once.\n onUpdate: (event) => {\n const { oldIndex, newIndex, item, from } = event\n if (oldIndex === undefined || newIndex === undefined) return\n // Undo SortableJS's DOM relocation so Vue's keyed v-for stays the single\n // source of truth (mirrors vueuse's removeNode + insertNodeAt).\n if (item && from) {\n item.parentNode?.removeChild(item)\n from.insertBefore(item, from.children[oldIndex] ?? null)\n }\n // moveItem rewrites the array, renumbers positions, and records the moved\n // key — all synchronously.\n controller.moveItem(oldIndex, newIndex)\n },\n onEnd: (event) => {\n // Mark only the dragged row (via its data-id) moved rather than diffing the\n // whole list, so siblings that shifted index stay clean.\n const el = event.item as HTMLElement\n const raw = el.getAttribute('data-id')\n if (raw !== null && raw !== '') {\n // Numeric key only when `data-id` is a pure integer string (incl. negative\n // temp ids like \"-1\"); otherwise keep the UUID-style string. `n > 0`\n // wrongly sent negative ids down the string branch, landing amber on the\n // wrong key.\n const n = stringToInt(raw)\n const key: ListEditorKey = String(n) === raw ? n : raw\n markMoved(key)\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\n// Managed add: the controller mints + inserts `factory()` and renumbers\n// positions; the inline-editing watch picks up the new key and auto-opens it.\nconst onAddClick = () => {\n if (!canAdd.value) return\n requestAutoOpen()\n controller.addItem(undefined, undefined)\n}\n\nconst onRowAddAfterClick = (vi: ListViewItem<TItem>) => {\n if (!canInteract.value) return\n requestAutoOpen()\n controller.addItem(undefined, { afterId: vi.key })\n}\n\nconst onEditClick = (vi: ListViewItem<TItem>) => {\n if (!canInteract.value) return\n if (reorderMode.value && !props.allowEditInReorder) return\n // Clicking edit while already editing closes the form (matches row-header click).\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 movedKeys.value.delete(vi.key)\n // Controller owns the data: temp rows vanish; saved rows leave the visible\n // list and land in `getChanges().deleted`.\n controller.deleteItem(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 keyOf(item)\n}\n\nconst moveUp = (idx: number) => {\n if (idx <= 0) return\n const key = keyAtIndex(idx)\n controller.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 controller.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 controller.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 controller.moveItem(idx, modelValue.value.length - 1)\n if (key !== null) markMoved(key)\n}\n\n// Per-key actions cache: stable identity per row — see AListEditor for\n// rationale. Closures capture the stable key and resolve the current vi via\n// 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: (next: TItem | Partial<TItem> | ((current: TItem) => TItem)) => void\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: (next) => controller.updateItem(key, next),\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,\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\n// Registers a named unsaved-changes section when the consumer passes a label.\nuseUnsavedSection(() =>\n props.unsavedSectionLabel\n ? { label: props.unsavedSectionLabel, dirty: controller.hasUnsaved.value }\n : [],\n)\n\n// Expose the controller handle (validateAll/getPayload/commit/etc. via\n// `useTemplateRef<ListEditorHandle<TItem>>`) plus the reorder-mode controls.\ndefineExpose<\n ListEditorHandle<TItem> & {\n enterReorderMode: () => void\n cancelReorderMode: () => void\n applyReorder: () => Promise<void>\n }\n>({\n ...controller,\n // validateAll() also opens invalid rows so a blocked save surfaces WHICH rows\n // are wrong — their #item form mounts instead of a collapsed red rail (QA 85050\n // B4-17). The body is gated on `editing` (not `expanded`), so drive `beginEdit`.\n // Shared with AListEditor + ANestedSortableListEditor via the helper.\n validateAll: () =>\n validateAllAndReveal(controller, (key) => {\n const vi = viewItems.value.find((v) => v.key === key)\n if (vi) beginEdit(vi)\n }),\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 count + Cancel/Apply, sitting\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 :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-${vi.validationState}`]: vi.validationState !== 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) }}\n </span>\n </slot>\n <LeUnsavedLabel\n v-if=\"vi.unsaved\"\n :dot-only=\"chips\"\n />\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 <template v-if=\"chips && canInteract\">\n <template v-if=\"isTouch && !disableReorder\">\n <VBtn\n icon\n size=\"x-small\"\n variant=\"text\"\n density=\"compact\"\n :active=\"false\"\n :disabled=\"!vi.canMoveUp\"\n class=\"a-le-action a-le-action--up\"\n @click.stop=\"moveUp(vi.index)\"\n >\n <VIcon\n icon=\"mdi-arrow-up\"\n size=\"14\"\n />\n </VBtn>\n <VBtn\n icon\n size=\"x-small\"\n variant=\"text\"\n density=\"compact\"\n :active=\"false\"\n :disabled=\"!vi.canMoveDown\"\n class=\"a-le-action a-le-action--down\"\n @click.stop=\"moveDown(vi.index)\"\n >\n <VIcon\n icon=\"mdi-arrow-down\"\n size=\"14\"\n />\n </VBtn>\n </template>\n <VBtn\n v-if=\"showDeleteButton\"\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>\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=\"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=\"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: reorder-mode trims, drag clone styling, chips\n// flex-wrap layout, validation rail.\n.a-sortable-list-editor {\n &__rows {\n display: flex;\n flex-direction: column;\n }\n\n // View-mode body slot — match the row's horizontal rhythm (~16 px) with a\n // vertical inset so content doesn't sit flush against the border.\n .a-le-view-body {\n padding: 12px 16px;\n }\n\n // Reorder mode trims row-header padding since the drag handle eats some of it.\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 following the cursor — row-shaped card with elevation; action\n // column + status badge hidden (below) 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 // Header-only-with-reorder variant — no title/header slot, so render a slim\n // band right-aligning just the Reorder button.\n &--header-floating .a-le-header {\n justify-content: flex-end;\n padding: 6px 8px;\n min-height: 0;\n }\n\n // Embedded variant — sits inside another editor's row. Drop card chrome,\n // tighten rows, lighten background so it reads as part of the parent's body.\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 min-height: auto;\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 overrides — `__rows` flex-wraps into pills, `row-header` gets\n // 8 px left padding (vs 12 px in AListEditor), `drag-handle` shrinks to the\n // pill height.\n &--chips &__rows {\n display: flex;\n\n // Reset the base column direction — chips flow inline and wrap.\n flex-flow: row 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 for 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 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","K","$","M","O","_","Y","V","w","Z","tt","l","et","nt","H","E","pt","yt","ht","isAnzuFatalError","AnzuFatalError","cause","message","HTTP_STATUS_OK","HTTP_STATUS_CREATED","HTTP_STATUS_ACCEPTED","HTTP_STATUS_NO_CONTENT","HTTP_STATUS_BAD_REQUEST","HTTP_STATUS_UNAUTHORIZED","HTTP_STATUS_FORBIDDEN","HTTP_STATUS_NOT_FOUND","HTTP_STATUS_UNPROCESSABLE_ENTITY","HTTP_STATUS_VALID_ALL","axiosErrorResponseIsForbidden","axios","isAnzuApiForbiddenError","AnzuApiForbiddenError","ERROR_VALIDATION","axiosErrorResponseHasValidationData","isAnzuApiValidationError","AnzuApiValidationError","hasAnzuApiValidationErrorSpecific","errorName","fieldName","resolveResponseData","axiosError","entity","items","values","isAnzuApiResponseCodeError","AnzuApiResponseCodeError","code","ERROR_FORBIDDEN_OPERATION","axiosErrorResponseHasForbiddenOperationData","isAnzuApiForbiddenOperationError","AnzuApiForbiddenOperationError","axiosErrorResponseHasDependencyExistsData","isAnzuApiDependencyExistsError","AnzuApiDependencyExistsError","isAnzuApiTimeoutError","AnzuApiTimeoutError","axiosErrorIsTimeout","isAnzuApiAxiosError","AnzuApiAxiosError","DEFAULT_DURATION_SECONDS","NEW_LINE_MARK","useAlerts","showSuccess","duration","notify","showSuccessT","translation","showError","showErrorT","showInfo","showInfoT","showWarning","showWarningT","showValidationError","showRecordWas","variant","showApiValidationError","errors","fieldIsTranslated","te","texts","fieldText","resolveListErrors","errorsTexts","showApiForbiddenOperationError","detail","showUnknownError","showForbiddenError","showErrorsDefault","parsedField","firstField","parsedSecond","indexNumber","secondField","module","this","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","unrefElement","cleanup","initSortable","start","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","loadingLocal","fetchedItemsMinimal","fetch","add","addManualMinimal","tryToAddFromFetchedItems","newValueBug","oldValueBug","idsToFetch","active","getTitleFromConfig","titleT","selectedArray","fieldOrder","valueArray","clickClose","showDetail","toggleFilterDetail","AFilterAdvancedButton","FiltersSelected","apiDeleteOne","useContainerWidth","useElementSize","isNarrow","useIsTouchDevice","display","useDisplay","coarsePointer","useMediaQuery","useKeyboardNav","focusedKey","grabbedKey","orderedKeys","isGrabbed","grabbedIndex","totalCount","rowTabindex","ordered","focusRowElement","setFocus","prevOrderedKeys","fallbackIndex","releaseGrab","isFormField","handleKeydown","focusedItem","inReorder","isGrabbedNow","grabbedSomewhere","onFormField","sortByPosition","renumberPositions","positionField","positionMultiplier","newPosition","seq","nextListEditorTempId","useListEditorController","keyField","keyOf","positionOpt","managedPosition","dirtyExclude","normalize","copy","baselineHashes","baselineRows","captureBaseline","rows","map","movedKeys","deletedRows","submitted","registeredValidity","isItemDirty","saved","baseHash","unsavedKeys","out","isUnsaved","hasUnsaved","resolveValidity","registered","invalidKeys","hasErrors","rowState","invalid","warning","validateAll","renumber","write","getPayload","getChanges","added","updated","commit","savedItems","next","reset","indexOfKey","hint","row","current","resolved","removed","fromIndex","toIndex","isValid","resolveCompactText","raw","UnsavedSectionKey","createUnsavedSectionRegistry","sources","dirtyLabels","descriptor","provideUnsavedSectionRegistry","registry","useUnsavedSection","normalized","useDeleteDialog","deleteDialog","deleteTarget","deleteInFlight","deleteError","performDelete","vi","useInlineEditing","editingKeys","editingSnapshots","pendingAutoOpen","clearEditing","beginEdit","cancelEdit","snap","commitEdit","closeEdit","requestAutoOpen","newKeys","oldKeys","oldSet","addedKey","entry","validateAllAndReveal","controller","reveal","valid","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","isTouch","getKeyOpt","positionFieldName","viewItems","expandedKeys","snapshot","rowsContainer","isInlineEdit","hasReadonlyDetail","hit","canInteract","canEnterReorder","embeddedRef","allowEditInReorderRef","childContributions","shallowReactive","hasChanges","totalMovedCount","totalHasPendingChanges","canAdd","dragEnabled","addLabelResolved","emptyTitleResolved","deleteConfirmTitleResolved","deleteConfirmTextResolved","reorderToggleVisible","compactReorderButton","headerVisible","headerHasContent","showInlineSaveFooter","markMoved","decoratorCache","viewItemsDecorated","total","liveKeys","editing","expanded","unsaved","validationState","canMoveUp","canMoveDown","decorated","findVi","keyboardNav","moveUp","moveDown","moveTop","moveBottom","moveToPositionDialogOpen","moveToPositionTarget","moveToPositionLabel","openMoveToPosition","onMoveToPositionConfirm","resolveCompactTextUtil","enabled","onAddClick","onRowAddAfterClick","onCloseClick","onExpandClick","currentlyExpanded","isRowClickable","onRowClick","triggerDeleteClick","onDeleteDialogConfirm","onDeleteDialogCancel","onSaveClick","onCancelClick","keyAtIndex","actionsCache","getActions","actions","buildSlotProps","toolbarSlotProps","reorderToggleSlotProps","_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","loadingComputed","tryLoadModelValue","tryLoadValue","prefetch","fetchedData","onChipCloseClick","closedItem","onAutocompleteModelUpdate","cloned"],"mappings":"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","x_google_ignoreList":[17,28,29,30,84,85,86,87,88,89]}
|