{"version":3,"file":"index.mjs","names":["_inject","sym","sym","storeToRefs","_useTranslation","_useTranslationsForBaseValidation","_useTranslationsForNestedValidations","isObject","buildPagination","_buildPagination","buildPagination","create","create","isObject","isObject","APolicySummary","APolicyInlineInfo","elements","AIdentityProviderOAuth2EndpointFields","AIdentityProviderPicker","components"],"sources":["../src/components/utility/form-input-list/AFormInputListItem.vue","../src/components/utility/form-input-list/AFormInputListItem.vue","../src/core/inject.ts","../src/core/provide.ts","../src/core/http-client/authentication-hook/singleton.ts","../src/core/store/constants.ts","../src/core/store/dispatcher/constants.ts","../../../node_modules/@posva/event-emitter/dist/index.js","../src/core/store/dispatcher/module.ts","../src/core/store/dispatcher/singleton.ts","../src/core/store/create.ts","../src/core/store/singleton.ts","../src/core/store/install.ts","../src/core/store/utils.ts","../src/core/http-client/authentication-hook/install.ts","../src/core/http-client/singleton.ts","../src/core/http-client/install.ts","../src/core/form/properties.ts","../src/core/translator/constants.ts","../src/core/translator/singleton.ts","../src/core/translator/helpers.ts","../src/core/translator/de/client.ts","../src/core/translator/de/default.ts","../src/core/vuelidate.ts","../src/core/translator/de/vuelidate.ts","../src/core/translator/de/vuecs.ts","../src/core/translator/en/client.ts","../src/core/translator/en/default.ts","../src/core/translator/en/vuelidate.ts","../src/core/translator/en/vuecs.ts","../src/core/translator/install.ts","../src/core/form/submit.ts","../src/core/query/sort.ts","../src/core/busy.ts","../src/core/permission-check/module.ts","../src/core/socket-manager/singleton.ts","../src/core/socket-manager/install.ts","../src/core/slot.ts","../src/components/utility/translation/ATranslation.ts","../src/components/utility/translation/ATranslationDefault.vue","../src/components/utility/translation/ATranslationDefault.vue","../src/components/utility/form-input-list/AFormInputList.vue","../src/components/utility/form-input-list/AFormInputList.vue","../src/components/utility/pagination/module.ts","../src/components/utility/pagination/APagination.ts","../src/components/utility/entity/collection/utils/component.ts","../src/components/utility/entity/collection/utils/options.ts","../src/components/utility/entity/collection/utils/handlers.ts","../src/utils/boolable-to-object.ts","../src/components/utility/entity/socket/module.ts","../src/components/utility/entity/collection/module.ts","../src/components/utility/entity/record/error.ts","../src/components/utility/entity/record/helpers.ts","../src/components/utility/entity/record/module.ts","../src/components/utility/toggle-button/AToggleButton.vue","../src/components/utility/toggle-button/AToggleButton.vue","../src/components/utility/toggle-button/module.ts","../src/components/utility/search/module.ts","../src/components/utility/search/ASearch.ts","../src/components/utility/entity/picker/module.ts","../src/components/utility/entity/AEntityDelete.ts","../src/components/utility/title/module.ts","../src/components/utility/title/ATitle.ts","../src/components/utility/LanguageSwitcherDropdown.ts","../src/components/utility/AFormSubmit.ts","../src/components/entities/client/AClient.ts","../src/components/entities/realm/ARealm.ts","../src/composables/is-editing.ts","../src/composables/on-change.ts","../src/composables/updated-at.ts","../src/composables/use-permission-check.ts","../src/components/entities/realm/ARealmForm.ts","../src/components/entities/realm/ARealms.ts","../src/components/entities/realm/ARealmPicker.ts","../src/components/entities/client/AClientForm.vue","../src/components/entities/client/AClientForm.vue","../src/components/entities/client/AClients.ts","../src/components/entities/client/AClientPicker.ts","../src/components/entities/permission/APermission.ts","../src/components/entities/permission/APermissionCheck.ts","../src/components/entities/permission/APermissionForm.ts","../src/components/entities/permission/APermissions.ts","../src/components/entities/policy/APolicies.ts","../src/components/entities/policy/APolicyTypeBadge.vue","../src/components/entities/policy/APolicyTypeBadge.vue","../src/components/entities/policy/APolicyDetailNav.vue","../src/components/entities/policy/APolicyDetailNav.vue","../src/components/entities/policy/APolicyInlineInfo.vue","../src/components/entities/policy/APolicyInlineInfo.vue","../src/components/entities/policy/APolicySummary.vue","../src/components/entities/policy/APolicySummary.vue","../src/components/entities/permission-policy-binding/APermissionPolicyBindingButton.ts","../src/components/entities/client-permission/AClientPermissionAssignment.vue","../src/components/entities/client-permission/AClientPermissionAssignment.vue","../src/components/entities/client-permission/AClientPermissionAssignments.vue","../src/components/entities/client-permission/AClientPermissionAssignments.vue","../src/components/entities/role/ARoleForm.ts","../src/components/entities/role/ARoles.ts","../src/components/entities/role/ARole.ts","../src/components/entities/client-role/AClientRoleAssignment.vue","../src/components/entities/client-role/AClientRoleAssignment.vue","../src/components/entities/client-role/AClientRoleAssignments.vue","../src/components/entities/client-role/AClientRoleAssignments.vue","../src/components/entities/client-scope/AClientScope.ts","../src/components/entities/client-scope/AClientScopes.ts","../src/components/entities/scope/AScopeForm.ts","../src/components/entities/scope/AScopes.ts","../src/components/entities/scope/AScope.ts","../src/components/entities/client-scope/AClientScopeAssignment.vue","../src/components/entities/client-scope/AClientScopeAssignment.vue","../src/components/entities/client-scope/AClientScopeAssignments.vue","../src/components/entities/client-scope/AClientScopeAssignments.vue","../src/components/entities/identity-provider/AIdentityProvider.ts","../src/components/entities/identity-provider/AIdentityProviderBasicFields.ts","../src/components/entities/identity-provider/AIdentityProviderLdapConnectionFields.ts","../src/components/entities/identity-provider/AIdentityProviderLdapCredentialsFields.ts","../src/components/entities/identity-provider/AIdentityProviderLdapGroupFields.ts","../src/components/entities/identity-provider/AIdentityProviderLdapUserFields.ts","../src/components/entities/identity-provider/protocol/utils.ts","../src/components/entities/identity-provider/AIdentityProviderProtocol.ts","../src/components/entities/identity-provider/AIdentityProviderLdapForm.ts","../src/components/entities/identity-provider/preset/utils.ts","../src/components/entities/identity-provider/AIdentityProviderPreset.ts","../src/components/entities/identity-provider/AIdentityProviderPicker.vue","../src/components/entities/identity-provider/AIdentityProviderPicker.vue","../src/components/entities/identity-provider/AIdentityProviderOAuth2ClientFields.ts","../src/components/entities/identity-provider/AIdentityProviderOAuth2Discovery.ts","../src/components/entities/identity-provider/AIdentityProviderOAuth2EndpointFields.vue","../src/components/entities/identity-provider/AIdentityProviderOAuth2EndpointFields.vue","../src/components/entities/identity-provider/AIdentityProviderOAuth2Form.ts","../src/components/entities/identity-provider/AIdentityProviderForm.ts","../src/components/entities/identity-provider/AIdentityProviders.ts","../src/components/entities/identity-provider/AIdentityProviderIcon.vue","../src/components/entities/identity-provider/AIdentityProviderIcon.vue","../src/components/entities/identity-provider-role/AIdentityProviderRoleAssignment.vue","../src/components/entities/identity-provider-role/AIdentityProviderRoleAssignment.vue","../src/components/entities/identity-provider-role/AIdentityProviderRoleAssignments.vue","../src/components/entities/identity-provider-role/AIdentityProviderRoleAssignments.vue","../src/components/entities/policy/attribute-names/AAttributeNamesPolicyForm.vue","../src/components/entities/policy/attribute-names/AAttributeNamesPolicyForm.vue","../src/components/entities/policy/APolicyParentAssignment.ts","../src/components/entities/policy/APolicyPicker.vue","../src/components/entities/policy/APolicyPicker.vue","../src/components/entities/policy/composite/ACompositePolicyForm.vue","../src/components/entities/policy/composite/ACompositePolicyForm.vue","../src/components/entities/policy/date/ADatePolicyForm.vue","../src/components/entities/policy/date/ADatePolicyForm.vue","../src/components/entities/policy/identity/AIdentityPolicyForm.vue","../src/components/entities/policy/identity/AIdentityPolicyForm.vue","../src/components/entities/policy/realm-match/ARealmMatchPolicyForm.vue","../src/components/entities/policy/realm-match/ARealmMatchPolicyForm.vue","../src/components/entities/policy/time/ATimePolicyForm.vue","../src/components/entities/policy/time/ATimePolicyForm.vue","../src/components/entities/policy/APolicy.ts","../src/components/entities/policy/APolicyTypePicker.vue","../src/components/entities/policy/APolicyTypePicker.vue","../src/components/entities/policy/APolicyBasicForm.vue","../src/components/entities/policy/APolicyBasicForm.vue","../src/components/entities/policy/APolicyForm.vue","../src/components/entities/policy/APolicyForm.vue","../src/components/entities/permission-client/APermissionClientAssignments.vue","../src/components/entities/permission-client/APermissionClientAssignments.vue","../src/components/entities/permission-policy/APermissionPolicyAssignment.vue","../src/components/entities/permission-policy/APermissionPolicyAssignment.vue","../src/components/entities/permission-policy/APermissionPolicyAssignments.vue","../src/components/entities/permission-policy/APermissionPolicyAssignments.vue","../src/components/entities/robot-permission/ARobotPermissionAssignment.vue","../src/components/entities/robot-permission/ARobotPermissionAssignment.vue","../src/components/entities/robot/ARobot.ts","../src/components/entities/robot/ARobotForm.ts","../src/components/entities/robot/ARobots.ts","../src/components/entities/permission-robot/APermissionRobotAssignments.vue","../src/components/entities/permission-robot/APermissionRobotAssignments.vue","../src/components/entities/role-permission/ARolePermissionAssignment.vue","../src/components/entities/role-permission/ARolePermissionAssignment.vue","../src/components/entities/role-permission/ARolePermissionAssignments.vue","../src/components/entities/role-permission/ARolePermissionAssignments.vue","../src/components/entities/permission-role/APermissionRoleAssignments.vue","../src/components/entities/permission-role/APermissionRoleAssignments.vue","../src/components/entities/user-permission/AUserPermissionAssignment.vue","../src/components/entities/user-permission/AUserPermissionAssignment.vue","../src/components/entities/user-permission/AUserPermissionAssignments.vue","../src/components/entities/user-permission/AUserPermissionAssignments.vue","../src/components/entities/user/AUser.ts","../src/components/entities/user/AUserForm.ts","../src/components/entities/user/AUsers.ts","../src/components/entities/user/AUserPasswordForm.ts","../src/components/entities/permission-user/APermissionUserAssignments.vue","../src/components/entities/permission-user/APermissionUserAssignments.vue","../src/components/entities/robot-permission/ARobotPermissionAssignments.vue","../src/components/entities/robot-permission/ARobotPermissionAssignments.vue","../src/components/entities/robot-role/ARobotRoleAssignment.vue","../src/components/entities/robot-role/ARobotRoleAssignment.vue","../src/components/entities/robot-role/ARobotRoleAssignments.vue","../src/components/entities/robot-role/ARobotRoleAssignments.vue","../src/components/entities/role-client/ARoleClientAssignments.vue","../src/components/entities/role-client/ARoleClientAssignments.vue","../src/components/entities/role-robot/ARoleRobotAssignments.vue","../src/components/entities/role-robot/ARoleRobotAssignments.vue","../src/components/entities/user-role/AUserRoleAssignment.vue","../src/components/entities/user-role/AUserRoleAssignment.vue","../src/components/entities/user-role/AUserRoleAssignments.vue","../src/components/entities/user-role/AUserRoleAssignments.vue","../src/components/entities/role-user/ARoleUserAssignments.vue","../src/components/entities/role-user/ARoleUserAssignments.vue","../src/components/entities/scope-client/AScopeClientAssignments.vue","../src/components/entities/scope-client/AScopeClientAssignments.vue","../src/components/entities/index.ts","../src/module.ts","../src/components/workflows/Login.vue","../src/components/workflows/Login.vue","../src/components/workflows/authorize/AuthorizeScope.vue","../src/components/workflows/authorize/AuthorizeScope.vue","../src/components/workflows/authorize/AuthorizeScopes.vue","../src/components/workflows/authorize/AuthorizeScopes.vue","../src/components/workflows/authorize/AuthorizeForm.vue","../src/components/workflows/authorize/AuthorizeForm.vue","../src/components/workflows/authorize/AuthorizeText.vue","../src/components/workflows/authorize/AuthorizeText.vue","../src/components/workflows/authorize/Authorize.vue","../src/components/workflows/authorize/Authorize.vue","../src/index.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n<script lang=\"ts\">\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport { VCFormGroup, VCFormInput } from '@vuecs/form-controls';\nimport useVuelidate from '@vuelidate/core';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport { defineComponent, reactive } from 'vue';\n\nexport default defineComponent({\n    components: {\n        IVuelidate,\n        VCFormInput,\n        VCFormGroup, \n    },\n    props: {\n        name: {\n            type: String,\n            default: undefined,\n        },\n        disabled: {\n            type: Boolean,\n            default: false,\n        },\n    },\n    emits: ['updated', 'deleted'],\n    setup(props, ctx) {\n        const form = reactive({ name: props.name });\n\n        const vuelidate = useVuelidate({\n            name: {\n                required,\n                minLength: minLength(2),\n                maxLength: maxLength(512),\n            },\n        }, form);\n\n        const handleUpdated = () => {\n            ctx.emit('updated', vuelidate.value.name.$model);\n        };\n\n        const handleDeleted = () => {\n            ctx.emit('deleted');\n        };\n\n        return {\n            handleUpdated,\n            handleDeleted,\n            vuelidate,\n        };\n    },\n});\n</script>\n<template>\n    <IVuelidate :validation=\"vuelidate.name\">\n        <template #default=\"props\">\n            <VCFormGroup\n                :validation-messages=\"props.data\"\n                :validation-severity=\"props.severity\"\n            >\n                <VCFormInput\n                    v-model=\"vuelidate.name.$model\"\n                    @change=\"handleUpdated\"\n                >\n                    <template #groupAppend>\n                        <button\n                            :disabled=\"disabled\"\n                            type=\"button\"\n                            class=\"btn btn-xs btn-warning\"\n                            @click.prevent=\"handleDeleted\"\n                        >\n                            <i class=\"fa fa-minus\" />\n                        </button>\n                    </template>\n                </VCFormInput>\n            </VCFormGroup>\n        </template>\n    </IVuelidate>\n</template>\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n<script lang=\"ts\">\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport { VCFormGroup, VCFormInput } from '@vuecs/form-controls';\nimport useVuelidate from '@vuelidate/core';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport { defineComponent, reactive } from 'vue';\n\nexport default defineComponent({\n    components: {\n        IVuelidate,\n        VCFormInput,\n        VCFormGroup, \n    },\n    props: {\n        name: {\n            type: String,\n            default: undefined,\n        },\n        disabled: {\n            type: Boolean,\n            default: false,\n        },\n    },\n    emits: ['updated', 'deleted'],\n    setup(props, ctx) {\n        const form = reactive({ name: props.name });\n\n        const vuelidate = useVuelidate({\n            name: {\n                required,\n                minLength: minLength(2),\n                maxLength: maxLength(512),\n            },\n        }, form);\n\n        const handleUpdated = () => {\n            ctx.emit('updated', vuelidate.value.name.$model);\n        };\n\n        const handleDeleted = () => {\n            ctx.emit('deleted');\n        };\n\n        return {\n            handleUpdated,\n            handleDeleted,\n            vuelidate,\n        };\n    },\n});\n</script>\n<template>\n    <IVuelidate :validation=\"vuelidate.name\">\n        <template #default=\"props\">\n            <VCFormGroup\n                :validation-messages=\"props.data\"\n                :validation-severity=\"props.severity\"\n            >\n                <VCFormInput\n                    v-model=\"vuelidate.name.$model\"\n                    @change=\"handleUpdated\"\n                >\n                    <template #groupAppend>\n                        <button\n                            :disabled=\"disabled\"\n                            type=\"button\"\n                            class=\"btn btn-xs btn-warning\"\n                            @click.prevent=\"handleDeleted\"\n                        >\n                            <i class=\"fa fa-minus\" />\n                        </button>\n                    </template>\n                </VCFormInput>\n            </VCFormGroup>\n        </template>\n    </IVuelidate>\n</template>\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { App } from 'vue';\nimport { inject as _inject, hasInjectionContext } from 'vue';\n\nexport function inject<T = any>(\n    key: string | symbol,\n    instance?: App,\n) : T | undefined {\n    if (\n        instance &&\n        instance._context &&\n        instance._context.provides &&\n        instance._context.provides[key]\n    ) {\n        return instance._context.provides[key];\n    }\n\n    if (hasInjectionContext()) {\n        return _inject(key, undefined);\n    }\n\n    return undefined;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { App } from 'vue';\nimport { provide as _provide } from 'vue';\nimport { inject } from './inject';\n\nexport function provide(\n    key: string | symbol,\n    value: unknown,\n    app?: App,\n) {\n    if (typeof app === 'undefined') {\n        const val = inject(key);\n        if (typeof val !== 'undefined') {\n            return;\n        }\n\n        _provide(key, value);\n\n        return;\n    }\n\n    if (\n        app &&\n        app._context &&\n        app._context.provides &&\n        app._context.provides[key]\n    ) {\n        return;\n    }\n\n    app.provide(key, value);\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { App } from 'vue';\nimport type { ClientAuthenticationHook } from '@authup/core-http-kit';\nimport { inject } from '../../inject';\nimport { provide } from '../../provide';\n\nconst sym = Symbol.for('AuthupHTTPClientAuthenticationHook');\n\nexport function injectHTTPClientAuthenticationHook(app?: App) : ClientAuthenticationHook {\n    const instance = inject<ClientAuthenticationHook>(sym, app);\n    if (!instance) {\n        throw new Error('The http client authentication hook has not been injected in the app context.');\n    }\n\n    return instance;\n}\n\nexport function hasHTTPClientAuthenticationHook(app?: App) : boolean {\n    try {\n        return !!injectHTTPClientAuthenticationHook(app);\n    } catch {\n        return false;\n    }\n}\n\nexport function provideHTTPClientAuthenticationHook(\n    refresher: ClientAuthenticationHook,\n    app?: App,\n) {\n    provide(sym, refresher, app);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport const STORE_ID = 'authup';\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum StoreDispatcherEventName {\n    LOGGING_IN = 'loggingIn',\n    LOGGED_IN = 'loggedIn',\n\n    LOGGING_OUT = 'loggingOut',\n    LOGGED_OUT = 'loggedOut',\n\n    RESOLVING = 'resolving',\n    RESOLVED = 'resolved',\n\n    ACCESS_TOKEN_UPDATED = 'accessTokenUpdated',\n    ACCESS_TOKEN_EXPIRE_DATE_UPDATED = 'accessTokenExpireDateUpdated',\n\n    REFRESH_TOKEN_UPDATED = 'refreshTokenUpdated',\n\n    USER_UPDATED = 'userUpdated',\n\n    REALM_UPDATED = 'realmUpdated',\n    REALM_MANAGEMENT_UPDATED = 'realmManagementUpdated',\n}\n","// src/event-emitter.ts\nvar EventEmitter = class {\n  /**\n   * A Map of event names to registered handler functions.\n   */\n  all;\n  constructor(all) {\n    this.all = all || /* @__PURE__ */ new Map();\n  }\n  on(type, handler) {\n    if (!this.all.has(type)) {\n      this.all.set(type, []);\n    }\n    const handlers = this.all.get(type);\n    handlers.push(handler);\n    return () => handlers.splice(handlers.indexOf(handler) >>> 0, 1);\n  }\n  off(type, handler) {\n    if (!type) {\n      return this.all.clear();\n    }\n    const handlers = this.all.get(type);\n    if (handlers) {\n      if (handler) {\n        handlers.splice(handlers.indexOf(handler) >>> 0, 1);\n      } else {\n        this.all.delete(type);\n      }\n    }\n  }\n  /**\n   * Invoke all handlers for the given type.\n   * If present, `'*'` handlers are invoked after type-matched handlers.\n   *\n   * Note: Manually firing `'*'` handlers is not supported.\n   *\n   * @param type The event type to invoke\n   * @param payload Any value to each handler\n   */\n  emit(type, ...payload) {\n    let handlers = this.all.get(type);\n    handlers?.slice().map((handler) => {\n      handler(...payload);\n    });\n    handlers = this.all.get(\"*\");\n    if (handlers) {\n      handlers.slice().map((handler) => {\n        handler(type, payload);\n      });\n    }\n  }\n};\nexport {\n  EventEmitter\n};\n//# sourceMappingURL=index.js.map","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EventEmitter } from '@posva/event-emitter';\nimport type { StoreDispatcher, StoreDispatcherEvents } from './types';\n\nexport function createStoreDispatcher() : StoreDispatcher {\n    return new EventEmitter<StoreDispatcherEvents>();\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { App } from 'vue';\nimport { inject } from '../../inject';\nimport { provide } from '../../provide';\nimport type { StoreDispatcher } from './types';\n\nconst sym = Symbol.for('AuthupStoreEventBus');\n\nexport function injectStoreDispatcher(app?: App) : StoreDispatcher {\n    const instance = inject<StoreDispatcher>(sym, app);\n    if (!instance) {\n        throw new Error('The store dispatcher has not been injected in the app context.');\n    }\n\n    return instance;\n}\n\nexport function provideStoreDispatcher(eventBus: StoreDispatcher, app?: App) {\n    provide(sym, eventBus, app);\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n    PermissionEvaluator,\n    PermissionMemoryProvider,\n    PolicyEngine,\n} from '@authup/access';\nimport { OAuth2Error } from '@authup/specs';\nimport { computed, ref } from 'vue';\nimport type {\n    OAuth2TokenGrantResponse,\n    OAuth2TokenIntrospectionResponse,\n} from '@authup/specs';\nimport type {\n    Realm,\n    User,\n} from '@authup/core-kit';\nimport { REALM_MASTER_NAME } from '@authup/core-kit';\nimport { Client } from '@authup/core-http-kit';\nimport { StoreDispatcherEventName } from './dispatcher';\nimport type { StoreCreateContext, StoreLoginContext } from './types';\n\ntype InputFn = (...args: any[]) => Promise<any>;\ntype OutputFn<F extends InputFn> = (...args: Parameters<F>) => Promise<Awaited<ReturnType<F>>>;\n\nfunction createPromiseShareWrapperFn<F extends InputFn>(\n    fn: F,\n) : OutputFn<F> {\n    let promise : Promise<Awaited<ReturnType<F>>> | undefined;\n\n    return (...args: Parameters<F>) => {\n        if (promise) {\n            return promise;\n        }\n\n        promise = new Promise<Awaited<ReturnType<F>>>(\n            (resolve, reject) => {\n                fn(...args)\n                    .then((r) => resolve(r))\n                    .catch((e) => reject(e));\n            },\n        );\n\n        promise.finally(() => {\n            setTimeout(() => {\n                promise = undefined;\n            }, 0);\n        });\n\n        return promise;\n    };\n}\n\ntype RealmMinimal = Pick<Realm, 'id' | 'name'>;\n\nexport function createStore(context: StoreCreateContext) {\n    const client = new Client({ baseURL: context.baseURL });\n\n    const cookiesRead = ref<boolean>(false);\n    const setCookiesRead = (value: boolean) => {\n        cookiesRead.value = value;\n    };\n\n    // --------------------------------------------------------------------\n\n    const accessToken = ref<string | null>(null);\n    const setAccessToken = (input: string | null) => {\n        accessToken.value = input;\n\n        context.dispatcher.emit(\n            StoreDispatcherEventName.ACCESS_TOKEN_UPDATED,\n            input,\n        );\n    };\n\n    // --------------------------------------------------------------------\n\n    const accessTokenExpireDate = ref<Date | null>(null);\n    const setAccessTokenExpireDate = (input: Date | number | string | null) => {\n        if (typeof input === 'number' || typeof input === 'string') {\n            accessTokenExpireDate.value = new Date(input); // verify microseconds or seconds\n        } else {\n            accessTokenExpireDate.value = input;\n        }\n\n        context.dispatcher.emit(\n            StoreDispatcherEventName.ACCESS_TOKEN_EXPIRE_DATE_UPDATED,\n            accessTokenExpireDate.value,\n        );\n    };\n\n    // --------------------------------------------------------------------\n\n    const refreshToken = ref<string | null>(null);\n    const setRefreshToken = (input: string | null) => {\n        refreshToken.value = input;\n\n        context.dispatcher.emit(\n            StoreDispatcherEventName.REFRESH_TOKEN_UPDATED,\n            input,\n        );\n    };\n\n    // --------------------------------------------------------------------\n\n    const user = ref<User | null>(null);\n    const userId = computed<string | null>(() => (user.value ? user.value.id : null));\n\n    const setUser = (input: User | null) => {\n        user.value = input;\n\n        context.dispatcher.emit(StoreDispatcherEventName.USER_UPDATED, input);\n    };\n\n    // --------------------------------------------------------------------\n\n    const realm = ref<RealmMinimal | null>(null);\n    const realmId = computed<string | undefined>(() => (realm.value ? realm.value.id : undefined));\n    const realmName = computed<string | undefined>(() => (realm.value ? realm.value.name : undefined));\n    const realmIsRoot = computed<boolean>(() => {\n        if (realm.value) {\n            return realm.value.name === REALM_MASTER_NAME;\n        }\n\n        return false;\n    });\n\n    const setRealm = (input: RealmMinimal | null) => {\n        realm.value = input;\n\n        context.dispatcher.emit(StoreDispatcherEventName.REALM_UPDATED, input);\n    };\n\n    const realmManagement = ref<RealmMinimal | null>(null);\n    const realmManagementId = computed<string | undefined>(() => (realmManagement.value ? realmManagement.value.id : realmId.value));\n    const realmManagementName = computed<string | undefined>(() => (realmManagement.value ? realmManagement.value.name : realmName.value));\n\n    const setRealmManagement = (input: RealmMinimal | null) => {\n        realmManagement.value = input;\n\n        context.dispatcher.emit(StoreDispatcherEventName.REALM_MANAGEMENT_UPDATED, input);\n    };\n\n    // --------------------------------------------------------------------\n\n    const permissionProvider = new PermissionMemoryProvider();\n    const permissionEvaluator = new PermissionEvaluator({\n        provider: permissionProvider,\n        policyEngine: new PolicyEngine(),\n    });\n\n    // --------------------------------------------------------------------\n\n    const cleanup = async () => {\n        const tempAccessToken = accessToken.value;\n        const tempRefreshToken = refreshToken.value;\n\n        setAccessToken(null);\n        setAccessTokenExpireDate(null);\n        setRefreshToken(null);\n        setUser(null);\n        setRealm(null);\n        setRealmManagement(null);\n\n        permissionProvider.setMany([]);\n\n        tokenResolved.value = false;\n        userResolved.value = false;\n\n        try {\n            if (tempAccessToken) {\n                await client.token.revoke({ token: tempAccessToken });\n            }\n        } catch {\n            // ...\n        }\n\n        try {\n            if (tempRefreshToken) {\n                await client.token.revoke({ token: tempRefreshToken });\n            }\n        } catch {\n            // ...\n        }\n    };\n\n    // --------------------------------------------------------------------\n\n    const userResolved = ref(false);\n    const resolveUser = async () : Promise<void> => {\n        if (!accessToken.value || userResolved.value) {\n            return Promise.resolve();\n        }\n\n        userResolved.value = true;\n\n        return client.userInfo.get<User>(`Bearer ${accessToken.value}`)\n            .then((response) => {\n                setUser(response);\n            });\n    };\n\n    // --------------------------------------------------------------------\n\n    const tokenResolved = ref(false);\n    const resolveToken = async () : Promise<void> => {\n        if (!accessToken.value || tokenResolved.value) {\n            return Promise.resolve();\n        }\n\n        tokenResolved.value = true;\n\n        return client.token.introspect<OAuth2TokenIntrospectionResponse>({ token: accessToken.value }, {\n            authorizationHeader: {\n                type: 'Bearer',\n                token: accessToken.value,\n            },\n        })\n            .then((response) => {\n                if (response.exp) {\n                    const expireDate = new Date(response.exp * 1000);\n                    setAccessTokenExpireDate(expireDate);\n                }\n\n                if (\n                    response.realm_id &&\n                    response.realm_name\n                ) {\n                    realm.value = {\n                        id: response.realm_id,\n                        name: response.realm_name,\n                    };\n\n                    if (!realmManagement.value) {\n                        setRealmManagement(realm.value);\n                    }\n                }\n\n                if (response.permissions) {\n                    permissionProvider.setMany(response.permissions.map((permission) => ({\n                        permission: {\n                            name: permission.name,\n                            realm_id: permission.realm_id,\n                            client_id: permission.client_id,\n                        },\n                    })));\n                }\n            });\n    };\n\n    // --------------------------------------------------------------------\n\n    const applyTokenGrantResponse = (\n        response: OAuth2TokenGrantResponse,\n    ) => {\n        const expireDate = new Date(Date.now() + response.expires_in * 1000);\n\n        setAccessTokenExpireDate(expireDate);\n        setAccessToken(response.access_token);\n\n        if (response.refresh_token) {\n            setRefreshToken(response.refresh_token);\n        } else {\n            setRefreshToken(null);\n        }\n    };\n\n    // --------------------------------------------------------------------\n\n    const refreshSession = createPromiseShareWrapperFn(\n        async (): Promise<void> => {\n            if (!refreshToken.value) {\n                throw new OAuth2Error('The access token can not be renewed.');\n            }\n\n            try {\n                const response = await client.token.createWithRefreshToken({ refresh_token: refreshToken.value });\n\n                applyTokenGrantResponse(response);\n            } catch (e) {\n                await cleanup();\n\n                throw e;\n            } finally {\n                tokenResolved.value = false;\n                userResolved.value = false;\n            }\n        },\n    );\n\n    // --------------------------------------------------------------------\n\n    // todo: rename to reload() ?\n    const resolveInternal = async () : Promise<void> => {\n        context.dispatcher.emit(StoreDispatcherEventName.RESOLVING);\n\n        try {\n            if (\n                !accessToken.value &&\n                refreshToken.value\n            ) {\n                await refreshSession();\n            }\n\n            if (accessToken.value) {\n                await resolveToken();\n\n                if (!user.value) {\n                    await resolveUser();\n                }\n            }\n        } catch (e) {\n            if (refreshToken.value) {\n                await refreshSession();\n                await resolveToken();\n                await resolveUser();\n            } else {\n                throw e;\n            }\n        }\n\n        context.dispatcher.emit(StoreDispatcherEventName.RESOLVED);\n    };\n\n    const resolve = createPromiseShareWrapperFn(resolveInternal);\n\n    const loggedIn = computed<boolean>(() => !!accessToken.value);\n    const login = async (ctx: StoreLoginContext) => {\n        context.dispatcher.emit(StoreDispatcherEventName.LOGGING_IN);\n\n        const response = await client.token.createWithPassword({\n            username: ctx.name,\n            password: ctx.password,\n            ...(realmId.value ? { realm_id: ctx.realmId } : {}),\n        });\n\n        applyTokenGrantResponse(response);\n\n        await resolveToken();\n        await resolveUser();\n\n        context.dispatcher.emit(StoreDispatcherEventName.LOGGED_IN);\n    };\n\n    const exchangeAuthorizationCode = async (code: string) => {\n        const response = await client.token.createWithAuthorizationCode({ code });\n\n        await cleanup();\n\n        applyTokenGrantResponse(response);\n\n        await resolveToken();\n        await resolveUser();\n    };\n\n    const logout = async () => {\n        context.dispatcher.emit(StoreDispatcherEventName.LOGGING_OUT);\n\n        await cleanup();\n\n        context.dispatcher.emit(StoreDispatcherEventName.LOGGED_OUT);\n    };\n\n    return {\n        cookiesRead,\n        setCookiesRead,\n\n        permissionEvaluator,\n\n        login,\n        logout,\n        loggedIn,\n        resolve,\n        exchangeAuthorizationCode,\n\n        applyTokenGrantResponse,\n        accessToken,\n        setAccessToken,\n        accessTokenExpireDate,\n        setAccessTokenExpireDate,\n        refreshToken,\n        setRefreshToken,\n\n        realm,\n        realmId,\n        realmIsRoot,\n        realmName,\n        setRealm,\n\n        realmManagement,\n        realmManagementId,\n        realmManagementName,\n        setRealmManagement,\n\n        user,\n        userId,\n        setUser,\n    };\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Pinia } from 'pinia';\nimport type { App } from 'vue';\nimport { inject } from '../inject';\nimport { provide } from '../provide';\nimport type { Store, StoreDefinition } from './types';\n\nconst sym = Symbol.for('AuthupStore');\n\nexport function injectStore(pinia?: Pinia, app?: App) : Store {\n    const instance = injectStoreFactory(app);\n    if (!instance) {\n        throw new Error('The store has not been injected in the app context.');\n    }\n\n    return instance(pinia);\n}\n\nexport function injectStoreFactory(app?: App) : StoreDefinition {\n    const instance = inject<StoreDefinition>(sym, app);\n    if (!instance) {\n        throw new Error('The store factory has not been injected in the app context.');\n    }\n\n    return instance;\n}\n\nexport function hasStoreFactory(app?: App) : boolean {\n    return !!inject(sym, app);\n}\n\nexport function provideStoreFactory(store: StoreDefinition, app?: App) {\n    provide(sym, store, app);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { CookieName } from '@authup/core-http-kit';\nimport { useCookies } from '@vueuse/integrations/useCookies';\nimport { defineStore } from 'pinia';\nimport type { App } from 'vue';\nimport type {\n    CookieGetFn, \n    CookieOptions, \n    CookieSetFn, \n    CookieUnsetFn,\n} from '../../types';\nimport { STORE_ID } from './constants';\nimport { createStore } from './create';\nimport { StoreDispatcherEventName, createStoreDispatcher, provideStoreDispatcher } from './dispatcher';\nimport { hasStoreFactory, provideStoreFactory } from './singleton';\nimport type { StoreInstallOptions } from './types';\n\nexport function installStore(app: App, options: StoreInstallOptions = {}) {\n    if (hasStoreFactory(app)) {\n        return;\n    }\n\n    const storeDispatcher = createStoreDispatcher();\n    provideStoreDispatcher(storeDispatcher, app);\n\n    const storeFactory = defineStore(\n        STORE_ID,\n        () => createStore({\n            baseURL: options.baseURL,\n            dispatcher: storeDispatcher,\n        }),\n    );\n    const store = storeFactory(options.pinia);\n\n    let cookieGet : CookieGetFn;\n    if (options.cookieGet) {\n        cookieGet = options.cookieGet;\n    } else {\n        const cookies = useCookies();\n        cookieGet = cookies.get;\n    }\n\n    let cookieSet: CookieSetFn;\n    if (options.cookieSet) {\n        cookieSet = options.cookieSet;\n    } else {\n        const cookies = useCookies();\n        cookieSet = cookies.set;\n    }\n\n    let cookieUnset : CookieUnsetFn;\n    if (options.cookieUnset) {\n        cookieUnset = options.cookieUnset;\n    } else if (options.cookieSet) {\n        cookieUnset = (key: string, opts: CookieOptions) => {\n            (options.cookieSet as CookieSetFn)(key, null, opts);\n        };\n    } else {\n        const cookies = useCookies();\n        cookieUnset = cookies.remove;\n    }\n\n    const readCookies = () => {\n        if (store.cookiesRead) {\n            return;\n        }\n\n        store.setCookiesRead(true);\n\n        const keys = Object.values(CookieName);\n\n        let value : any;\n        for (const key of keys) {\n            value = cookieGet(key);\n            if (!value) {\n                continue;\n            }\n\n            switch (key) {\n                case CookieName.ACCESS_TOKEN:\n                    if (!store.accessToken) {\n                        store.setAccessToken(value);\n                    }\n                    break;\n                case CookieName.ACCESS_TOKEN_EXPIRE_DATE:\n                    if (!store.accessTokenExpireDate) {\n                        store.setAccessTokenExpireDate(value);\n                    }\n                    break;\n                case CookieName.REFRESH_TOKEN:\n                    if (!store.refreshToken) {\n                        store.setRefreshToken(value);\n                    }\n                    break;\n                case CookieName.USER:\n                    if (!store.user) {\n                        store.setUser(value);\n                    }\n                    break;\n                case CookieName.REALM:\n                    if (!store.realm) {\n                        store.setRealm(value);\n                    }\n                    break;\n                case CookieName.REALM_MANAGEMENT:\n                    if (!store.realmManagement) {\n                        store.setRealmManagement(value);\n                    }\n                    break;\n            }\n        }\n    };\n\n    const maxAgeFn = () => {\n        if (!store.accessTokenExpireDate) {\n            return undefined;\n        }\n\n        return Math.floor(\n            Math.max(1000, new Date(`${store.accessTokenExpireDate}`).getTime() - Date.now()) /\n            1000,\n        );\n    };\n\n    storeDispatcher.on(\n        StoreDispatcherEventName.ACCESS_TOKEN_EXPIRE_DATE_UPDATED,\n        (input) => {\n            if (input) {\n                cookieSet(CookieName.ACCESS_TOKEN_EXPIRE_DATE, input, { maxAge: maxAgeFn() });\n            } else {\n                cookieUnset(CookieName.ACCESS_TOKEN_EXPIRE_DATE, {});\n            }\n        },\n    );\n\n    storeDispatcher.on(\n        StoreDispatcherEventName.ACCESS_TOKEN_UPDATED,\n        (input) => {\n            if (input) {\n                const maxAge = maxAgeFn();\n                cookieSet(CookieName.ACCESS_TOKEN, input, { maxAge });\n            } else {\n                cookieUnset(CookieName.ACCESS_TOKEN, {});\n            }\n        },\n    );\n\n    storeDispatcher.on(\n        StoreDispatcherEventName.REFRESH_TOKEN_UPDATED,\n        (input) => {\n            if (input) {\n                cookieSet(CookieName.REFRESH_TOKEN, input, {});\n            } else {\n                cookieUnset(CookieName.REFRESH_TOKEN, {});\n            }\n        },\n    );\n\n    storeDispatcher.on(\n        StoreDispatcherEventName.USER_UPDATED,\n        (input) => {\n            if (input) {\n                cookieSet(CookieName.USER, input, {});\n            } else {\n                cookieUnset(CookieName.USER, {});\n            }\n        },\n    );\n\n    storeDispatcher.on(\n        StoreDispatcherEventName.REALM_UPDATED,\n        (input) => {\n            if (input) {\n                cookieSet(CookieName.REALM, input, {});\n            } else {\n                cookieUnset(CookieName.REALM, {});\n            }\n        },\n    );\n\n    storeDispatcher.on(\n        StoreDispatcherEventName.REALM_MANAGEMENT_UPDATED,\n        (input) => {\n            if (input) {\n                cookieSet(CookieName.REALM_MANAGEMENT, input, {});\n            } else {\n                cookieUnset(CookieName.REALM_MANAGEMENT, {});\n            }\n        },\n    );\n\n    readCookies();\n\n    provideStoreFactory(storeFactory, app);\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { StoreGeneric, storeToRefs as _storeToRefs } from 'pinia';\nimport {\n    isReactive, \n    isRef, \n    toRaw, \n    toRef,\n} from 'vue';\n\nexport type StoreToRefs<T extends StoreGeneric> = ReturnType<typeof _storeToRefs<T>>;\n\nexport function storeToRefs<SS extends StoreGeneric>(\n    store: SS,\n): StoreToRefs<SS> {\n    store = toRaw(store);\n\n    const refs = {} as StoreToRefs<SS>;\n    const keys = Object.keys(store);\n    for (const key of keys) {\n        const value = store[key];\n        if (isRef(value) || isReactive(value)) {\n            refs[key as (keyof StoreToRefs<SS>)] = toRef(store, key) as any;\n        }\n    }\n\n    return refs;\n}\n","/*\n * Copyright (c) 2025.\n *  Author Peter Placzek (tada5hi)\n *  For the full copyright and license information,\n *  view the LICENSE file that was distributed with this source code.\n */\n\nimport { Client, ClientAuthenticationHook, ClientAuthenticationHookEventName } from '@authup/core-http-kit';\nimport type { App } from 'vue';\nimport { storeToRefs } from 'pinia';\nimport { hasHTTPClientAuthenticationHook, provideHTTPClientAuthenticationHook } from './singleton';\nimport { StoreDispatcherEventName, injectStoreDispatcher, injectStoreFactory } from '../../store';\nimport type { HTTPClientAuthenticationHookInstallOptions } from './types';\n\nexport function installHTTPClientAuthenticationHook(\n    app: App,\n    options: HTTPClientAuthenticationHookInstallOptions = {},\n) {\n    if (hasHTTPClientAuthenticationHook(app)) {\n        return;\n    }\n\n    const storeFactory = injectStoreFactory(app);\n    const store = storeFactory(options.pinia);\n\n    const { refreshToken } = storeToRefs(store);\n\n    const hook = new ClientAuthenticationHook({\n        baseURL: options.baseURL,\n        tokenCreator: () => {\n            if (!refreshToken.value) {\n                throw new Error('No refresh token available.');\n            }\n\n            const client = new Client({ baseURL: options.baseURL });\n            return client.token.createWithRefreshToken({ refresh_token: refreshToken.value });\n        },\n        timer: !options.isServer,\n    });\n\n    hook.on(ClientAuthenticationHookEventName.REFRESH_FINISHED, (response) => {\n        store.applyTokenGrantResponse(response);\n    });\n\n    let isSelfCallee = false;\n\n    hook.on(ClientAuthenticationHookEventName.HEADER_UNSET, () => {\n        if (!isSelfCallee) {\n            Promise.resolve()\n                .then(() => store.logout());\n        }\n    });\n\n    const storeDispatcher = injectStoreDispatcher(app);\n\n    const handleAccessTokenEvent = () => {\n        isSelfCallee = true;\n\n        if (store.accessToken) {\n            hook.enable();\n            hook.setAuthorizationHeader({\n                type: 'Bearer',\n                token: store.accessToken as string,\n            });\n        } else {\n            hook.disable();\n            hook.unsetAuthorizationHeader();\n        }\n\n        isSelfCallee = false;\n    };\n\n    const handleAccessTokenExpireDateEvent = () => {\n        if (store.accessTokenExpireDate) {\n            const expiresIn = Math.floor((store.accessTokenExpireDate.getTime() - Date.now()) / 1000);\n            hook.setTimer(expiresIn);\n        }\n    };\n\n    storeDispatcher.on(\n        StoreDispatcherEventName.ACCESS_TOKEN_UPDATED,\n        () => handleAccessTokenEvent(),\n    );\n\n    storeDispatcher.on(\n        StoreDispatcherEventName.ACCESS_TOKEN_EXPIRE_DATE_UPDATED,\n        () => handleAccessTokenExpireDateEvent(),\n    );\n\n    handleAccessTokenEvent();\n    handleAccessTokenExpireDateEvent();\n\n    provideHTTPClientAuthenticationHook(hook, app);\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from '@authup/core-http-kit';\nimport type { App } from 'vue';\nimport { inject } from '../inject';\nimport { provide } from '../provide';\n\nexport const HTTPClientSymbol = Symbol.for('AuthupHTTPClient');\n\nexport function provideHTTPClient(client: Client, app?: App) {\n    provide(HTTPClientSymbol, client, app);\n}\n\nexport function hasHTTPClient(app?: App) : boolean {\n    try {\n        return !!injectHTTPClient(app);\n    } catch {\n        return false;\n    }\n}\n\nexport function injectHTTPClient(app?: App) {\n    const instance = inject<Client>(HTTPClientSymbol, app);\n    if (!instance) {\n        throw new Error('The api client has not been injected.');\n    }\n\n    return instance;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Client } from '@authup/core-http-kit';\nimport type { App } from 'vue';\nimport { hasHTTPClient, provideHTTPClient } from './singleton';\nimport type { HTTPClientInstallOptions } from './types';\nimport { injectHTTPClientAuthenticationHook } from './authentication-hook';\n\nexport function installHTTPClient(app: App, options: HTTPClientInstallOptions = {}) {\n    if (hasHTTPClient(app)) {\n        return;\n    }\n\n    const client = new Client({ baseURL: options.baseURL });\n\n    const authenticationHook = injectHTTPClientAuthenticationHook(app);\n    authenticationHook.attach(client);\n\n    provideHTTPClient(client, app);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\ntype PartialRecordWithNull<T extends Record<string, any>> = {\n    [K in keyof T]?: T[K] | null\n};\n\n/**\n * Assign properties from input to src.\n * 'null' values will be transformed to an empty string.\n *\n * @param src\n * @param input\n */\nexport function assignFormProperties<T extends Record<string, any>>(\n    src: T,\n    input: PartialRecordWithNull<T> = {},\n) : T {\n    const keys : (keyof T)[] = Object.keys(input);\n    for (const key of keys) {\n        const value = input[key];\n        if (value === null) {\n            src[key] = '' as T[keyof T];\n        } else {\n            src[key] = value as T[keyof T];\n        }\n    }\n\n    return src;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum TranslatorTranslationGroup {\n    DEFAULT = 'default',\n\n    CLIENT = 'authupClient',\n\n    VUECS = 'vuecs',\n    VUELIDATE = 'vuelidate',\n}\n\nexport enum TranslatorTranslationVuecsKey {\n    NO_MORE = 'noMore',\n}\n\nexport enum TranslatorTranslationClientKey {\n    NAME_HINT = 'nameHint',\n    DESCRIPTION_HINT = 'descriptionHint',\n    REDIRECT_URI_HINT = 'redirectURIHint',\n    IS_CONFIDENTIAL = 'isConfidential',\n    IS_ACTIVE = 'isActive',\n    HASH_SECRET = 'hashSecret',\n}\n\nexport enum TranslatorTranslationDefaultKey {\n    ADD = 'add',\n    CREATE = 'create',\n    DELETE = 'delete',\n    GENERATE = 'generate',\n    UPDATE = 'update',\n\n    ACTIVE = 'active',\n    INACTIVE = 'inactive',\n\n    LOCKED = 'locked',\n    NOT_LOCKED = 'notLocked',\n\n    VALUE_IS_REGEX = 'valueIsRegex',\n\n    CLIENT = 'client',\n    CLIENTS = 'clients',\n    CLIENT_SCOPES = 'clientScopes',\n    DISPLAY_NAME = 'displayName',\n    EMAIL = 'email',\n    EXTERNAL_ID = 'externalId',\n    HASHED = 'hashed',\n    OVERVIEW = 'overview',\n    IDENTITY_PROVIDERS = 'identityProviders',\n    NAME = 'name',\n    DECISION_STRATEGY = 'decisionStrategy',\n    DESCRIPTION = 'description',\n    PERMISSIONS = 'permissions',\n    POLICY = 'policy',\n    POLICIES = 'policies',\n    REALM = 'realm',\n    ROBOTS = 'robots',\n    REALMS = 'realms',\n    ROLES = 'roles',\n    SCOPES = 'scopes',\n    SECRET = 'secret',\n    REDIRECT_URIS = 'redirectUris',\n    USERS = 'users',\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type {\n    BaseValidationTranslations,\n    NestedValidationsTranslations,\n} from '@ilingo/vuelidate';\nimport {\n    useTranslationsForBaseValidation as _useTranslationsForBaseValidation,\n    useTranslationsForNestedValidations as _useTranslationsForNestedValidations,\n} from '@ilingo/vuelidate';\nimport { useTranslation as _useTranslation, injectLocale } from '@ilingo/vuelidate/vue';\nimport type {\n    BaseValidation, \n    Validation, \n    ValidationArgs, \n    ValidationRuleCollection,\n} from '@vuelidate/core';\nimport type { GetContextReactive } from '@ilingo/vue';\nimport type { Ref } from 'vue';\n\nexport function injectTranslatorLocale() : Ref<string> {\n    return injectLocale();\n}\n\nexport function useTranslation(input: GetContextReactive) : Ref<string> {\n    return _useTranslation(input);\n}\n\nexport function useTranslationsForBaseValidation<\n    T = unknown,\n    V extends ValidationRuleCollection<T> = ValidationRuleCollection<T>,\n>(\n    result: BaseValidation<T, V>,\n) : BaseValidationTranslations {\n    return _useTranslationsForBaseValidation(result);\n}\n\nexport function useTranslationsForNestedValidation<\n    V extends ValidationArgs = ValidationArgs,\n    T = unknown,\n>(validation: Validation<V, T>) : NestedValidationsTranslations<T> {\n    return _useTranslationsForNestedValidations<V, T>(validation);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { GetContext } from 'ilingo';\nimport type { Ref } from 'vue';\nimport { useTranslation } from './singleton';\n\ntype Input = Omit<GetContext, 'group'>;\nexport function useTranslationsForGroup<T extends Input>(\n    group: string,\n    elements: T[],\n) : Record<`${T['key']}`, Ref<string>> {\n    const output = {} as Record<string, Ref<string>>;\n    for (const element of elements) {\n        output[element.key] = useTranslation({\n            ...element,\n            group,\n        });\n    }\n\n    return output;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { LinesRecord } from 'ilingo';\nimport { TranslatorTranslationClientKey } from '../constants';\n\nexport const TranslatorTranslationClientGerman : LinesRecord = {\n    [TranslatorTranslationClientKey.NAME_HINT]: 'Etwas, das Benutzer erkennen und vertrauen werden',\n    [TranslatorTranslationClientKey.DESCRIPTION_HINT]: 'Dies wird allen Benutzern dieser Anwendung angezeigt',\n    [TranslatorTranslationClientKey.REDIRECT_URI_HINT]: 'URI-Muster, zu dem ein Browser nach einem erfolgreichen Login weiterleiten kann',\n    [TranslatorTranslationClientKey.IS_CONFIDENTIAL]: 'Ist vertraulich?',\n    [TranslatorTranslationClientKey.IS_ACTIVE]: 'Ist aktiv?',\n    [TranslatorTranslationClientKey.HASH_SECRET]: 'Geheimnis hashen?',\n};\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { LinesRecord } from 'ilingo';\nimport { TranslatorTranslationDefaultKey } from '../constants';\n\nexport const TranslatorTranslationDefaultGerman: LinesRecord = {\n    [TranslatorTranslationDefaultKey.ADD]: 'hinzufügen',\n    [TranslatorTranslationDefaultKey.CREATE]: 'erstellen',\n    [TranslatorTranslationDefaultKey.DELETE]: 'löschen',\n    [TranslatorTranslationDefaultKey.GENERATE]: 'generieren',\n    [TranslatorTranslationDefaultKey.UPDATE]: 'aktualisieren',\n\n    [TranslatorTranslationDefaultKey.ACTIVE]: 'aktiv',\n    [TranslatorTranslationDefaultKey.INACTIVE]: 'inaktiv',\n\n    [TranslatorTranslationDefaultKey.LOCKED]: 'gesperrt',\n    [TranslatorTranslationDefaultKey.NOT_LOCKED]: 'nicht gesperrt',\n\n    [TranslatorTranslationDefaultKey.VALUE_IS_REGEX]: 'Wert ist regex pattern?',\n\n    [TranslatorTranslationDefaultKey.CLIENT]: 'Client',\n    [TranslatorTranslationDefaultKey.CLIENTS]: 'Clients',\n    [TranslatorTranslationDefaultKey.CLIENT_SCOPES]: 'Client-Bereiche',\n    [TranslatorTranslationDefaultKey.DISPLAY_NAME]: 'Anzeigename',\n    [TranslatorTranslationDefaultKey.EMAIL]: 'E-Mail',\n    [TranslatorTranslationDefaultKey.EXTERNAL_ID]: 'externe ID',\n    [TranslatorTranslationDefaultKey.HASHED]: 'gehasht',\n    [TranslatorTranslationDefaultKey.OVERVIEW]: 'Überblick',\n    [TranslatorTranslationDefaultKey.IDENTITY_PROVIDERS]: 'Identitätsanbieter',\n    [TranslatorTranslationDefaultKey.NAME]: 'Name',\n    [TranslatorTranslationDefaultKey.DECISION_STRATEGY]: 'Entscheidungsstrategie',\n    [TranslatorTranslationDefaultKey.DESCRIPTION]: 'Beschreibung',\n    [TranslatorTranslationDefaultKey.PERMISSIONS]: 'Berechtigungen',\n    [TranslatorTranslationDefaultKey.POLICY]: 'Richtlinie',\n    [TranslatorTranslationDefaultKey.POLICIES]: 'Richtlinien',\n    [TranslatorTranslationDefaultKey.REALM]: 'Organisation',\n    [TranslatorTranslationDefaultKey.REALMS]: 'Organisationen',\n    [TranslatorTranslationDefaultKey.ROLES]: 'Rollen',\n    [TranslatorTranslationDefaultKey.SCOPES]: 'Bereiche',\n    [TranslatorTranslationDefaultKey.SECRET]: 'Geheimnis',\n    [TranslatorTranslationDefaultKey.REDIRECT_URIS]: 'Weiterleitungs-URIs',\n    [TranslatorTranslationDefaultKey.USERS]: 'Benutzer',\n};\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty } from '@authup/kit';\nimport { getSeverity } from '@ilingo/vuelidate';\nimport type { BaseValidation, Validation, ValidationRuleCollection } from '@vuelidate/core';\nimport { helpers } from '@vuelidate/validators';\nimport type { Ref } from 'vue';\n\nexport enum VuelidateCustomRuleKey {\n    ALPHA_NUM_HYPHEN_UNDERSCORE = 'alphaNumHyphenUnderscore',\n    ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT = 'alphaUpperNumHyphenUnderscoreDot',\n}\n\nexport const VuelidateCustomRule = {\n    [VuelidateCustomRuleKey.ALPHA_NUM_HYPHEN_UNDERSCORE]: helpers.regex(/^[a-z0-9-_]*$/),\n    [VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT]: helpers.regex(/^[a-z0-9-_.]*$/),\n};\n\nexport function getVuelidateSeverity<\n    T = unknown,\n    V extends ValidationRuleCollection<T> = ValidationRuleCollection<T>,\n>(vuelidate: BaseValidation<T, V>) {\n    return getSeverity<T, V>(vuelidate);\n}\n\nexport function extractVuelidateResultsFromChild(vuelidate: Ref<Validation>, child: string, keys?: string[]) {\n    const childResults = vuelidate.value.$getResultsForChild(child);\n    if (!childResults) {\n        return {};\n    }\n\n    const childKeys = keys ?? Object.keys(childResults)\n        .filter((key) => !key.startsWith('$'));\n\n    const result : Record<string, any> = {};\n    for (const childKey of childKeys) {\n        if (hasOwnProperty(childResults, childKey)) {\n            result[childKey] = (childResults[childKey] as { $model: Record<string, any> }).$model;\n        }\n    }\n\n    return result;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { LinesRecord } from 'ilingo';\nimport { VuelidateCustomRuleKey } from '../../vuelidate';\n\nexport const TranslatorTranslationVuelidateGerman : LinesRecord = {\n    [VuelidateCustomRuleKey.ALPHA_NUM_HYPHEN_UNDERSCORE]: 'Der Eingabewert darf nur aus folgenden Zeichen bestehen: [0-9a-z-_]+',\n    [VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT]: 'Der Eingabewert darf nur aus folgenden Zeichen bestehen: [0-9a-z-_.]+',\n};\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { LinesRecord } from 'ilingo';\nimport { TranslatorTranslationVuecsKey } from '../constants';\n\nexport const TranslatorTranslationVuecsGerman : LinesRecord = { [TranslatorTranslationVuecsKey.NO_MORE]: 'Keine weiteren {{name}} verfügbar' };\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { LinesRecord } from 'ilingo';\nimport { TranslatorTranslationClientKey } from '../constants';\n\nexport const TranslatorTranslationClientEnglish : LinesRecord = {\n    [TranslatorTranslationClientKey.NAME_HINT]: 'Something users will recognize and trust',\n    [TranslatorTranslationClientKey.DESCRIPTION_HINT]: 'Displayed to all users of this application',\n    [TranslatorTranslationClientKey.REDIRECT_URI_HINT]: 'URI pattern a browser can redirect to after a successful login',\n    [TranslatorTranslationClientKey.IS_CONFIDENTIAL]: 'Is confidential?',\n    [TranslatorTranslationClientKey.IS_ACTIVE]: 'Is active?',\n    [TranslatorTranslationClientKey.HASH_SECRET]: 'Hash secret?',\n};\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { LinesRecord } from 'ilingo';\nimport { TranslatorTranslationDefaultKey } from '../constants';\n\nexport const TranslatorTranslationDefaultEnglish : LinesRecord = {\n    [TranslatorTranslationDefaultKey.ADD]: 'add',\n    [TranslatorTranslationDefaultKey.CREATE]: 'create',\n    [TranslatorTranslationDefaultKey.DELETE]: 'delete',\n    [TranslatorTranslationDefaultKey.GENERATE]: 'generate',\n    [TranslatorTranslationDefaultKey.UPDATE]: 'update',\n\n    [TranslatorTranslationDefaultKey.ACTIVE]: 'active',\n    [TranslatorTranslationDefaultKey.INACTIVE]: 'inactive',\n\n    [TranslatorTranslationDefaultKey.LOCKED]: 'locked',\n    [TranslatorTranslationDefaultKey.NOT_LOCKED]: 'not locked',\n\n    [TranslatorTranslationDefaultKey.VALUE_IS_REGEX]: 'Value is regex pattern?',\n\n    [TranslatorTranslationDefaultKey.CLIENT]: 'update',\n    [TranslatorTranslationDefaultKey.CLIENTS]: 'clients',\n    [TranslatorTranslationDefaultKey.CLIENT_SCOPES]: 'client scopes',\n    [TranslatorTranslationDefaultKey.DISPLAY_NAME]: 'display name',\n    [TranslatorTranslationDefaultKey.EMAIL]: 'email',\n    [TranslatorTranslationDefaultKey.EXTERNAL_ID]: 'external id',\n    [TranslatorTranslationDefaultKey.HASHED]: 'hashed',\n    [TranslatorTranslationDefaultKey.OVERVIEW]: 'overview',\n    [TranslatorTranslationDefaultKey.IDENTITY_PROVIDERS]: 'identity providers',\n    [TranslatorTranslationDefaultKey.NAME]: 'name',\n    [TranslatorTranslationDefaultKey.DECISION_STRATEGY]: 'decision strategy',\n    [TranslatorTranslationDefaultKey.DESCRIPTION]: 'description',\n    [TranslatorTranslationDefaultKey.POLICY]: 'policy',\n    [TranslatorTranslationDefaultKey.POLICIES]: 'policies',\n    [TranslatorTranslationDefaultKey.PERMISSIONS]: 'permissions',\n    [TranslatorTranslationDefaultKey.REALM]: 'realm',\n    [TranslatorTranslationDefaultKey.REALMS]: 'realms',\n    [TranslatorTranslationDefaultKey.ROLES]: 'roles',\n    [TranslatorTranslationDefaultKey.SCOPES]: 'scopes',\n    [TranslatorTranslationDefaultKey.SECRET]: 'secret',\n    [TranslatorTranslationDefaultKey.REDIRECT_URIS]: 'redirect uri(s)',\n    [TranslatorTranslationDefaultKey.USERS]: 'users',\n};\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { LinesRecord } from 'ilingo';\nimport { VuelidateCustomRuleKey } from '../../vuelidate';\n\nexport const TranslatorTranslationVuelidateEnglish : LinesRecord = {\n    [VuelidateCustomRuleKey.ALPHA_NUM_HYPHEN_UNDERSCORE]: 'The input value is only allowed to consist of the following characters: [0-9a-z-_]+',\n    [VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT]: 'The input value is only allowed to consist of the following characters: [0-9a-z-_.]+',\n};\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { LinesRecord } from 'ilingo';\nimport { TranslatorTranslationVuecsKey } from '../constants';\n\nexport const TranslatorTranslationVuecsEnglish : LinesRecord = { [TranslatorTranslationVuecsKey.NO_MORE]: 'No more {{name}} available' };\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { MemoryStore } from '@ilingo/vuelidate/core';\nimport { install } from '@ilingo/vuelidate';\nimport type { App } from 'vue';\nimport { TranslatorTranslationGroup } from './constants';\nimport {\n    TranslatorTranslationClientGerman,\n    TranslatorTranslationDefaultGerman,\n    TranslatorTranslationVuecsGerman,\n    TranslatorTranslationVuelidateGerman,\n} from './de';\nimport {\n    TranslatorTranslationClientEnglish,\n    TranslatorTranslationDefaultEnglish,\n    TranslatorTranslationVuecsEnglish,\n    TranslatorTranslationVuelidateEnglish,\n} from './en';\nimport type { TranslatorInstallOptions } from './types';\n\nexport function installTranslator(app: App, options: TranslatorInstallOptions = {}) {\n    const store = new MemoryStore({\n        data: {\n            de: {\n                [TranslatorTranslationGroup.CLIENT]: TranslatorTranslationClientGerman,\n                [TranslatorTranslationGroup.DEFAULT]: TranslatorTranslationDefaultGerman,\n                [TranslatorTranslationGroup.VUECS]: TranslatorTranslationVuecsGerman,\n                [TranslatorTranslationGroup.VUELIDATE]: TranslatorTranslationVuelidateGerman,\n            },\n            en: {\n                [TranslatorTranslationGroup.CLIENT]: TranslatorTranslationClientEnglish,\n                [TranslatorTranslationGroup.DEFAULT]: TranslatorTranslationDefaultEnglish,\n                [TranslatorTranslationGroup.VUECS]: TranslatorTranslationVuecsEnglish,\n                [TranslatorTranslationGroup.VUELIDATE]: TranslatorTranslationVuelidateEnglish,\n            },\n        },\n    });\n\n    install(app, {\n        store,\n        locale: options.locale,\n    });\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { FormSubmitOptionsInput } from '@vuecs/form-controls';\nimport { buildFormSubmit } from '@vuecs/form-controls';\nimport type { Ref, VNodeChild } from 'vue';\nimport { TranslatorTranslationDefaultKey, TranslatorTranslationGroup, useTranslation } from '../translator';\n\ntype FormSubmitTranslations = {\n    createText: Ref<string>,\n    updateText: Ref<string>,\n};\n\nexport function createFormSubmitTranslations() : FormSubmitTranslations {\n    const updateText = useTranslation({\n        group: TranslatorTranslationGroup.DEFAULT,\n        key: TranslatorTranslationDefaultKey.UPDATE,\n    });\n    const createText = useTranslation({\n        group: TranslatorTranslationGroup.DEFAULT,\n        key: TranslatorTranslationDefaultKey.CREATE,\n    });\n\n    return {\n        createText,\n        updateText,\n    };\n}\n\nexport function buildFormSubmitWithTranslations(\n    options: FormSubmitOptionsInput,\n    translations: FormSubmitTranslations,\n) : VNodeChild {\n    options.createText = translations.createText.value;\n    options.updateText = translations.updateText.value;\n\n    return buildFormSubmit(options);\n}\n","/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from 'smob';\nimport type { SortBuildInput } from 'rapiq';\nimport { SortDirection } from 'rapiq';\n\ntype Data = {\n    created_at?: string | Date,\n    updated_at?: string | Date,\n    [key: string]: any\n};\nexport function isQuerySortedDescByDate<T extends Data>(input: SortBuildInput<T>) : boolean {\n    if (Array.isArray(input)) {\n        return input.some((el) => isQuerySortedDescByDate(el as SortBuildInput<T>));\n    }\n\n    if (isObject(input)) {\n        return input.created_at === SortDirection.DESC ||\n            input.updated_at === SortDirection.DESC;\n    }\n\n    return typeof input === 'string' &&\n        (input === '-created_at' || input === '-updated_at');\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Ref } from 'vue';\n\ntype Fn = (...args: any[]) => Promise<void>;\ntype OutputFn<ARGS extends unknown[]> = (...args: ARGS) => Promise<void>;\n\nexport function wrapFnWithBusyState<T extends Fn = Fn>(\n    busy: Ref<boolean>,\n    fn: T,\n): OutputFn<Parameters<T>> {\n    return async (...args: Parameters<T>) => {\n        if (busy.value) {\n            return Promise.resolve();\n        }\n\n        busy.value = true;\n\n        return fn(...args)\n            .finally(() => {\n                busy.value = false;\n            });\n    };\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IdentityPolicyData, PermissionEvaluationContext } from '@authup/access';\nimport { BuiltInPolicyType, PolicyData } from '@authup/access';\nimport type { Ref } from 'vue';\nimport {\n    onMounted, \n    onUnmounted, \n    ref, \n    watch,\n} from 'vue';\nimport type { Store } from '../store';\nimport { injectStore, storeToRefs } from '../store';\nimport type { PermissionCheckerReactiveFn, PermissionCheckerReactiveFnCreateContext } from './types';\n\nexport function createPermissionCheckerReactiveFn(\n    ctx: PermissionCheckerReactiveFnCreateContext = {},\n) : PermissionCheckerReactiveFn {\n    let store : Store;\n    if (ctx.store) {\n        store = ctx.store;\n    } else {\n        store = injectStore(ctx.pinia, ctx.app);\n    }\n\n    const storeRefs = storeToRefs(store);\n\n    return (ctx: PermissionEvaluationContext) : Ref<boolean> => {\n        const data = ref(false);\n\n        let computePromise: Promise<boolean> | undefined;\n        const compute = async () => {\n            if (computePromise) {\n                return computePromise;\n            }\n\n            let identity: IdentityPolicyData | undefined;\n            if (storeRefs.userId.value) {\n                identity = {\n                    type: 'user',\n                    id: storeRefs.userId.value,\n                };\n\n                if (storeRefs.realmId.value) {\n                    identity.realmId = storeRefs.realmId.value;\n                }\n\n                if (storeRefs.realmName.value) {\n                    identity.realmId = storeRefs.realmName.value;\n                }\n            }\n\n            let outcome: boolean;\n\n            const input = ctx.input || new PolicyData();\n            input.set(BuiltInPolicyType.IDENTITY, identity);\n\n            try {\n                computePromise = store.permissionEvaluator\n                    .preEvaluateOneOf({\n                        ...ctx,\n                        input,\n                    })\n                    .then(() => true)\n                    .catch(() => false);\n\n                outcome = await computePromise;\n            } catch {\n                outcome = false;\n            } finally {\n                computePromise = undefined;\n            }\n\n            return outcome;\n        };\n\n        Promise.resolve()\n            .then(() => compute())\n            .then((outcome) => {\n                data.value = outcome;\n            });\n\n        let removeListener: undefined | CallableFunction;\n        onMounted(() => {\n            removeListener = watch(storeRefs.loggedIn, () => {\n                Promise.resolve()\n                    .then(() => compute())\n                    .then((outcome) => {\n                        data.value = outcome;\n                    });\n            });\n        });\n\n        onUnmounted(() => {\n            if (typeof removeListener !== 'undefined') {\n                removeListener();\n            }\n        });\n\n        return data;\n    };\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { App } from 'vue';\nimport type { ClientManager } from '@authup/core-realtime-kit';\nimport { inject } from '../inject';\nimport { provide } from '../provide';\n\nexport const SocketClientSymbol = Symbol.for('AuthupSocketManager');\n\nexport function isSocketManagerUsable() {\n    return !!inject(SocketClientSymbol);\n}\n\nexport function provideSocketManager(manager: ClientManager, app?: App) {\n    provide(SocketClientSymbol, manager, app);\n}\n\nexport function injectSocketManager(app?: App) : ClientManager {\n    const manager = inject<ClientManager>(SocketClientSymbol, app);\n    if (!manager) {\n        throw new Error('The socket manager has not been injected in the app context.');\n    }\n\n    return manager;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { ClientManager } from '@authup/core-realtime-kit';\nimport type { Pinia } from 'pinia';\nimport type { App } from 'vue';\nimport { ref } from 'vue';\nimport { injectStoreFactory, storeToRefs } from '../store';\nimport { provideSocketManager } from './singleton';\n\nexport type SocketManagerInstallOptions = {\n    pinia?: Pinia,\n    baseURL: string\n};\n\nexport function installSocketManager(app: App, options : SocketManagerInstallOptions) {\n    const storeCreator = injectStoreFactory(app);\n    const store = storeCreator(options.pinia);\n    const { accessToken } = storeToRefs(store);\n\n    const manager = new ClientManager({\n        url: options.baseURL,\n        token: () => accessToken.value ?? undefined,\n    });\n\n    const oldValue = ref<string | undefined>();\n\n    store.$subscribe((\n        mutation,\n        state,\n    ) => {\n        const normalizedToken = state.accessToken ?? undefined;\n        if (normalizedToken !== oldValue.value) {\n            oldValue.value = normalizedToken;\n\n            Promise.resolve()\n                .then(() => manager.reconnect());\n        }\n    });\n\n    provideSocketManager(manager, app);\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty } from '@authup/kit';\nimport type { Slot, Slots, VNode } from 'vue';\n\n/**\n * Returns true if either scoped or unscoped named slot exists\n *\n * @returns boolean\n *\n * @param name\n * @param $slots\n */\nexport function hasNormalizedSlot(\n    name : string,\n    $slots : Slots = {},\n) {\n    return hasOwnProperty($slots, name);\n}\n\n/**\n * Returns VNodes for named slot either scoped or unscoped\n *\n * @param name\n * @param scope\n * @param $slots\n *\n * @returns {Array} VNodes\n */\nexport function normalizeSlot(\n    name : string,\n    scope: Record<string, any> = {},\n    $slots : Slots = {},\n) : VNode[] | VNode {\n    if (hasOwnProperty($slots, name)) {\n        return ($slots[name] as Slot)(scope);\n    }\n\n    return [];\n}\n","import { SlotName } from '@vuecs/list-controls';\nimport { defineComponent } from 'vue';\nimport { hasNormalizedSlot, normalizeSlot, useTranslation } from '../../../core';\n\nexport const ATranslation = defineComponent({\n    props: {\n        group: {\n            type: String,\n            required: true,\n        },\n        name: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const translation = useTranslation({\n            group: props.group,\n            key: props.name,\n        });\n\n        return () => {\n            if (hasNormalizedSlot(SlotName.DEFAULT, slots)) {\n                return normalizeSlot(SlotName.DEFAULT, { data: translation.value }, slots);\n            }\n\n            return [\n                translation.value,\n            ];\n        };\n    },\n});\n","<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { TranslatorTranslationDefaultKey } from '../../../core';\nimport { TranslatorTranslationGroup } from '../../../core';\nimport { ATranslation } from './ATranslation';\n\nexport default defineComponent({\n    components: { ATranslation },\n    props: {\n        name: {\n            type: String as PropType<`${TranslatorTranslationDefaultKey}`>,\n            required: true,\n        },\n    },\n    setup() {\n        return { TranslatorTranslationGroup };\n    },\n});\n</script>\n<template>\n    <ATranslation\n        :group=\"TranslatorTranslationGroup.DEFAULT\"\n        :name=\"name\"\n    />\n</template>\n","<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { TranslatorTranslationDefaultKey } from '../../../core';\nimport { TranslatorTranslationGroup } from '../../../core';\nimport { ATranslation } from './ATranslation';\n\nexport default defineComponent({\n    components: { ATranslation },\n    props: {\n        name: {\n            type: String as PropType<`${TranslatorTranslationDefaultKey}`>,\n            required: true,\n        },\n    },\n    setup() {\n        return { TranslatorTranslationGroup };\n    },\n});\n</script>\n<template>\n    <ATranslation\n        :group=\"TranslatorTranslationGroup.DEFAULT\"\n        :name=\"name\"\n    />\n</template>\n","<!--\n  - Copyright (c) 2025.\n  - Author Peter Placzek (tada5hi)\n  - For the full copyright and license information,\n  - view the LICENSE file that was distributed with this source code.\n  -->\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport {\n    computed,\n    defineComponent,\n    ref,\n} from 'vue';\nimport AFormInputListItem from './AFormInputListItem.vue';\nimport { ATranslationDefault } from '../translation';\n\nexport default defineComponent({\n    components: {\n        ATranslationDefault,\n        AFormInputListItem,\n    },\n    props: {\n        names: {\n            type: Array as PropType<string[]>,\n            default: () => [],\n        },\n        minItems: {\n            type: Number,\n            default: 0,\n        },\n        maxItems: {\n            type: Number,\n            default: 100,\n        },\n    },\n    emits: ['changed'],\n    setup(props, setup) {\n        let counter = 0;\n        const items = ref<{\n            id: number,\n            value: string \n        }[]>([]);\n\n        const add = (item?: string) => {\n            items.value.push({\n                id: counter++,\n                value: item || '',\n            });\n        };\n\n        function assign() {\n            items.value = [];\n\n            props.names.map((el) => add(el));\n\n            if (items.value.length < props.minItems) {\n                for (let i = 0; i < props.minItems - items.value.length; i++) {\n                    add();\n                }\n            }\n        }\n\n        setup.expose({ assign });\n\n        assign();\n\n        const canAdd = computed(() => items.value.length < props.maxItems);\n\n        const canDrop = computed(() => items.value.length > props.minItems);\n\n        const emitUpdated = () => {\n            setup.emit('changed', [\n                ...items.value\n                    .map((el) => el.value)\n                    .filter(Boolean),\n            ]);\n        };\n\n        const handleUpdated = (id: number, value: string) => {\n            const index = items.value.findIndex((el) => el.id === id);\n            if (index > -1 && items.value[index]) {\n                items.value[index].value = value;\n            }\n\n            emitUpdated();\n        };\n\n        const handleDeleted = (id: number) => {\n            if (items.value.length <= props.minItems) {\n                return;\n            }\n\n            const index = items.value.findIndex((el) => el.id === id);\n            if (index > -1) {\n                items.value.splice(index, 1);\n            }\n\n            emitUpdated();\n        };\n\n        return {\n            add,\n\n            canAdd,\n            canDrop,\n\n            handleDeleted,\n            handleUpdated,\n\n            items,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"d-flex flex-column gap-2\">\n        <div class=\"d-flex flex-row\">\n            <div class=\"align-self-end\">\n                <slot name=\"label\">\n                    Names\n                </slot>\n            </div>\n            <div class=\"ms-auto\">\n                <button\n                    class=\"btn btn-xs btn-primary\"\n                    type=\"button\"\n                    :disabled=\"!canAdd\"\n                    @click.prevent=\"add()\"\n                >\n                    <i class=\"fa fa-plus\" /> <ATranslationDefault :name=\"'add'\" />\n                </button>\n            </div>\n        </div>\n        <div class=\"d-flex flex-column gap-1\">\n            <template v-if=\"items.length === 0\">\n                <slot name=\"noItems\">\n                    <div class=\"alert alert-sm alert-info\">\n                        The form list has no items yet\n                    </div>\n                </slot>\n            </template>\n            <template\n                v-for=\"item in items\"\n                :key=\"item.id\"\n            >\n                <slot\n                    name=\"default\"\n                    :item=\"item\"\n                    :updated=\"handleUpdated\"\n                    :deleted=\"handleDeleted\"\n                >\n                    <AFormInputListItem\n                        :key=\"item.id\"\n                        :disabled=\"!canDrop\"\n                        :name=\"item.value\"\n                        @updated=\"(input) => { handleUpdated(item.id, input) }\"\n                        @deleted=\"() => { handleDeleted(item.id) }\"\n                    />\n                </slot>\n            </template>\n        </div>\n    </div>\n</template>\n","<!--\n  - Copyright (c) 2025.\n  - Author Peter Placzek (tada5hi)\n  - For the full copyright and license information,\n  - view the LICENSE file that was distributed with this source code.\n  -->\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport {\n    computed,\n    defineComponent,\n    ref,\n} from 'vue';\nimport AFormInputListItem from './AFormInputListItem.vue';\nimport { ATranslationDefault } from '../translation';\n\nexport default defineComponent({\n    components: {\n        ATranslationDefault,\n        AFormInputListItem,\n    },\n    props: {\n        names: {\n            type: Array as PropType<string[]>,\n            default: () => [],\n        },\n        minItems: {\n            type: Number,\n            default: 0,\n        },\n        maxItems: {\n            type: Number,\n            default: 100,\n        },\n    },\n    emits: ['changed'],\n    setup(props, setup) {\n        let counter = 0;\n        const items = ref<{\n            id: number,\n            value: string \n        }[]>([]);\n\n        const add = (item?: string) => {\n            items.value.push({\n                id: counter++,\n                value: item || '',\n            });\n        };\n\n        function assign() {\n            items.value = [];\n\n            props.names.map((el) => add(el));\n\n            if (items.value.length < props.minItems) {\n                for (let i = 0; i < props.minItems - items.value.length; i++) {\n                    add();\n                }\n            }\n        }\n\n        setup.expose({ assign });\n\n        assign();\n\n        const canAdd = computed(() => items.value.length < props.maxItems);\n\n        const canDrop = computed(() => items.value.length > props.minItems);\n\n        const emitUpdated = () => {\n            setup.emit('changed', [\n                ...items.value\n                    .map((el) => el.value)\n                    .filter(Boolean),\n            ]);\n        };\n\n        const handleUpdated = (id: number, value: string) => {\n            const index = items.value.findIndex((el) => el.id === id);\n            if (index > -1 && items.value[index]) {\n                items.value[index].value = value;\n            }\n\n            emitUpdated();\n        };\n\n        const handleDeleted = (id: number) => {\n            if (items.value.length <= props.minItems) {\n                return;\n            }\n\n            const index = items.value.findIndex((el) => el.id === id);\n            if (index > -1) {\n                items.value.splice(index, 1);\n            }\n\n            emitUpdated();\n        };\n\n        return {\n            add,\n\n            canAdd,\n            canDrop,\n\n            handleDeleted,\n            handleUpdated,\n\n            items,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"d-flex flex-column gap-2\">\n        <div class=\"d-flex flex-row\">\n            <div class=\"align-self-end\">\n                <slot name=\"label\">\n                    Names\n                </slot>\n            </div>\n            <div class=\"ms-auto\">\n                <button\n                    class=\"btn btn-xs btn-primary\"\n                    type=\"button\"\n                    :disabled=\"!canAdd\"\n                    @click.prevent=\"add()\"\n                >\n                    <i class=\"fa fa-plus\" /> <ATranslationDefault :name=\"'add'\" />\n                </button>\n            </div>\n        </div>\n        <div class=\"d-flex flex-column gap-1\">\n            <template v-if=\"items.length === 0\">\n                <slot name=\"noItems\">\n                    <div class=\"alert alert-sm alert-info\">\n                        The form list has no items yet\n                    </div>\n                </slot>\n            </template>\n            <template\n                v-for=\"item in items\"\n                :key=\"item.id\"\n            >\n                <slot\n                    name=\"default\"\n                    :item=\"item\"\n                    :updated=\"handleUpdated\"\n                    :deleted=\"handleDeleted\"\n                >\n                    <AFormInputListItem\n                        :key=\"item.id\"\n                        :disabled=\"!canDrop\"\n                        :name=\"item.value\"\n                        @updated=\"(input) => { handleUpdated(item.id, input) }\"\n                        @deleted=\"() => { handleDeleted(item.id) }\"\n                    />\n                </slot>\n            </template>\n        </div>\n    </div>\n</template>\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildPagination as _buildPagination } from '@vuecs/pagination';\nimport type { PaginationOptions } from './type';\n\nexport function buildPagination(\n    ctx: PaginationOptions,\n) {\n    return _buildPagination({\n        load: (pagination) => ctx.load?.({\n            ...ctx.meta,\n            pagination: {\n                limit: pagination.limit,\n                offset: pagination.offset,\n            },\n        }),\n        total: ctx.meta?.total ?? ctx.total ?? 0,\n        limit: ctx.meta?.pagination?.limit ?? 0,\n        offset: ctx.meta?.pagination?.offset ?? 0,\n        busy: ctx.meta?.busy ?? ctx.busy,\n    });\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { buildPagination } from './module';\nimport type { PaginationLoadFn } from './type';\n\nexport const APagination = defineComponent({\n    props: {\n        total: { type: Number },\n        meta: { type: Object as PropType<Record<string, any>> },\n        busy: { type: Boolean },\n        load: { type: Function as PropType<PaginationLoadFn> },\n    },\n    setup(props) {\n        return () => buildPagination({\n            busy: props.busy,\n            load: props.load,\n            meta: props.meta,\n            total: props.total,\n        });\n    },\n});\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { BuildInput } from 'rapiq';\nimport type { PropType } from 'vue';\nimport type {\n    EntityCollectionVEmitOptions,\n    ListBodyOptions, \n    ListFooterOptions, \n    ListHeaderOptions, \n    ListLoadingOptions, \n    ListNoMoreOptions,\n} from '../types';\n\nexport function defineEntityCollectionVEmitOptions<T>() : EntityCollectionVEmitOptions<T> {\n    return {\n         \n        created: (_item: T) => true,\n         \n        deleted: (_item: T) => true,\n         \n        updated: (_item: T) => true,\n    };\n}\nexport function defineEntityCollectionVProps<T>() {\n    return {\n        query: {\n            type: Object as PropType<BuildInput<T extends Record<string, any> ? T : never>>,\n            default() {\n                return {};\n            },\n        },\n        realmId: {\n            type: String,\n            default: undefined,\n        },\n        loadOnSetup: {\n            type: Boolean,\n            default: true,\n        },\n        loading: {\n            type: [Boolean, Object] as PropType<boolean | ListLoadingOptions<T>>,\n            default: true,\n        },\n        noMore: {\n            type: [Boolean, Object] as PropType<boolean | ListNoMoreOptions<T>>,\n            default: true,\n        },\n        footer: {\n            type: [Boolean, Object] as PropType<boolean | ListFooterOptions<T>>,\n            default: true,\n        },\n        header: {\n            type: [Boolean, Object] as PropType<boolean | ListHeaderOptions<T>>,\n            default: true,\n        },\n        body: { type: Object as PropType<ListBodyOptions<T>> },\n    };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { merge } from 'smob';\nimport type { EntityCollectionRenderOptions, EntityCollectionVProps } from '../types';\n\nfunction mergeListOption<T extends boolean | Record<string, any> | undefined>(\n    primary: T,\n    secondary: T,\n) : T {\n    if (typeof secondary === 'undefined') {\n        return primary;\n    }\n\n    if (typeof primary === 'undefined') {\n        return secondary;\n    }\n\n    if (typeof primary === 'boolean' && !primary) {\n        return primary;\n    }\n\n    const primaryRecord = typeof primary === 'boolean' ? {} : primary;\n    const secondaryRecord = typeof secondary === 'boolean' ? {} : secondary;\n\n    return merge(primaryRecord, secondaryRecord) as T;\n}\n\nexport function mergeEntityCollectionRenderOptions<T>(\n    props: EntityCollectionVProps<T>,\n    defaults: Partial<EntityCollectionRenderOptions<T>>,\n) : EntityCollectionRenderOptions<T> {\n    const output : Partial<EntityCollectionRenderOptions<T>> = {\n        body: defaults.body,\n        item: defaults.item,\n    };\n\n    output.header = mergeListOption(props.header, defaults.header);\n    output.noMore = mergeListOption(props.noMore, defaults.noMore);\n    output.footer = mergeListOption(props.footer, defaults.footer);\n    output.loading = mergeListOption(props.loading, defaults.loading);\n\n    return output as EntityCollectionRenderOptions<T>;\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ObjectLiteral } from '@authup/kit';\nimport type { Ref } from 'vue';\n\ntype EntityFn<T> = (entity: T) => void | Promise<void>;\n\ntype Options<T> = {\n    created?: EntityFn<T>,\n    updated?: EntityFn<T>,\n    deleted?: EntityFn<T>,\n};\n\ntype StackItem<T> = {\n    data: T,\n    operation: 'created' | 'deleted' | 'updated'\n};\n\nexport class ListHandlers<T extends ObjectLiteral> {\n    protected data: Ref<T[]>;\n\n    protected options : Options<T>;\n\n    protected stack : StackItem<T>[];\n\n    protected stackProcessing : boolean;\n\n    constructor(\n        data: Ref<T[]>,\n        options: Options<T> = {},\n    ) {\n        this.data = data;\n        this.options = options;\n        this.stack = [];\n\n        this.stackProcessing = false;\n    }\n\n    protected process() {\n        if (this.stackProcessing) {\n            return;\n        }\n\n        this.stackProcessing = true;\n\n        const item = this.stack.shift();\n        if (!item) {\n            this.stackProcessing = false;\n            return;\n        }\n\n        const index = this.data.value.findIndex(\n            (el: T) => (el as Record<string, any>).id === (item.data as Record<string, any>).id,\n        );\n\n        switch (item.operation) {\n            case 'created': {\n                if (index === -1) {\n                    this.data.value.push(item.data);\n\n                    if (this.options.created) {\n                        this.options.created(item.data);\n                    }\n                }\n                break;\n            }\n            case 'updated': {\n                const existing = index !== -1 ? this.data.value[index] : undefined;\n                if (existing) {\n                    const keys = Object.keys(item.data) as (keyof T)[];\n                    for (const key of keys) {\n                        existing[key] = item.data[key];\n                    }\n\n                    if (this.options.updated) {\n                        this.options.updated(existing);\n                    }\n                }\n                break;\n            }\n            case 'deleted': {\n                if (index !== -1) {\n                    const [output] = this.data.value.splice(index, 1);\n\n                    if (this.options.deleted && output) {\n                        this.options.deleted(output);\n                    }\n                }\n                break;\n            }\n        }\n\n        this.stackProcessing = false;\n\n        this.process();\n    }\n\n    created(item: T) {\n        this.stack.push({\n            data: item,\n            operation: 'created',\n        });\n\n        this.process();\n    }\n\n    updated(item: T) {\n        this.stack.push({\n            data: item,\n            operation: 'updated',\n        });\n\n        this.process();\n    }\n\n    deleted(item: T) {\n        this.stack.push({\n            data: item,\n            operation: 'deleted',\n        });\n\n        this.process();\n    }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function boolableToObject<T extends Record<string, any>>(input: T | boolean) : T {\n    if (typeof input === 'boolean') {\n        return {} as T;\n    }\n\n    return input;\n}\n","/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityDefaultEventName, REALM_MASTER_NAME, buildEntityChannelName } from '@authup/core-kit';\nimport type {\n    EntityType,\n    EntityTypeMap,\n    EventRecord,\n} from '@authup/core-kit';\nimport type { EventFullName, STCEventContext } from '@authup/core-realtime-kit';\nimport { EventNameSuffix, buildEventFullName } from '@authup/core-realtime-kit';\nimport {\n    computed, \n    isRef, \n    onMounted, \n    onUnmounted, \n    watch,\n} from 'vue';\nimport { injectStore, storeToRefs } from '../../../../core/store';\nimport type { EntitySocketManager, EntitySocketManagerCreateContext } from './type';\nimport { injectSocketManager, isSocketManagerUsable } from '../../../../core/socket-manager';\n\nfunction create<\n    TYPE extends string,\n    RECORD extends Record<string, any>,\n>(\n    ctx: EntitySocketManagerCreateContext<TYPE, RECORD>,\n) : EntitySocketManager {\n    if (!isSocketManagerUsable()) {\n        return {\n            mount() {\n\n            },\n            unmount() {\n\n            },\n        };\n    }\n\n    const socketManager = injectSocketManager();\n    const store = injectStore();\n    const storeRefs = storeToRefs(store);\n\n    const realmId = computed(() => {\n        if (storeRefs.realmName.value === REALM_MASTER_NAME) {\n            return undefined;\n        }\n\n        if (isRef(ctx.realmId)) {\n            return ctx.realmId.value;\n        }\n\n        if (ctx.realmId) {\n            return ctx.realmId;\n        }\n\n        return storeRefs.realmId.value;\n    });\n\n    const targetId = computed(\n        () => (\n            isRef(ctx.targetId) ?\n                ctx.targetId.value :\n                ctx.targetId\n        ),\n    );\n\n    const lockId = computed(\n        () => (\n            isRef(ctx.lockId) ?\n                ctx.lockId.value :\n                ctx.lockId\n        ),\n    );\n\n    const processEvent = (\n        event: STCEventContext<EventRecord<TYPE, RECORD>>,\n    ) : boolean => {\n        if (\n            ctx.processEvent &&\n            !ctx.processEvent(event, realmId.value)\n        ) {\n            return false;\n        }\n\n        const channelName = ctx.buildChannelName ?\n            ctx.buildChannelName(targetId.value) :\n            buildEntityChannelName(ctx.type, targetId.value);\n\n        if (event.meta.roomName !== channelName) {\n            return false;\n        }\n\n        if (ctx.target && (!targetId.value || targetId.value !== event.data.id)) {\n            return false;\n        }\n\n        return event.data.id !== lockId.value;\n    };\n\n    const handleCreated = (\n        event: STCEventContext<EventRecord<TYPE, RECORD>>,\n    ) => {\n        if (!processEvent(event)) {\n            return;\n        }\n\n        if (ctx.onCreated) {\n            ctx.onCreated(event.data as RECORD);\n        }\n    };\n\n    const handleUpdated = (\n        event: STCEventContext<EventRecord<TYPE, RECORD>>,\n    ) => {\n        if (!processEvent(event)) {\n            return;\n        }\n\n        if (ctx.onUpdated) {\n            ctx.onUpdated(event.data as RECORD);\n        }\n    };\n    const handleDeleted = (\n        event: STCEventContext<EventRecord<TYPE, RECORD>>,\n    ) => {\n        if (!processEvent(event)) {\n            return;\n        }\n\n        if (ctx.onDeleted) {\n            ctx.onDeleted(event.data as RECORD);\n        }\n    };\n\n    let mounted = false;\n    const mount = async () => {\n        if ((ctx.target && !targetId.value) || mounted) {\n            return;\n        }\n\n        mounted = true;\n\n        const socket = await socketManager.connect(`/resources#${realmId.value}`);\n\n        let event : EventFullName<TYPE, `${EventNameSuffix.SUBSCRIBE}`> | undefined;\n        if (ctx.buildSubscribeEventName) {\n            event = ctx.buildSubscribeEventName();\n        } else {\n            event = buildEventFullName(\n                ctx.type as TYPE,\n                EventNameSuffix.SUBSCRIBE,\n            );\n        }\n\n        socket.emit(\n            event,\n            targetId.value,\n        );\n\n        if (ctx.onCreated) {\n            socket.on(buildEventFullName(\n                ctx.type as `${EntityType}`,\n                EntityDefaultEventName.CREATED,\n            ), handleCreated);\n        }\n\n        if (ctx.onUpdated) {\n            socket.on(buildEventFullName(\n                ctx.type as `${EntityType}`,\n                EntityDefaultEventName.UPDATED,\n            ), handleUpdated);\n        }\n\n        if (ctx.onDeleted) {\n            socket.on(buildEventFullName(\n                ctx.type as `${EntityType}`,\n                EntityDefaultEventName.DELETED,\n            ), handleDeleted);\n        }\n    };\n\n    const unmount = async () => {\n        if ((ctx.target && !targetId.value) || !mounted) {\n            return;\n        }\n\n        mounted = false;\n\n        const socket = await socketManager.connect(`/resources#${realmId.value}`);\n\n        let event : EventFullName<TYPE, `${EventNameSuffix.UNSUBSCRIBE}`>;\n        if (ctx.buildUnsubscribeEventName) {\n            event = ctx.buildUnsubscribeEventName();\n        } else {\n            event = buildEventFullName(\n                ctx.type as TYPE,\n                EventNameSuffix.UNSUBSCRIBE,\n            );\n        }\n\n        socket.emit(\n            event,\n            targetId.value,\n        );\n\n        if (ctx.onCreated) {\n            socket.off(buildEventFullName(\n                ctx.type as `${EntityType}`,\n                EntityDefaultEventName.UPDATED,\n            ), handleCreated);\n        }\n\n        if (ctx.onUpdated) {\n            socket.off(buildEventFullName(\n                ctx.type as `${EntityType}`,\n                EntityDefaultEventName.UPDATED,\n            ), handleUpdated);\n        }\n\n        if (ctx.onDeleted) {\n            socket.off(buildEventFullName(\n                ctx.type as `${EntityType}`,\n                EntityDefaultEventName.DELETED,\n            ), handleDeleted);\n        }\n    };\n\n    onMounted(() => mount());\n    onUnmounted(() => unmount());\n\n    watch(targetId, (val, oldValue) => {\n        if (val !== oldValue) {\n            Promise.resolve()\n                .then(() => unmount())\n                .then(() => mount());\n        }\n    });\n\n    return {\n        mount,\n        unmount,\n    };\n}\n\nexport function defineEntitySocketManager<\n    A extends keyof EntityTypeMap,\n>(\n    ctx: EntitySocketManagerCreateContext<A, EntityTypeMap[A]>,\n) : EntitySocketManager {\n    return create(ctx);\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty } from '@authup/kit';\nimport type { EntityAPI } from '@authup/core-http-kit';\nimport type { EntityTypeMap } from '@authup/core-kit';\nimport type { ListFooterBuildOptionsInput, ListHeaderBuildOptionsInput } from '@vuecs/list-controls';\nimport { buildList } from '@vuecs/list-controls';\nimport type { BuildInput, FiltersBuildInput } from 'rapiq';\nimport type { Ref, VNodeChild } from 'vue';\nimport {\n    computed,\n    isRef,\n    ref,\n    unref,\n} from 'vue';\nimport { createMerger, isObject } from 'smob';\nimport { boolableToObject } from '../../../../utils';\nimport { injectHTTPClient } from '../../../../core/http-client';\nimport { defineEntitySocketManager } from '../socket';\nimport type { EntitySocketManagerCreateContext } from '../socket';\nimport { isQuerySortedDescByDate } from '../../../../core/query';\nimport type {\n    EntityCollectionManager,\n    EntityCollectionManagerCreateContext,\n    EntityCollectionRenderOptions,\n    ListMeta,\n} from './types';\nimport {\n    ListHandlers,\n    mergeEntityCollectionRenderOptions,\n} from './utils';\n\nconst merger = createMerger({\n    array: false,\n    inPlace: false,\n    priority: 'left',\n});\n\ntype Entity<A> = A extends Record<string, any> ? A : never;\n\nfunction create<\n    TYPE extends keyof EntityTypeMap,\n    RECORD extends EntityTypeMap[TYPE],\n>(\n    context: EntityCollectionManagerCreateContext<TYPE, RECORD>,\n) : EntityCollectionManager<RECORD> {\n    const data : Ref<RECORD[]> = ref([]);\n    const busy = ref(false);\n    const total = ref(0);\n    const meta = ref<ListMeta<RECORD>>({ pagination: { limit: 10 } }) as Ref<ListMeta<RECORD>>;\n\n    const realmId = computed<string | undefined>(\n        () => {\n            if (context.realmId) {\n                return isRef(context.realmId) ? context.realmId.value : context.realmId;\n            }\n\n            if (context.props.realmId) {\n                return context.props.realmId;\n            }\n\n            return undefined;\n        },\n    );\n\n    const client = injectHTTPClient();\n\n    let domainAPI : EntityAPI<Entity<RECORD>> | undefined;\n    if (hasOwnProperty(client, context.type)) {\n        domainAPI = client[context.type] as any;\n    }\n\n    let query : BuildInput<Entity<RECORD>> | undefined;\n\n    async function load(input: ListMeta<RECORD> = {}) {\n        if (!domainAPI || busy.value) return;\n\n        busy.value = true;\n        meta.value.busy = true;\n\n        try {\n            let filters : FiltersBuildInput<Entity<RECORD>> | undefined;\n            if (\n                context.queryFilters &&\n                input.filters &&\n                hasOwnProperty(input.filters, 'name') &&\n                typeof input.filters.name === 'string'\n            ) {\n                // todo: queryFilters should customize full filters object!\n                filters = context.queryFilters(input.filters.name) as FiltersBuildInput<Entity<RECORD>>;\n            }\n\n            query = undefined;\n            if (context.query) {\n                if (typeof context.query === 'function') {\n                    query = context.query();\n                } else {\n                    query = context.query;\n                }\n            }\n\n            if (context.props.query) {\n                if (query) {\n                    query = merger({}, context.props.query, query);\n                } else {\n                    query = context.props.query;\n                }\n            }\n\n            const nextQuery : ListMeta<RECORD> = merger(\n                (filters ? { filters } : {}),\n                input || {},\n                {\n                    pagination: {\n                        limit: meta.value.pagination?.limit,\n                        offset: meta.value.pagination?.offset,\n                    },\n                },\n                query || {},\n            );\n\n            const response = await domainAPI.getMany(\n                nextQuery as BuildInput<Entity<RECORD>>,\n            );\n\n            meta.value = nextQuery;\n\n            if (context.loadAll) {\n                data.value.push(...response.data as RECORD[]);\n            } else {\n                data.value = response.data as RECORD[];\n            }\n\n            total.value = response.meta.total;\n\n            meta.value.total = response.meta.total;\n            meta.value.pagination = {\n                limit: response.meta.limit,\n                offset: response.meta.offset,\n            };\n        } finally {\n            busy.value = false;\n            meta.value.busy = false;\n        }\n\n        if (\n            context.loadAll &&\n            total.value > data.value.length\n        ) {\n            await load({\n                ...meta.value,\n                pagination: {\n                    ...meta.value.pagination,\n                    offset: (meta.value.pagination?.offset ?? 0) + (meta.value.pagination?.limit ?? 0),\n                },\n            });\n        }\n    }\n\n    const handlers = new ListHandlers<RECORD>(data, {\n        created: (cbEntity) => {\n            total.value++;\n\n            if (context.onCreated) {\n                context.onCreated(cbEntity, meta.value);\n            }\n\n            if (context.setup && typeof context.setup.emit === 'function') {\n                context.setup.emit('created', cbEntity);\n            }\n        },\n        deleted: (cbEntity) => {\n            total.value--;\n\n            if (context.setup && typeof context.setup.emit === 'function') {\n                context.setup.emit('deleted', cbEntity);\n            }\n        },\n        updated: (cbEntity) => {\n            if (context.setup && typeof context.setup.emit === 'function') {\n                context.setup.emit('updated', cbEntity);\n            }\n        },\n    });\n\n\n    function render(defaults?: EntityCollectionRenderOptions<RECORD>) : VNodeChild {\n        let renderOptions : EntityCollectionRenderOptions<RECORD>;\n        if (defaults) {\n            renderOptions = mergeEntityCollectionRenderOptions(context.props, defaults);\n        } else {\n            renderOptions = context.props;\n        }\n        const header : ListHeaderBuildOptionsInput<RECORD> = boolableToObject(renderOptions.header || {});\n        const footer : ListFooterBuildOptionsInput<RECORD> = boolableToObject(renderOptions.footer || {});\n\n        if (renderOptions.item) {\n            if (\n                typeof renderOptions.body === 'undefined' ||\n                typeof renderOptions.body === 'boolean'\n            ) {\n                renderOptions.body = { item: renderOptions.item };\n            } else {\n                renderOptions.body.item = renderOptions.item;\n            }\n        }\n\n        return buildList<RECORD, ListMeta<RECORD>>({\n            footer,\n            header,\n            noMore: renderOptions.noMore,\n            body: renderOptions.body,\n            loading: renderOptions.loading,\n            total: total.value,\n            load,\n            busy: busy.value,\n            data: data.value as Entity<RECORD>[],\n            meta: meta.value,\n            onCreated: (value: RECORD) => {\n                if (context.setup.emit) {\n                    context.setup.emit('created', value);\n                }\n\n                handlers.created(value);\n            },\n            onDeleted: (value: RECORD) => {\n                if (context.setup.emit) {\n                    context.setup.emit('deleted', value);\n                }\n\n                handlers.deleted(value);\n            },\n            onUpdated: (value: RECORD) => {\n                if (context.setup.emit) {\n                    context.setup.emit('updated', value);\n                }\n\n                handlers.updated(value);\n            },\n            slotItems: context.setup.slots || {},\n        });\n    }\n\n    context.setup.expose({\n        handleCreated: (data: RECORD) => handlers.created(data),\n        handleDeleted: (data: RECORD) => handlers.deleted(data),\n        handleUpdated: (data: RECORD) => handlers.updated(data),\n        load,\n        data,\n    });\n\n    let loadOnSetup = true;\n    const propLoadOnSetup = unref(context.props.loadOnSetup);\n    if (typeof propLoadOnSetup === 'boolean') {\n        loadOnSetup = propLoadOnSetup;\n    }\n\n    if (loadOnSetup) {\n        Promise.resolve()\n            .then(() => load());\n    }\n\n    if (\n        typeof context.socket !== 'boolean' ||\n        typeof context.socket === 'undefined' ||\n        context.socket\n    ) {\n        const socketContext : EntitySocketManagerCreateContext<TYPE, RECORD> = {\n            type: context.type,\n            ...(isObject(context.socket) ? context.socket : {}),\n        };\n\n        socketContext.onCreated = (entity) => {\n            const isSorted = query &&\n                query.sort &&\n                isQuerySortedDescByDate(query.sort) &&\n                meta.value?.pagination?.offset === 0;\n\n            if (isSorted || total.value < (meta.value?.pagination?.limit ?? 0)) {\n                handlers.created(entity);\n            }\n        };\n        socketContext.onDeleted = (entity: RECORD) => {\n            handlers.deleted(entity);\n        };\n        socketContext.onUpdated = (entity: RECORD) => {\n            handlers.updated(entity);\n        };\n        socketContext.realmId = realmId;\n\n        defineEntitySocketManager(socketContext);\n    }\n\n    return {\n        data,\n        busy,\n        meta,\n        total,\n\n        handleCreated: (entity: RECORD) => {\n            handlers.updated(entity);\n        },\n        handleDeleted: (entity: RECORD) => {\n            handlers.deleted(entity);\n        },\n        handleUpdated: (entity: RECORD) => {\n            handlers.updated(entity);\n        },\n\n        render,\n        load,\n    };\n}\n\nexport function defineEntityCollectionManager<\n    A extends keyof EntityTypeMap,\n>(\n    context: EntityCollectionManagerCreateContext<A, EntityTypeMap[A]>,\n) : EntityCollectionManager<EntityTypeMap[A]> {\n    return create(context);\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport class EntityRecordError extends Error {\n    static unresolvable() {\n        return new this('Entity could not be resolved.');\n    }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { BuildInput, FieldsBuildInput, FiltersBuildInput } from 'rapiq';\nimport { unref } from 'vue';\nimport type { PropType } from 'vue';\nimport type {\n    EntityManager,\n    EntityVEmitOptions,\n    EntityVSlotProps,\n} from './types';\n\nexport function buildEntityVSlotProps<T>(\n    input: EntityManager<T>,\n) : EntityVSlotProps<T> {\n    return {\n        ...input,\n        error: unref(input.error),\n        busy: unref(input.busy),\n        data: unref(input.data),\n        lockId: unref(input.lockId),\n    };\n}\n\nexport function defineEntityVEmitOptions<T>(): EntityVEmitOptions<T> {\n    return {\n         \n        failed: (_item: Error) => true,\n         \n        created: (_item: T) => true,\n         \n        deleted: (_item: T) => true,\n         \n        updated: (_item: T) => true,\n         \n        resolved: (_item?: T) => true,\n    };\n}\n\nexport function defineEntityVProps<T>() {\n    return {\n        entity: { type: Object as PropType<T> },\n        entityId: { type: String },\n        queryFilters: { type: Object as PropType<FiltersBuildInput<T extends Record<string, any> ? T : never>> },\n        queryFields: { type: Object as PropType<FieldsBuildInput<T extends Record<string, any> ? T : never>> },\n        query: { type: Object as PropType<T extends Record<string, any> ? BuildInput<T> : never> },\n    };\n}\n","/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { EntityAPI } from '@authup/core-http-kit';\nimport type { EntityTypeMap } from '@authup/core-kit';\nimport type { ObjectLiteral } from '@authup/kit';\nimport { extendObject, hasOwnProperty } from '@authup/kit';\nimport type { BuildInput } from 'rapiq';\nimport { isObject } from 'smob';\nimport type { Ref, VNodeChild } from 'vue';\nimport {\n    computed, \n    isRef, \n    ref, \n    toRef, \n    watch,\n} from 'vue';\nimport { hasNormalizedSlot, injectHTTPClient, normalizeSlot } from '../../../../core';\nimport type { EntitySocketManager, EntitySocketManagerCreateContext } from '../socket';\nimport { defineEntitySocketManager } from '../socket';\nimport { EntityRecordError } from './error';\nimport type {\n    EntityID,\n    EntityManager,\n    EntityManagerCreateContext,\n    ResourceManagerRenderFn,\n    ResourceManagerResolveContext,\n} from './types';\nimport { buildEntityVSlotProps } from './helpers';\n\nfunction create<\n    TYPE extends keyof EntityTypeMap,\n    RECORD extends EntityTypeMap[TYPE] & ObjectLiteral,\n>(\n    ctx: EntityManagerCreateContext<TYPE, RECORD>,\n) : EntityManager<RECORD> {\n    const client = injectHTTPClient();\n    let domainAPI : EntityAPI<RECORD> | undefined;\n    if (hasOwnProperty(client, ctx.type)) {\n        domainAPI = client[ctx.type] as any;\n    }\n\n    const entity : Ref<RECORD | undefined> = ref(undefined);\n    const entityId = computed<EntityID<RECORD> | undefined>(\n        () => (\n            entity.value ? (entity.value as any).id : undefined),\n    );\n\n    const realmId = computed<string | undefined>(\n        () => {\n            let realmId : string | undefined;\n\n            if (ctx.realmId) {\n                if (typeof ctx.realmId === 'function') {\n                    return ctx.realmId(entity.value);\n                }\n\n                realmId = isRef(ctx.realmId) ? ctx.realmId.value : ctx.realmId;\n            }\n\n            if (!realmId && entity.value) {\n                if (\n                    hasOwnProperty(entity.value, 'realm_id') &&\n                    typeof entity.value.realm_id === 'string'\n                ) {\n                    return entity.value.realm_id;\n                }\n            }\n\n            return realmId;\n        },\n    );\n\n    const lockId = ref(undefined) as Ref<EntityID<RECORD> | undefined>;\n\n    if (ctx.props && ctx.props.entity) {\n        entity.value = ctx.props.entity;\n    }\n\n    const created = (value: RECORD) => {\n        if (ctx.setup && ctx.setup.emit) {\n            ctx.setup.emit('created', value);\n        }\n\n        if (ctx.onCreated) {\n            ctx.onCreated(value);\n        }\n    };\n\n    const deleted = (value: RECORD) => {\n        if (ctx.setup && ctx.setup.emit) {\n            ctx.setup.emit('deleted', (value || entity.value) as RECORD);\n        }\n\n        if (ctx.onDeleted) {\n            ctx.onDeleted((value || entity.value) as RECORD);\n        }\n    };\n\n    const updated = (value: Partial<RECORD>) => {\n        if (entity.value) {\n            extendObject(entity.value, value);\n        }\n\n        if (ctx.setup && ctx.setup.emit) {\n            ctx.setup.emit('updated', (entity.value || value) as RECORD);\n        }\n\n        if (ctx.onUpdated) {\n            ctx.onUpdated(entity.value || value);\n        }\n    };\n\n    const resolved = (value?: RECORD) => {\n        if (ctx.setup && ctx.setup.emit) {\n            ctx.setup.emit('resolved', value);\n        }\n\n        if (ctx.onResolved) {\n            ctx.onResolved(value);\n        }\n    };\n\n    const failed = (error: Error) => {\n        if (ctx.setup && ctx.setup.emit) {\n            ctx.setup.emit('failed', error);\n        }\n\n        if (ctx.onFailed) {\n            ctx.onFailed(error);\n        }\n    };\n\n    const busy = ref(false);\n\n    const update = async (data: Partial<RECORD>) => {\n        if (!domainAPI || busy.value || !entityId.value) {\n            return;\n        }\n\n        busy.value = true;\n        lockId.value = entityId.value;\n\n        try {\n            const response = await domainAPI.update(\n                entityId.value,\n                data,\n            );\n\n            entity.value = response;\n\n            updated(response);\n        } catch (e) {\n            if (e instanceof Error) {\n                failed(e);\n            }\n        } finally {\n            busy.value = false;\n            lockId.value = undefined;\n        }\n    };\n\n    const remove = async () : Promise<void> => {\n        if (!domainAPI || busy.value || !entityId.value) {\n            return;\n        }\n\n        busy.value = true;\n        lockId.value = entityId.value;\n\n        try {\n            const response = await domainAPI.delete(\n                entityId.value,\n            );\n\n            entity.value = undefined;\n\n            deleted(response);\n        } catch (e) {\n            if (e instanceof Error) {\n                failed(e);\n            }\n        } finally {\n            busy.value = false;\n            lockId.value = undefined;\n        }\n    };\n\n    const create = async (data: Partial<RECORD>) : Promise<void> => {\n        if (!domainAPI || busy.value) {\n            return;\n        }\n\n        busy.value = true;\n\n        lockId.value = undefined;\n\n        try {\n            const response = await domainAPI.create(data);\n\n            entity.value = response;\n\n            created(response);\n        } catch (e) {\n            if (e instanceof Error) {\n                failed(e);\n            }\n        } finally {\n            busy.value = false;\n            lockId.value = undefined;\n        }\n    };\n\n    const createOrUpdate = async (data: Partial<RECORD>) : Promise<void> => {\n        if (entity.value) {\n            await update(data);\n        } else {\n            await create(data);\n        }\n    };\n\n    let socket : EntitySocketManager | undefined;\n\n    if (\n        typeof ctx.socket !== 'boolean' ||\n        typeof ctx.socket === 'undefined' ||\n        typeof ctx.socket === 'function' ||\n        ctx.socket\n    ) {\n        let socketContext : EntitySocketManagerCreateContext<TYPE, RECORD> = { type: ctx.type };\n\n        if (isObject(ctx.socket)) {\n            socketContext = {\n                ...socketContext,\n                ...ctx.socket,\n            };\n        }\n\n        socketContext.onCreated = created;\n        socketContext.onUpdated = updated;\n        socketContext.lockId = lockId;\n        socketContext.realmId = realmId;\n        socketContext.target = true;\n        socketContext.targetId = entityId;\n\n        socket = defineEntitySocketManager(socketContext);\n    }\n\n    const error = ref<Error | undefined>(undefined);\n\n    const resolveByProps = () : boolean => {\n        if (!ctx.props) {\n            return false;\n        }\n\n        if (ctx.props.entity) {\n            entity.value = ctx.props.entity;\n\n            if (socket) {\n                socket.mount();\n            }\n\n            resolved(entity.value);\n\n            return true;\n        }\n\n        return false;\n    };\n\n    if (ctx.props) {\n        const propEntityRef = toRef(ctx.props, 'entity');\n        const propsEntityId = computed(() => (propEntityRef.value ? propEntityRef.value.id : undefined));\n        watch(propsEntityId, (val) => {\n            entity.value = propEntityRef.value;\n\n            if (val) {\n                if (socket) {\n                    socket.mount();\n                }\n            } else if (socket) {\n                socket.unmount();\n            }\n        });\n    }\n\n    resolveByProps();\n\n    const resolve = async (rctx: ResourceManagerResolveContext<RECORD> = {}) => {\n        if (entity.value) {\n            return;\n        }\n\n        let query : BuildInput<RECORD> | undefined;\n        if (rctx.query) {\n            query = rctx.query as BuildInput<RECORD>;\n        }\n\n        let { id } = rctx;\n\n        if (ctx.props) {\n            if (resolveByProps()) {\n                return;\n            }\n\n            if (ctx.props.entity) {\n                entity.value = ctx.props.entity;\n\n                if (socket) {\n                    socket.mount();\n                }\n\n                resolved(entity.value);\n\n                return;\n            }\n\n            if (ctx.props.queryFilters) {\n                query = query || {} as BuildInput<RECORD>;\n                (query as any).filters = ctx.props.queryFilters;\n            }\n\n            if (ctx.props.queryFields) {\n                query = query || {} as BuildInput<RECORD>;\n                (query as any).fields = ctx.props.queryFields;\n            }\n\n            if (ctx.props.entityId) {\n                id = ctx.props.entityId;\n            }\n        }\n\n        if (!domainAPI) {\n            resolved();\n\n            return;\n        }\n\n        if (id) {\n            try {\n                entity.value = await domainAPI.getOne(id, query as BuildInput<any>);\n\n                if (socket) {\n                    socket.mount();\n                }\n\n                resolved(entity.value);\n\n                return;\n            } catch (e) {\n                if (e instanceof Error) {\n                    error.value = e;\n                }\n            }\n        }\n\n        if (query) {\n            try {\n                const response = await domainAPI.getMany({\n                    ...query,\n                    pagination: { limit: 1 },\n                } as any);\n\n                if (response.data.length === 1) {\n                    [entity.value] = response.data;\n\n                    if (socket) {\n                        socket.mount();\n                    }\n                }\n\n                resolved(entity.value);\n            } catch (e) {\n                if (e instanceof Error) {\n                    error.value = e;\n                }\n            }\n        }\n    };\n\n    const resolveOrFail = async (resolveContext: ResourceManagerResolveContext<RECORD> = {}) => {\n        await resolve(resolveContext);\n\n        if (typeof entity.value === 'undefined') {\n            if (!error.value) {\n                throw EntityRecordError.unresolvable();\n            }\n\n            // eslint-disable-next-line no-throw-literal\n            throw error.value as Error;\n        }\n    };\n\n    if (ctx.query) {\n        const queryFn = ctx.query;\n        let initialized = false;\n\n        watch(\n            () => JSON.stringify(queryFn()),\n            () => {\n                if (!initialized) {\n                    initialized = true;\n                    return;\n                }\n\n                entity.value = undefined;\n                resolve({ query: queryFn() as any });\n            },\n            { immediate: true },\n        );\n    }\n\n    const manager : EntityManager<RECORD> = {\n        resolve,\n        resolveOrFail,\n        lockId,\n        busy,\n        data: entity,\n        error,\n\n        create,\n        createOrUpdate,\n        created,\n\n        update,\n        updated,\n\n        delete: remove,\n        deleted,\n\n        failed,\n\n        render: () => undefined,\n        renderError: () => undefined,\n    };\n\n    manager.render = (content?: VNodeChild | ResourceManagerRenderFn): VNodeChild => {\n        if (!ctx.setup || !ctx.setup.slots) {\n            return typeof content === 'function' ?\n                content() :\n                content;\n        }\n\n        if (hasNormalizedSlot('default', ctx.setup.slots)) {\n            return normalizeSlot(\n                'default',\n                buildEntityVSlotProps(manager),\n                ctx.setup.slots,\n            );\n        }\n\n        return typeof content === 'function' ?\n            content() :\n            content;\n    };\n\n    manager.renderError = (error: unknown) : VNodeChild => {\n        if (!ctx.setup || !ctx.setup.slots) {\n            return undefined;\n        }\n\n        if (\n            isObject(error) &&\n            hasNormalizedSlot('error', ctx.setup.slots)\n        ) {\n            return normalizeSlot('error', error, ctx.setup.slots);\n        }\n\n        return undefined;\n    };\n\n    return manager;\n}\n\nexport function defineEntityManager<\n    TYPE extends keyof EntityTypeMap,\n>(\n    ctx: EntityManagerCreateContext<TYPE, EntityTypeMap[TYPE]>,\n) : EntityManager<EntityTypeMap[TYPE]> {\n    return create<TYPE, EntityTypeMap[TYPE]>(ctx);\n}\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n    props: {\n        value: {\n            type: Boolean,\n            required: true,\n        },\n        isBusy: {\n            type: Boolean,\n            required: true,\n        },\n    },\n    emits: ['changed'],\n    setup(props, { emit }) {\n        const handleClick = (e: Event) => {\n            e.preventDefault();\n            emit('changed', !props.value);\n        };\n\n        return { handleClick };\n    },\n});\n</script>\n<template>\n    <button\n        type=\"button\"\n        :aria-label=\"isBusy ? 'Processing' : (value ? 'Remove' : 'Add')\"\n        :class=\"['btn btn-xs', {\n            'btn-dark': isBusy,\n            'btn-success': !isBusy && !value,\n            'btn-danger': !isBusy && value,\n        }]\"\n        :disabled=\"isBusy\"\n        @click=\"handleClick\"\n    >\n        <i\n            aria-hidden=\"true\"\n            :class=\"['fa', {\n                'fa-question': isBusy,\n                'fa-plus': !isBusy && !value,\n                'fa-minus': !isBusy && value,\n            }]\"\n        />\n    </button>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n    props: {\n        value: {\n            type: Boolean,\n            required: true,\n        },\n        isBusy: {\n            type: Boolean,\n            required: true,\n        },\n    },\n    emits: ['changed'],\n    setup(props, { emit }) {\n        const handleClick = (e: Event) => {\n            e.preventDefault();\n            emit('changed', !props.value);\n        };\n\n        return { handleClick };\n    },\n});\n</script>\n<template>\n    <button\n        type=\"button\"\n        :aria-label=\"isBusy ? 'Processing' : (value ? 'Remove' : 'Add')\"\n        :class=\"['btn btn-xs', {\n            'btn-dark': isBusy,\n            'btn-success': !isBusy && !value,\n            'btn-danger': !isBusy && value,\n        }]\"\n        :disabled=\"isBusy\"\n        @click=\"handleClick\"\n    >\n        <i\n            aria-hidden=\"true\"\n            :class=\"['fa', {\n                'fa-question': isBusy,\n                'fa-plus': !isBusy && !value,\n                'fa-minus': !isBusy && value,\n            }]\"\n        />\n    </button>\n</template>\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { h } from 'vue';\n\ntype ToggleButtonOptions = {\n    value: boolean,\n    isBusy: boolean,\n    changed: (value: boolean) => void\n};\nexport function renderToggleButton(\n    options: ToggleButtonOptions,\n) {\n    return h('button', {\n        class: ['btn btn-xs', {\n            'btn-dark': options.isBusy,\n            'btn-success': !options.isBusy && !options.value,\n            'btn-danger': !options.isBusy && options.value,\n        }],\n        disabled: options.isBusy,\n        onClick($event: any) {\n            $event.preventDefault();\n\n            options.changed(!options.value);\n        },\n    }, [\n        h('i', {\n            class: ['fa', {\n                'fa-question': options.isBusy,\n                'fa-plus': !options.isBusy && !options.value,\n                'fa-minus': !options.isBusy && options.value,\n            }],\n        }),\n    ]);\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type { FormInputBuildOptionsInput } from '@vuecs/form-controls';\nimport { buildFormInputText } from '@vuecs/form-controls';\nimport type { VNodeChild } from 'vue';\nimport { h } from 'vue';\nimport { hasNormalizedSlot, normalizeSlot } from '../../../core';\nimport { ListSearchSlotName } from './constants';\nimport type { SearchOptionsInput } from './type';\n\ntype Fn = (...args: any[]) => Promise<any> | any;\nfunction debounce<T extends Fn>(func: T, timeout = 200) {\n    let timer : ReturnType<typeof setTimeout> | undefined;\n\n    return (...args: Parameters<T>) => {\n        clearTimeout(timer);\n        timer = setTimeout(() => { func(...args); }, timeout);\n    };\n}\n\nexport function buildListSearch(\n    ctx: SearchOptionsInput,\n) {\n    ctx.icon = ctx.icon ?? true;\n    ctx.iconClass = ctx.iconClass || 'fa fa-search';\n    ctx.iconPosition = ctx.iconPosition ?? 'start';\n\n    if (hasNormalizedSlot(ListSearchSlotName.DEFAULT, ctx.slots)) {\n        return normalizeSlot(ListSearchSlotName.DEFAULT, {\n            load: ctx.load,\n            busy: ctx.busy,\n            icon: ctx.icon,\n            iconClass: ctx.iconClass,\n            iconPosition: ctx.iconPosition,\n        }, ctx.slots);\n    }\n\n    let iconContent : VNodeChild | undefined;\n    if (hasNormalizedSlot(ListSearchSlotName.ICON)) {\n        iconContent = normalizeSlot(ListSearchSlotName.ICON, {}, ctx.slots);\n    }\n\n    const options: FormInputBuildOptionsInput = {};\n\n    if (ctx.icon) {\n        if (ctx.iconPosition === 'start') {\n            options.groupPrepend = true;\n            if (iconContent) {\n                options.groupPrependContent = iconContent;\n            } else {\n                options.groupPrependContent = h('i', { class: ctx.iconClass });\n            }\n        } else {\n            options.groupAppend = true;\n            if (iconContent) {\n                options.groupAppendContent = iconContent;\n            } else {\n                options.groupAppendContent = h('i', { class: ctx.iconClass });\n            }\n        }\n    }\n\n    const handle = debounce((text: string) => {\n        if (!ctx.load || ctx.meta?.busy || ctx.busy) {\n            return Promise.resolve();\n        }\n\n        return ctx.load({\n            filters: { name: text.length > 0 ? `~${text}` : text as any },\n            pagination: { offset: 0 },\n        });\n    });\n\n    return buildFormInputText({\n        type: 'text',\n        onChange: (text: string) => handle(text),\n        props: { placeholder: '...' },\n        ...options,\n    });\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ListLoadFn } from '@vuecs/list-controls';\nimport type { PropType, SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { ListMeta } from '../entity';\nimport type { SearchSlotProps } from './type';\nimport { buildListSearch } from './module';\n\nexport const ASearch = defineComponent({\n    props: {\n        // todo: add entity-key prop\n        icon: { type: Boolean },\n        iconPosition: { type: String as PropType<'start' | 'end'> },\n        iconClass: { type: String },\n        busy: { type: Boolean },\n        load: { type: Function as PropType<ListLoadFn> },\n        meta: { type: Object as PropType<ListMeta<any>> },\n    },\n    slots: Object as SlotsType<{\n        default: SearchSlotProps\n    }>,\n    setup(\n        props,\n        { slots },\n    ) {\n        return () => buildListSearch({\n            slots,\n            icon: props.icon,\n            iconPosition: props.iconPosition,\n            busy: props.busy,\n            load: props.load,\n            meta: props.meta,\n        });\n    },\n});\n","/*\n * Copyright (c) 2025-2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { SlotName } from '@vuecs/list-controls';\nimport type { PropType, Ref, VNodeChild } from 'vue';\nimport {\n    computed, \n    h, \n    mergeProps, \n    ref, \n    toRef, \n    watch,\n} from 'vue';\nimport { APagination } from '../../pagination';\nimport { renderToggleButton } from '../../toggle-button';\nimport type { EntityCollectionVSlots } from '../collection';\nimport { defineEntityCollectionVEmitOptions, defineEntityCollectionVProps } from '../collection';\nimport { hasNormalizedSlot, normalizeSlot } from '../../../../core';\nimport { ASearch } from '../../search';\nimport type { EntityPickerContext, EntityPickerVEmitOptions, RecordWithID } from './types';\n\nexport function defineEntityPickerVEmitOptions<T>() : EntityPickerVEmitOptions<T> {\n    return {\n         \n        change: (_values: string[]) => true,\n        ...defineEntityCollectionVEmitOptions<T>(),\n    };\n}\n\nexport function defineEntityPickerVProps<T extends RecordWithID = RecordWithID>() {\n    return {\n        value: { type: [Array, String] as PropType<string[] | string | null> },\n        multiple: { type: Boolean as PropType<boolean | undefined> },\n        ...defineEntityCollectionVProps<T>(),\n    };\n}\n\nexport function defineEntityPicker<T extends RecordWithID>({\n    props,\n    setup,\n    component,\n} : EntityPickerContext<T>) {\n    const componentRef = ref(null) as Ref<null | Record<string, any>>;\n\n    setup.expose({\n        load: (...args: any[]) => {\n            if (componentRef.value) {\n                return componentRef.value.load(...args);\n            }\n\n            return undefined;\n        },\n    });\n\n    const value = toRef(props, 'value');\n    const items = ref<string[]>([]);\n\n    const assignItems = (input?: string[] | string | null) => {\n        if (Array.isArray(input)) {\n            items.value = input;\n        } else if (input) {\n            items.value = [input];\n        } else {\n            items.value = [];\n        }\n    };\n\n    const isMultiSelection = computed(() => {\n        if (typeof props.multiple === 'boolean') {\n            return props.multiple;\n        }\n\n        return Array.isArray(value.value);\n    });\n\n    assignItems(value.value);\n\n    watch(value, (input) => assignItems(input));\n\n    const toggle = (id: string) => {\n        const index = items.value!.indexOf(id);\n\n        if (index === -1) {\n            if (isMultiSelection.value) {\n                items.value!.push(id);\n            } else {\n                items.value = [id];\n            }\n        } else if (isMultiSelection.value) {\n            if (index !== -1) {\n                items.value!.splice(index, 1);\n            }\n        } else {\n            items.value = [];\n        }\n\n        setup.emit('change', [...items.value]);\n    };\n\n    const render = () => h(\n        component,\n        mergeProps(\n            { ref: componentRef },\n            props,\n            setup.attrs,\n        ),\n        {\n            [SlotName.HEADER]: (slotProps: EntityCollectionVSlots<RecordWithID>['header']) => [\n                h(ASearch, {\n                    load: (payload: any) => {\n                        if (slotProps.load) {\n                            return slotProps.load(payload);\n                        }\n\n                        return undefined;\n                    },\n                    busy: slotProps.busy,\n                }),\n            ],\n            [SlotName.FOOTER]: (slotProps: EntityCollectionVSlots<RecordWithID>['footer']) => [\n                h(APagination, {\n                    load: (payload: any) => {\n                        if (slotProps.load) {\n                            return slotProps.load(payload);\n                        }\n\n                        return undefined;\n                    },\n                    busy: slotProps.busy,\n                    meta: slotProps.meta,\n                }),\n            ],\n            [SlotName.ITEM_ACTIONS]: (\n                slotProps: EntityCollectionVSlots<RecordWithID>['itemActions'],\n            ) => {\n                let content : VNodeChild | undefined;\n                if (hasNormalizedSlot(SlotName.ITEM_ACTIONS, setup.slots)) {\n                    content = normalizeSlot(SlotName.ITEM_ACTIONS, {\n                        ...slotProps,\n                        toggle,\n                    }, setup.slots);\n                }\n\n                if (content) {\n                    return content;\n                }\n\n                return renderToggleButton({\n                    value: items.value.includes(slotProps.data.id),\n                    isBusy: slotProps.busy,\n                    changed() {\n                        toggle(slotProps.data.id);\n                    },\n                });\n            },\n        },\n    );\n\n    return { render };\n}\n","/*\n * Copyright (c) 2022-2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/kit';\nimport type {\n    Component,\n    PropType,\n    VNodeArrayChildren,\n    VNodeProps,\n} from 'vue';\nimport {\n    defineComponent, \n    getCurrentInstance,\n    h,\n    mergeProps,\n    ref, \n    resolveDynamicComponent,\n} from 'vue';\nimport type { EntityType } from '@authup/core-kit';\nimport type { EntityAPISlim } from '@authup/core-http-kit';\nimport {\n    TranslatorTranslationDefaultKey, \n    TranslatorTranslationGroup, \n    injectHTTPClient, \n    useTranslation, \n    wrapFnWithBusyState,\n} from '../../../core';\n\nenum ElementType {\n    BUTTON = 'button',\n    LINK = 'link',\n    DROP_DOWN_ITEM = 'dropDownItem',\n}\n\nconst AEntityDelete = defineComponent({\n    props: {\n        elementIcon: {\n            type: String,\n            default: 'fa-solid fa-trash',\n        },\n        withText: {\n            type: Boolean,\n            default: true,\n        },\n        elementType: {\n            type: String as PropType<`${ElementType}`>,\n            default: ElementType.BUTTON,\n        },\n\n        entityId: {\n            type: String,\n            required: true,\n        },\n        entityType: {\n            type: String as PropType<`${EntityType}`>,\n            required: true,\n        },\n\n        hint: {\n            type: String,\n            default: undefined,\n        },\n    },\n    emits: ['deleted', 'failed'],\n    setup(props, ctx) {\n        const apiClient = injectHTTPClient();\n        const instance = getCurrentInstance();\n        const busy = ref(false);\n\n        const submit = wrapFnWithBusyState(busy, async () => {\n            const domainAPI = (\n                apiClient as Record<string, any>\n            )[props.entityType] as EntityAPISlim<any> | undefined;\n\n            if (!isObject(domainAPI)) {\n                return;\n            }\n\n            if (typeof domainAPI.delete !== 'function') {\n                return;\n            }\n\n            try {\n                const response = await domainAPI.delete(props.entityId);\n                response.id = props.entityId;\n                ctx.emit('deleted', response);\n            } catch (e) {\n                ctx.emit('failed', e);\n            }\n        });\n\n        const translation = useTranslation({\n            group: TranslatorTranslationGroup.DEFAULT,\n            key: TranslatorTranslationDefaultKey.DELETE,\n        });\n\n        const render = () => {\n            let tag : Component | string = 'button';\n            const data : VNodeProps = {};\n\n            switch (props.elementType) {\n                case ElementType.LINK:\n                    tag = 'a';\n                    break;\n                case ElementType.DROP_DOWN_ITEM:\n                    if (\n                        instance &&\n                        typeof instance.appContext.app.component('BDropdownItem') !== 'undefined'\n                    ) {\n                        tag = resolveDynamicComponent('BDropdownItem') as Component;\n                    }\n                    break;\n            }\n\n            let icon : VNodeArrayChildren = [];\n            if (props.elementIcon) {\n                icon = [\n                    h('i', { class: [props.elementIcon, { 'pe-1': props.withText }] }),\n                ];\n            }\n\n            let text : VNodeArrayChildren = [];\n            if (props.withText) {\n                text = [\n                    translation.value,\n                ];\n            }\n\n            return h(\n                tag as string,\n                mergeProps({\n                    disabled: busy.value,\n                    onClick($event: any) {\n                        $event.preventDefault();\n\n                        return submit.apply(null);\n                    },\n                }, data),\n                [\n                    icon,\n                    text,\n                ],\n            );\n        };\n\n        return () => render();\n    },\n});\n\nexport { AEntityDelete };\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type { VNodeChild } from 'vue';\nimport { h } from 'vue';\nimport { hasNormalizedSlot, normalizeSlot } from '../../../core';\nimport { TitleSlotName } from './constants';\nimport type { TitleOptions } from './type';\n\nexport function buildTitle(\n    ctx: TitleOptions,\n) {\n    ctx.tag = ctx.tag || 'h6';\n    ctx.icon = ctx.icon ?? true;\n    ctx.iconClass = ctx.iconClass || 'fa-solid fa-list';\n    ctx.iconPosition = ctx.iconPosition ?? 'start';\n\n    if (hasNormalizedSlot(TitleSlotName.DEFAULT, ctx.slots)) {\n        return normalizeSlot(TitleSlotName.DEFAULT, {\n            tag: ctx.tag,\n            icon: ctx.icon,\n            iconClass: ctx.iconClass,\n            iconPosition: ctx.iconPosition,\n        }, ctx.slots);\n    }\n\n    let icon: VNodeChild;\n\n    if (ctx.icon) {\n        let iconContent : VNodeChild;\n        if (hasNormalizedSlot(TitleSlotName.ICON)) {\n            iconContent = normalizeSlot(TitleSlotName.ICON, {}, ctx.slots);\n        }\n\n        if (iconContent) {\n            icon = iconContent;\n        } else {\n            icon = h(\n                'i',\n                { class: [ctx.iconClass, 'pe-1'] },\n            );\n        }\n    }\n\n    let content: VNodeChild;\n    if (typeof ctx.text === 'function') {\n        content = ctx.text();\n    } else {\n        content = ctx.text || 'Overview';\n    }\n\n    if (ctx.iconPosition === 'start') {\n        return h(ctx.tag, [\n            icon,\n            content,\n        ]);\n    }\n\n    return h(ctx.tag, [\n        content,\n        icon,\n    ]);\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PropType, SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { TranslatorTranslationDefaultKey, TranslatorTranslationGroup, useTranslation } from '../../../core';\nimport type { TitleSlotProps } from './type';\nimport { buildTitle } from './module';\n\nexport const ATitle = defineComponent({\n    props: {\n        icon: {\n            type: Boolean,\n            default: true,\n        },\n        iconPosition: { type: String as PropType<'start' | 'end'> },\n        iconClass: { type: String },\n        text: { type: String },\n    },\n    slots: Object as SlotsType<{\n        default: TitleSlotProps\n    }>,\n    setup(props, { slots }) {\n        const translation = useTranslation({\n            group: TranslatorTranslationGroup.DEFAULT,\n            key: TranslatorTranslationDefaultKey.OVERVIEW,\n        });\n\n        return () => buildTitle({\n            slots,\n            icon: props.icon,\n            iconPosition: props.iconPosition,\n            text: props.text || translation.value,\n        });\n    },\n});\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { injectLocale } from '@ilingo/vuelidate/vue';\nimport {\n    computed, \n    defineComponent, \n    h, \n    ref,\n} from 'vue';\n\nconst LanguageSwitcherDropdown = defineComponent({\n    props: {\n        linkClassExtra: {\n            type: String,\n            default: undefined,\n        },\n    },\n    async setup(props) {\n        const opened = ref(false);\n\n        const locale = injectLocale();\n        const locales = ['de', 'en'];\n\n        const elements = computed(() => {\n            const output = [];\n            for (const locale_ of locales) {\n                output.push({\n                    value: locale_,\n                    active: locale.value === locale_,\n                });\n            }\n\n            return output;\n        });\n\n        const setLocale = (input: string) => {\n            locale.value = input;\n            opened.value = false;\n        };\n\n        return () => [\n            h('button', {\n                class: [\n                    'dropdown-toggle',\n                    props.linkClassExtra,\n                ],\n                onClick(event: any) {\n                    event.preventDefault();\n\n                    opened.value = !opened.value;\n                },\n            }, [\n                locale.value,\n            ]),\n            h('div', {\n                class: [\n                    'dropdown-menu',\n                    opened.value ? 'show' : '',\n                ],\n            }, elements.value.map((element) => h('button', {\n                onClick(event) {\n                    event.preventDefault();\n\n                    setLocale(element.value);\n                },\n                class: [\n                    'dropdown-item',\n                    element.active ? 'active' : '',\n                ],\n            }, [element.value]))),\n        ];\n    },\n});\n\nexport { LanguageSwitcherDropdown };\n","import { defineComponent } from 'vue';\nimport { buildFormSubmitWithTranslations, createFormSubmitTranslations } from '../../core';\n\nexport const AFormSubmit = defineComponent({\n    props: {\n        isBusy: {\n            type: Boolean,\n            default: false,\n        },\n        isEditing: {\n            type: Boolean,\n            default: false,\n        },\n        isInvalid: {\n            type: Boolean,\n            default: false,\n        },\n    },\n    emits: ['submit'],\n    setup(props, { emit }) {\n        const translationsSubmit = createFormSubmitTranslations();\n\n        const render = () => buildFormSubmitWithTranslations({\n            submit: () => emit('submit'),\n            busy: props.isBusy,\n            isEditing: props.isEditing,\n            invalid: props.isInvalid,\n        }, translationsSubmit);\n\n        return () => render();\n    },\n});\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { Client } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { EntityVSlots } from '../../utility';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n    defineEntityVProps,\n} from '../../utility';\n\nexport const AClient = defineComponent({\n    props: defineEntityVProps<Client>(),\n    emits: defineEntityVEmitOptions<Client>(),\n    slots: Object as SlotsType<EntityVSlots<Client>>,\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.CLIENT}`,\n            setup,\n            props,\n        });\n\n        try {\n            await manager.resolveOrFail();\n\n            return () => manager.render();\n        } catch (e) {\n            return () => manager.renderError(e);\n        }\n    },\n});\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { Realm } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { EntityVSlots } from '../../utility';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n    defineEntityVProps,\n} from '../../utility';\n\nexport const ARealm = defineComponent({\n    props: defineEntityVProps<Realm>(),\n    emits: defineEntityVEmitOptions<Realm>(),\n    slots: Object as SlotsType<EntityVSlots<Realm>>,\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.REALM}`,\n            props,\n            setup,\n        });\n\n        try {\n            await manager.resolveOrFail();\n\n            return () => manager.render();\n        } catch (e) {\n            return () => manager.renderError(e);\n        }\n    },\n});\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ComputedRef, MaybeRef } from 'vue';\nimport { computed, isRef } from 'vue';\n\ntype ObjectLiteral = {\n    id: any\n};\nexport function useIsEditing<T extends ObjectLiteral>(input: MaybeRef<T | undefined>) : ComputedRef<boolean> {\n    return computed(() => {\n        if (isRef(input)) {\n            return !!input.value && !!input.value.id;\n        }\n\n        return !!input && !!input.id;\n    });\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { watch } from 'vue';\nimport type { Ref } from 'vue';\n\nexport function onChange<T>(input: Ref<T>, fn: (item: T) => any) {\n    watch(input, (val, oldValue) => {\n        if (val !== oldValue) {\n            fn(val);\n        }\n    }, { deep: true });\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ComputedRef, MaybeRef } from 'vue';\nimport { computed, isRef } from 'vue';\n\ntype ObjectLiteral = {\n    updated_at: string | Date | undefined\n};\nexport function useUpdatedAt<T extends ObjectLiteral>(input?: MaybeRef<T | null | undefined>) : ComputedRef<string | Date | undefined> {\n    return computed(() => {\n        if (isRef(input)) {\n            return input.value ? input.value.updated_at : undefined;\n        }\n\n        return input ? input.updated_at : undefined;\n    });\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PermissionEvaluationContext } from '@authup/access';\nimport type { Ref } from 'vue';\nimport { createPermissionCheckerReactiveFn } from '../core';\n\nexport function usePermissionCheck(ctx: PermissionEvaluationContext) : Ref<boolean> {\n    const checkFn = createPermissionCheckerReactiveFn();\n\n    return checkFn(ctx);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport { createNanoID } from '@authup/kit';\nimport useVuelidate from '@vuelidate/core';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport type { PropType, VNodeArrayChildren } from 'vue';\nimport {\n    computed, \n    defineComponent, \n    h, \n    reactive, \n    ref, \n    watch,\n} from 'vue';\nimport type { Realm } from '@authup/core-kit';\nimport { EntityType, REALM_MASTER_NAME } from '@authup/core-kit';\nimport {\n    buildFormGroup,\n    buildFormInput,\n    buildFormTextarea,\n} from '@vuecs/form-controls';\nimport { useIsEditing, useUpdatedAt } from '../../../composables';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    VuelidateCustomRule,\n    VuelidateCustomRuleKey,\n    assignFormProperties,\n    buildFormSubmitWithTranslations,\n    createFormSubmitTranslations,\n    getVuelidateSeverity,\n    useTranslationsForGroup,\n    useTranslationsForNestedValidation,\n} from '../../../core';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\n\nexport const ARealmForm = defineComponent({\n    props: {\n        entity: {\n            type: Object as PropType<Realm>,\n            required: false,\n            default: undefined,\n        },\n    },\n    emits: defineEntityVEmitOptions<Realm>(),\n    setup(props, ctx) {\n        const busy = ref(false);\n        const form = reactive({\n            name: '',\n            display_name: '',\n            description: '',\n        });\n\n        const $v = useVuelidate({\n            name: {\n                required,\n                minLength: minLength(3),\n                maxLength: maxLength(128),\n                [VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT]: VuelidateCustomRule[\n                    VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT\n                ],\n            },\n            display_name: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            description: {\n                minLength: minLength(5),\n                maxLength: maxLength(4096),\n            },\n        }, form);\n\n        const manager = defineEntityManager({\n            type: `${EntityType.REALM}`,\n            setup: ctx,\n            props,\n        });\n\n        const isEditing = useIsEditing(manager.data);\n        const updatedAt = useUpdatedAt(props.entity);\n        const isNameEmpty = computed(() => !form.name || form.name.length === 0);\n\n        const generateName = () => {\n            form.name = createNanoID();\n        };\n\n        function initForm() {\n            assignFormProperties(form, manager.data.value);\n\n            if (form.name.length === 0) {\n                generateName();\n            }\n        }\n\n        watch(updatedAt, (val, oldVal) => {\n            if (val && val !== oldVal) {\n                manager.data.value = props.entity;\n\n                initForm();\n            }\n        });\n\n        initForm();\n\n        const submit = async () => {\n            if ($v.value.$invalid) {\n                return;\n            }\n\n            await manager.createOrUpdate(form);\n        };\n\n        const translationsValidation = useTranslationsForNestedValidation($v.value);\n        const translationsSubmit = createFormSubmitTranslations();\n\n        const translationsDefault = useTranslationsForGroup(\n            TranslatorTranslationGroup.DEFAULT,\n            [\n                { key: TranslatorTranslationDefaultKey.GENERATE },\n                { key: TranslatorTranslationDefaultKey.NAME },\n                { key: TranslatorTranslationDefaultKey.DISPLAY_NAME },\n                { key: TranslatorTranslationDefaultKey.DESCRIPTION },\n                { key: TranslatorTranslationDefaultKey.REALM },\n            ],\n        );\n\n        const render = () => {\n            const children : VNodeArrayChildren = [];\n            children.push(buildFormGroup({\n                validationMessages: translationsValidation.name.value,\n                validationSeverity: getVuelidateSeverity($v.value.name),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.NAME].value,\n                content: buildFormInput({\n                    value: $v.value.name.$model,\n                    onChange(input) {\n                        $v.value.name.$model = input;\n                    },\n                    props: {\n                        disabled: manager.data.value &&\n                            manager.data.value.name === REALM_MASTER_NAME,\n                    },\n                }),\n            }));\n\n            if (!manager.data.value || !manager.data.value.id) {\n                children.push([\n                    h('div', { class: 'mb-3' }, [\n                        h('button', {\n                            class: ['btn btn-xs', {\n                                'btn-dark': isNameEmpty.value,\n                                'btn-warning': !isNameEmpty.value,\n                            }],\n                            onClick($event: any) {\n                                $event.preventDefault();\n\n                                generateName.call(null);\n                            },\n                        }, [\n                            h('i', { class: 'fa fa-wrench' }),\n                            ' ',\n                            translationsDefault[TranslatorTranslationDefaultKey.GENERATE].value,\n                        ]),\n                    ]),\n                ]);\n            }\n\n            children.push(buildFormGroup({\n                validationMessages: translationsValidation.display_name.value,\n                validationSeverity: getVuelidateSeverity($v.value.display_name),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.DISPLAY_NAME].value,\n                content: buildFormInput({\n                    value: $v.value.display_name.$model,\n                    onChange(input) {\n                        $v.value.display_name.$model = input;\n                    },\n                }),\n            }));\n\n            children.push(buildFormGroup({\n                validationMessages: translationsValidation.description.value,\n                validationSeverity: getVuelidateSeverity($v.value.description),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.DESCRIPTION].value,\n                content: buildFormTextarea({\n                    value: $v.value.description.$model,\n                    onChange(input) {\n                        $v.value.description.$model = input;\n                    },\n                    props: { rows: 4 },\n                }),\n            }));\n\n            children.push(buildFormSubmitWithTranslations({\n                submit,\n                busy: busy.value,\n                isEditing: isEditing.value,\n                invalid: $v.value.$invalid,\n            }, translationsSubmit));\n\n            return h('form', {\n                onSubmit($event: any) {\n                    $event.preventDefault();\n\n                    return submit.apply(null);\n                },\n            }, children);\n        };\n\n        return () => render();\n    },\n});\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { Realm } from '@authup/core-kit';\nimport type { EntityCollectionVSlots } from '../../utility';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    TranslatorTranslationVuecsKey,\n    useTranslation,\n} from '../../../core';\nimport {\n    defineEntityCollectionManager,\n    defineEntityCollectionVEmitOptions,\n    defineEntityCollectionVProps,\n} from '../../utility';\n\nexport const ARealms = defineComponent({\n    props: defineEntityCollectionVProps<Realm>(),\n    emits: defineEntityCollectionVEmitOptions<Realm>(),\n    slots: Object as SlotsType<EntityCollectionVSlots<Realm>>,\n    setup(props, ctx) {\n        const { render } = defineEntityCollectionManager({\n            type: `${EntityType.REALM}`,\n            props,\n            setup: ctx,\n        });\n\n        const translationsName = useTranslation({\n            group: TranslatorTranslationGroup.VUECS,\n            key: TranslatorTranslationDefaultKey.REALMS,\n        });\n\n        const translation = useTranslation({\n            group: TranslatorTranslationGroup.VUECS,\n            key: TranslatorTranslationVuecsKey.NO_MORE,\n            data: { name: translationsName },\n        });\n\n        return () => render({ noMore: { content: translation.value } });\n    },\n});\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityPicker,\n    defineEntityPickerVEmitOptions,\n    defineEntityPickerVProps,\n} from '../../utility/entity/picker/module';\nimport type { EntityPickerVSlots } from '../../utility/entity/picker/types';\nimport { ARealms } from './ARealms';\n\nexport const ARealmPicker = defineComponent({\n    props: defineEntityPickerVProps<Realm>(),\n    emits: defineEntityPickerVEmitOptions<Realm>(),\n    slots: Object as SlotsType<EntityPickerVSlots<Realm>>,\n    setup(props, setup) {\n        const { render } = defineEntityPicker({\n            component: ARealms,\n            props,\n            setup,\n        });\n\n        return () => render();\n    },\n});\n","<!--\n  - Copyright (c) 2026.\n  -  Author Peter Placzek (tada5hi)\n  -  For the full copyright and license information,\n  -  view the LICENSE file that was distributed with this source code.\n  -->\n\n<script lang=\"ts\">\nimport {\n    type PropType, \n    computed, \n    defineComponent, \n    reactive, \n    watch,\n} from 'vue';\nimport useVuelidate from '@vuelidate/core';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport { type Client, EntityType } from '@authup/core-kit';\nimport { createNanoID, isBCryptHash } from '@authup/kit';\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport { ARealmPicker } from '../realm';\nimport {\n    AFormInputList, \n    AFormSubmit, \n    defineEntityManager, \n    defineEntityVEmitOptions,\n} from '../../utility';\nimport {\n    TranslatorTranslationClientKey,\n    TranslatorTranslationDefaultKey, \n    TranslatorTranslationGroup, \n    VuelidateCustomRule, \n    VuelidateCustomRuleKey,\n    assignFormProperties,\n    injectStore,\n    storeToRefs, \n    useTranslationsForGroup,\n} from '../../../core';\nimport { useIsEditing, useUpdatedAt } from '../../../composables';\n\nexport default defineComponent({\n    components: {\n        AFormSubmit,\n        ARealmPicker,\n        AFormInputList,\n        IVuelidate,\n    },\n    props: {\n        name: {\n            type: String,\n            default: undefined,\n        },\n        entity: {\n            type: Object as PropType<Client>,\n            default: undefined,\n        },\n        realmId: {\n            type: String,\n            default: undefined,\n        },\n    },\n    emits: defineEntityVEmitOptions<Client>(),\n    setup(props, ctx) {\n        const form = reactive({\n            active: true,\n            name: '',\n            display_name: '',\n            description: '',\n            realm_id: '',\n            redirect_uri: '',\n            base_url: '',\n            root_url: '',\n            is_confidential: true,\n            secret: '',\n            secret_hashed: false,\n        });\n\n        const vuelidate = useVuelidate({\n            active: { required },\n            name: {\n                required,\n                [\n                VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT\n                ]: VuelidateCustomRule[VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT],\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            display_name: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            description: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            realm_id: { required },\n            redirect_uri: {\n                // todo: url is required!\n                maxLength: maxLength(2000),\n            },\n            is_confidential: {},\n            secret: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            secret_hashed: {},\n        }, form);\n\n        const store = injectStore();\n        const storeRefs = storeToRefs(store);\n\n        const manager = defineEntityManager({\n            type: `${EntityType.CLIENT}`,\n            setup: ctx,\n            props,\n        });\n\n        const isEditing = useIsEditing(manager.data);\n        const updatedAt = useUpdatedAt(props.entity);\n\n        const isNameFixed = computed(() => !!props.name && props.name.length > 0);\n        const realmId = computed(() => (manager.data.value ?\n            manager.data.value.realm_id :\n            storeRefs.realmId.value));\n\n        const generateSecret = () => createNanoID('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_!.', 32);\n        const isSecretHashed = computed(\n            () => {\n                if (!manager.data.value || manager.data.value.secret !== form.secret) {\n                    return false;\n                }\n\n                return isBCryptHash(form.secret);\n            },\n        );\n\n        function initForm() {\n            if (props.name) {\n                form.name = props.name;\n            }\n\n            assignFormProperties(form, manager.data.value);\n\n            form.realm_id = realmId.value ?? '';\n\n            if (form.secret.length === 0) {\n                form.secret = generateSecret();\n            }\n        }\n\n        const isConfidential = computed(() => form.is_confidential);\n        watch(isConfidential, (val, oldValue) => {\n            if (val === oldValue) return;\n\n            if (val) {\n                form.secret = manager.data.value?.secret || generateSecret();\n            } else {\n                form.secret = '';\n            }\n        });\n\n        watch(\n            updatedAt,\n            (val, oldVal) => {\n                if (val && val !== oldVal) {\n                    manager.data.value = props.entity;\n\n                    initForm();\n                }\n            },\n        );\n\n        initForm();\n\n        const submit = async () => {\n            if (vuelidate.value.$invalid) {\n                return;\n            }\n\n            await manager.createOrUpdate(form);\n\n            assignFormProperties(form, manager.data.value);\n        };\n\n        const translationsClient = useTranslationsForGroup(\n            TranslatorTranslationGroup.CLIENT,\n            [\n                { key: TranslatorTranslationClientKey.NAME_HINT },\n                { key: TranslatorTranslationClientKey.DESCRIPTION_HINT },\n                { key: TranslatorTranslationClientKey.REDIRECT_URI_HINT },\n                { key: TranslatorTranslationClientKey.IS_CONFIDENTIAL },\n                { key: TranslatorTranslationClientKey.IS_ACTIVE },\n                { key: TranslatorTranslationClientKey.HASH_SECRET },\n            ],\n        );\n\n        const translationsDefault = useTranslationsForGroup(\n            TranslatorTranslationGroup.DEFAULT,\n            [\n                { key: TranslatorTranslationDefaultKey.GENERATE },\n                { key: TranslatorTranslationDefaultKey.NAME },\n                { key: TranslatorTranslationDefaultKey.DISPLAY_NAME },\n                { key: TranslatorTranslationDefaultKey.DESCRIPTION },\n                { key: TranslatorTranslationDefaultKey.REALM },\n                { key: TranslatorTranslationDefaultKey.REDIRECT_URIS },\n                { key: TranslatorTranslationDefaultKey.SECRET },\n            ],\n        );\n\n        const redirectUris = computed(() => (vuelidate.value.redirect_uri.$model ?\n            vuelidate.value.redirect_uri.$model.split(',') :\n            []));\n\n        return {\n            translationsDefault,\n            translationsClient,\n\n            vuelidate,\n            data: manager.data,\n            isNameFixed,\n            isBusy: manager.busy.value,\n            isEditing,\n\n            isSecretHashed,\n            generateSecret,\n\n            redirectUris,\n\n            submit,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"row\">\n        <div class=\"col\">\n            <template v-if=\"data\">\n                <VCFormGroup>\n                    <template #label>\n                        ID\n                    </template>\n                    <VCFormInput\n                        :model-value=\"data.id\"\n                        :disabled=\"true\"\n                    />\n                </VCFormGroup>\n            </template>\n\n            <IVuelidate :validation=\"vuelidate.name\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            {{ translationsDefault.name }}\n                        </template>\n                        <VCFormInput\n                            v-model=\"vuelidate.name.$model\"\n                            :disabled=\"isNameFixed\"\n                        />\n                    </VCFormGroup>\n                    <small>{{ translationsClient.nameHint }}</small>\n                </template>\n            </IVuelidate>\n\n            <hr>\n\n            <IVuelidate :validation=\"vuelidate.display_name\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            {{ translationsDefault.displayName }}\n                        </template>\n                        <VCFormInput\n                            v-model=\"vuelidate.display_name.$model\"\n                            :disabled=\"isNameFixed\"\n                        />\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n\n            <hr>\n\n            <IVuelidate :validation=\"vuelidate.secret\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            {{ translationsDefault.secret }}\n\n                            <template v-if=\"isSecretHashed\">\n                                <span class=\"text-danger font-weight-bold\">\n                                    <i class=\"fa fa-exclamation-triangle\" />\n                                </span>\n                            </template>\n                        </template>\n                        <VCFormInput\n                            v-model=\"vuelidate.secret.$model\"\n                            :disabled=\"!vuelidate.is_confidential.$model\"\n                        >\n                            <template #groupAppend>\n                                <button\n                                    class=\"btn\"\n                                    type=\"button\"\n                                    @click.prevent=\"() => vuelidate.secret.$model = generateSecret()\"\n                                >\n                                    <i class=\"fa fa-refresh\" />\n                                </button>\n                            </template>\n                        </VCFormInput>\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n            <div class=\"row\">\n                <div class=\"col\">\n                    <IVuelidate :validation=\"vuelidate.is_confidential\">\n                        <template #default=\"props\">\n                            <VCFormGroup\n                                :validation-messages=\"props.data\"\n                                :validation-severity=\"props.severity\"\n                            >\n                                <VCFormInputCheckbox\n                                    v-model=\"vuelidate.is_confidential.$model\"\n                                    :group-class=\"'form-switch'\"\n                                    :label=\"true\"\n                                    :label-content=\"translationsClient.isConfidential.value\"\n                                />\n                            </VCFormGroup>\n                        </template>\n                    </IVuelidate>\n                </div>\n                <div class=\"col\">\n                    <IVuelidate :validation=\"vuelidate.secret_hashed\">\n                        <template #default=\"props\">\n                            <VCFormGroup\n                                :validation-messages=\"props.data\"\n                                :validation-severity=\"props.severity\"\n                            >\n                                <VCFormInputCheckbox\n                                    v-model=\"vuelidate.secret_hashed.$model\"\n                                    :group-class=\"'form-switch'\"\n                                    :label=\"true\"\n                                    :label-content=\"translationsClient.hashSecret.value\"\n                                />\n                            </VCFormGroup>\n                        </template>\n                    </IVuelidate>\n                </div>\n                <div class=\"col\">\n                    <IVuelidate :validation=\"vuelidate.active\">\n                        <template #default=\"props\">\n                            <VCFormGroup\n                                :validation-messages=\"props.data\"\n                                :validation-severity=\"props.severity\"\n                            >\n                                <VCFormInputCheckbox\n                                    v-model=\"vuelidate.active.$model\"\n                                    :group-class=\"'form-switch'\"\n                                    :label=\"true\"\n                                    :label-content=\"translationsClient.isActive.value\"\n                                />\n                            </VCFormGroup>\n                        </template>\n                    </IVuelidate>\n                </div>\n            </div>\n\n            <template v-if=\"!realmId && !isEditing\">\n                <hr>\n                <IVuelidate :validation=\"vuelidate.realm_id\">\n                    <template #default=\"props\">\n                        <VCFormGroup\n                            :validation-messages=\"props.data\"\n                            :validation-severity=\"props.severity\"\n                        >\n                            <template #label>\n                                {{ translationsDefault.realm }}\n                            </template>\n                            <template #default>\n                                <ARealmPicker\n                                    :value=\"vuelidate.realm_id.$model\"\n                                    @change=\"(input: string[]) => {\n\n                                        vuelidate.realm_id.$model = input.length > 0 ? input[0] ?? '' : '';\n                                    }\"\n                                />\n                            </template>\n                        </VCFormGroup>\n                    </template>\n                </IVuelidate>\n            </template>\n        </div>\n        <div class=\"col\">\n            <AFormInputList\n                :names=\"redirectUris\"\n                @changed=\"(value) => {\n                    if (value.length === 0) {\n                        vuelidate.redirect_uri.$model = '';\n                        return;\n                    }\n                    vuelidate.redirect_uri.$model = value.join(',');\n                }\"\n            >\n                <template #label>\n                    {{ translationsDefault.redirectUris }}\n                </template>\n            </AFormInputList>\n            <small>{{ translationsClient.redirectURIHint }}</small>\n\n            <hr>\n\n            <IVuelidate :validation=\"vuelidate.description\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            {{ translationsDefault.description }}\n                        </template>\n                        <VCFormTextarea\n                            v-model=\"vuelidate.description.$model\"\n                            rows=\"7\"\n                        />\n                    </VCFormGroup>\n\n                    <small>{{ translationsClient.descriptionHint }}</small>\n                </template>\n            </IVuelidate>\n\n            <hr>\n\n            <div>\n                <AFormSubmit\n                    :is-busy=\"isBusy\"\n                    :is-editing=\"isEditing\"\n                    :is-invalid=\"vuelidate.$invalid\"\n                    @submit=\"submit\"\n                />\n            </div>\n        </div>\n    </div>\n</template>\n","<!--\n  - Copyright (c) 2026.\n  -  Author Peter Placzek (tada5hi)\n  -  For the full copyright and license information,\n  -  view the LICENSE file that was distributed with this source code.\n  -->\n\n<script lang=\"ts\">\nimport {\n    type PropType, \n    computed, \n    defineComponent, \n    reactive, \n    watch,\n} from 'vue';\nimport useVuelidate from '@vuelidate/core';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport { type Client, EntityType } from '@authup/core-kit';\nimport { createNanoID, isBCryptHash } from '@authup/kit';\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport { ARealmPicker } from '../realm';\nimport {\n    AFormInputList, \n    AFormSubmit, \n    defineEntityManager, \n    defineEntityVEmitOptions,\n} from '../../utility';\nimport {\n    TranslatorTranslationClientKey,\n    TranslatorTranslationDefaultKey, \n    TranslatorTranslationGroup, \n    VuelidateCustomRule, \n    VuelidateCustomRuleKey,\n    assignFormProperties,\n    injectStore,\n    storeToRefs, \n    useTranslationsForGroup,\n} from '../../../core';\nimport { useIsEditing, useUpdatedAt } from '../../../composables';\n\nexport default defineComponent({\n    components: {\n        AFormSubmit,\n        ARealmPicker,\n        AFormInputList,\n        IVuelidate,\n    },\n    props: {\n        name: {\n            type: String,\n            default: undefined,\n        },\n        entity: {\n            type: Object as PropType<Client>,\n            default: undefined,\n        },\n        realmId: {\n            type: String,\n            default: undefined,\n        },\n    },\n    emits: defineEntityVEmitOptions<Client>(),\n    setup(props, ctx) {\n        const form = reactive({\n            active: true,\n            name: '',\n            display_name: '',\n            description: '',\n            realm_id: '',\n            redirect_uri: '',\n            base_url: '',\n            root_url: '',\n            is_confidential: true,\n            secret: '',\n            secret_hashed: false,\n        });\n\n        const vuelidate = useVuelidate({\n            active: { required },\n            name: {\n                required,\n                [\n                VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT\n                ]: VuelidateCustomRule[VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT],\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            display_name: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            description: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            realm_id: { required },\n            redirect_uri: {\n                // todo: url is required!\n                maxLength: maxLength(2000),\n            },\n            is_confidential: {},\n            secret: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            secret_hashed: {},\n        }, form);\n\n        const store = injectStore();\n        const storeRefs = storeToRefs(store);\n\n        const manager = defineEntityManager({\n            type: `${EntityType.CLIENT}`,\n            setup: ctx,\n            props,\n        });\n\n        const isEditing = useIsEditing(manager.data);\n        const updatedAt = useUpdatedAt(props.entity);\n\n        const isNameFixed = computed(() => !!props.name && props.name.length > 0);\n        const realmId = computed(() => (manager.data.value ?\n            manager.data.value.realm_id :\n            storeRefs.realmId.value));\n\n        const generateSecret = () => createNanoID('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_!.', 32);\n        const isSecretHashed = computed(\n            () => {\n                if (!manager.data.value || manager.data.value.secret !== form.secret) {\n                    return false;\n                }\n\n                return isBCryptHash(form.secret);\n            },\n        );\n\n        function initForm() {\n            if (props.name) {\n                form.name = props.name;\n            }\n\n            assignFormProperties(form, manager.data.value);\n\n            form.realm_id = realmId.value ?? '';\n\n            if (form.secret.length === 0) {\n                form.secret = generateSecret();\n            }\n        }\n\n        const isConfidential = computed(() => form.is_confidential);\n        watch(isConfidential, (val, oldValue) => {\n            if (val === oldValue) return;\n\n            if (val) {\n                form.secret = manager.data.value?.secret || generateSecret();\n            } else {\n                form.secret = '';\n            }\n        });\n\n        watch(\n            updatedAt,\n            (val, oldVal) => {\n                if (val && val !== oldVal) {\n                    manager.data.value = props.entity;\n\n                    initForm();\n                }\n            },\n        );\n\n        initForm();\n\n        const submit = async () => {\n            if (vuelidate.value.$invalid) {\n                return;\n            }\n\n            await manager.createOrUpdate(form);\n\n            assignFormProperties(form, manager.data.value);\n        };\n\n        const translationsClient = useTranslationsForGroup(\n            TranslatorTranslationGroup.CLIENT,\n            [\n                { key: TranslatorTranslationClientKey.NAME_HINT },\n                { key: TranslatorTranslationClientKey.DESCRIPTION_HINT },\n                { key: TranslatorTranslationClientKey.REDIRECT_URI_HINT },\n                { key: TranslatorTranslationClientKey.IS_CONFIDENTIAL },\n                { key: TranslatorTranslationClientKey.IS_ACTIVE },\n                { key: TranslatorTranslationClientKey.HASH_SECRET },\n            ],\n        );\n\n        const translationsDefault = useTranslationsForGroup(\n            TranslatorTranslationGroup.DEFAULT,\n            [\n                { key: TranslatorTranslationDefaultKey.GENERATE },\n                { key: TranslatorTranslationDefaultKey.NAME },\n                { key: TranslatorTranslationDefaultKey.DISPLAY_NAME },\n                { key: TranslatorTranslationDefaultKey.DESCRIPTION },\n                { key: TranslatorTranslationDefaultKey.REALM },\n                { key: TranslatorTranslationDefaultKey.REDIRECT_URIS },\n                { key: TranslatorTranslationDefaultKey.SECRET },\n            ],\n        );\n\n        const redirectUris = computed(() => (vuelidate.value.redirect_uri.$model ?\n            vuelidate.value.redirect_uri.$model.split(',') :\n            []));\n\n        return {\n            translationsDefault,\n            translationsClient,\n\n            vuelidate,\n            data: manager.data,\n            isNameFixed,\n            isBusy: manager.busy.value,\n            isEditing,\n\n            isSecretHashed,\n            generateSecret,\n\n            redirectUris,\n\n            submit,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"row\">\n        <div class=\"col\">\n            <template v-if=\"data\">\n                <VCFormGroup>\n                    <template #label>\n                        ID\n                    </template>\n                    <VCFormInput\n                        :model-value=\"data.id\"\n                        :disabled=\"true\"\n                    />\n                </VCFormGroup>\n            </template>\n\n            <IVuelidate :validation=\"vuelidate.name\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            {{ translationsDefault.name }}\n                        </template>\n                        <VCFormInput\n                            v-model=\"vuelidate.name.$model\"\n                            :disabled=\"isNameFixed\"\n                        />\n                    </VCFormGroup>\n                    <small>{{ translationsClient.nameHint }}</small>\n                </template>\n            </IVuelidate>\n\n            <hr>\n\n            <IVuelidate :validation=\"vuelidate.display_name\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            {{ translationsDefault.displayName }}\n                        </template>\n                        <VCFormInput\n                            v-model=\"vuelidate.display_name.$model\"\n                            :disabled=\"isNameFixed\"\n                        />\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n\n            <hr>\n\n            <IVuelidate :validation=\"vuelidate.secret\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            {{ translationsDefault.secret }}\n\n                            <template v-if=\"isSecretHashed\">\n                                <span class=\"text-danger font-weight-bold\">\n                                    <i class=\"fa fa-exclamation-triangle\" />\n                                </span>\n                            </template>\n                        </template>\n                        <VCFormInput\n                            v-model=\"vuelidate.secret.$model\"\n                            :disabled=\"!vuelidate.is_confidential.$model\"\n                        >\n                            <template #groupAppend>\n                                <button\n                                    class=\"btn\"\n                                    type=\"button\"\n                                    @click.prevent=\"() => vuelidate.secret.$model = generateSecret()\"\n                                >\n                                    <i class=\"fa fa-refresh\" />\n                                </button>\n                            </template>\n                        </VCFormInput>\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n            <div class=\"row\">\n                <div class=\"col\">\n                    <IVuelidate :validation=\"vuelidate.is_confidential\">\n                        <template #default=\"props\">\n                            <VCFormGroup\n                                :validation-messages=\"props.data\"\n                                :validation-severity=\"props.severity\"\n                            >\n                                <VCFormInputCheckbox\n                                    v-model=\"vuelidate.is_confidential.$model\"\n                                    :group-class=\"'form-switch'\"\n                                    :label=\"true\"\n                                    :label-content=\"translationsClient.isConfidential.value\"\n                                />\n                            </VCFormGroup>\n                        </template>\n                    </IVuelidate>\n                </div>\n                <div class=\"col\">\n                    <IVuelidate :validation=\"vuelidate.secret_hashed\">\n                        <template #default=\"props\">\n                            <VCFormGroup\n                                :validation-messages=\"props.data\"\n                                :validation-severity=\"props.severity\"\n                            >\n                                <VCFormInputCheckbox\n                                    v-model=\"vuelidate.secret_hashed.$model\"\n                                    :group-class=\"'form-switch'\"\n                                    :label=\"true\"\n                                    :label-content=\"translationsClient.hashSecret.value\"\n                                />\n                            </VCFormGroup>\n                        </template>\n                    </IVuelidate>\n                </div>\n                <div class=\"col\">\n                    <IVuelidate :validation=\"vuelidate.active\">\n                        <template #default=\"props\">\n                            <VCFormGroup\n                                :validation-messages=\"props.data\"\n                                :validation-severity=\"props.severity\"\n                            >\n                                <VCFormInputCheckbox\n                                    v-model=\"vuelidate.active.$model\"\n                                    :group-class=\"'form-switch'\"\n                                    :label=\"true\"\n                                    :label-content=\"translationsClient.isActive.value\"\n                                />\n                            </VCFormGroup>\n                        </template>\n                    </IVuelidate>\n                </div>\n            </div>\n\n            <template v-if=\"!realmId && !isEditing\">\n                <hr>\n                <IVuelidate :validation=\"vuelidate.realm_id\">\n                    <template #default=\"props\">\n                        <VCFormGroup\n                            :validation-messages=\"props.data\"\n                            :validation-severity=\"props.severity\"\n                        >\n                            <template #label>\n                                {{ translationsDefault.realm }}\n                            </template>\n                            <template #default>\n                                <ARealmPicker\n                                    :value=\"vuelidate.realm_id.$model\"\n                                    @change=\"(input: string[]) => {\n\n                                        vuelidate.realm_id.$model = input.length > 0 ? input[0] ?? '' : '';\n                                    }\"\n                                />\n                            </template>\n                        </VCFormGroup>\n                    </template>\n                </IVuelidate>\n            </template>\n        </div>\n        <div class=\"col\">\n            <AFormInputList\n                :names=\"redirectUris\"\n                @changed=\"(value) => {\n                    if (value.length === 0) {\n                        vuelidate.redirect_uri.$model = '';\n                        return;\n                    }\n                    vuelidate.redirect_uri.$model = value.join(',');\n                }\"\n            >\n                <template #label>\n                    {{ translationsDefault.redirectUris }}\n                </template>\n            </AFormInputList>\n            <small>{{ translationsClient.redirectURIHint }}</small>\n\n            <hr>\n\n            <IVuelidate :validation=\"vuelidate.description\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            {{ translationsDefault.description }}\n                        </template>\n                        <VCFormTextarea\n                            v-model=\"vuelidate.description.$model\"\n                            rows=\"7\"\n                        />\n                    </VCFormGroup>\n\n                    <small>{{ translationsClient.descriptionHint }}</small>\n                </template>\n            </IVuelidate>\n\n            <hr>\n\n            <div>\n                <AFormSubmit\n                    :is-busy=\"isBusy\"\n                    :is-editing=\"isEditing\"\n                    :is-invalid=\"vuelidate.$invalid\"\n                    @submit=\"submit\"\n                />\n            </div>\n        </div>\n    </div>\n</template>\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { Client } from '@authup/core-kit';\nimport type { EntityCollectionVSlots } from '../../utility';\nimport {\n    defineEntityCollectionManager,\n    defineEntityCollectionVEmitOptions,\n    defineEntityCollectionVProps,\n} from '../../utility';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    TranslatorTranslationVuecsKey,\n    useTranslation,\n} from '../../../core';\n\nexport const AClients = defineComponent({\n    props: defineEntityCollectionVProps<Client>(),\n    emits: defineEntityCollectionVEmitOptions<Client>(),\n    slots: Object as SlotsType<EntityCollectionVSlots<Client>>,\n    setup(props, ctx) {\n        const { render } = defineEntityCollectionManager({\n            type: `${EntityType.CLIENT}`,\n            props,\n            setup: ctx,\n        });\n\n        const translationName = useTranslation({\n            group: TranslatorTranslationGroup.DEFAULT,\n            key: TranslatorTranslationDefaultKey.CLIENTS,\n        });\n\n        const translation = useTranslation({\n            group: TranslatorTranslationGroup.VUECS,\n            key: TranslatorTranslationVuecsKey.NO_MORE,\n            data: { name: translationName },\n        });\n\n        return () => render({ noMore: { content: translation.value } });\n    },\n});\n\nexport default AClients;\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityPicker,\n    defineEntityPickerVEmitOptions,\n    defineEntityPickerVProps,\n} from '../../utility/entity/picker/module';\nimport type { EntityPickerVSlots } from '../../utility/entity/picker/types';\nimport { AClients } from './AClients';\n\nexport const AClientPicker = defineComponent({\n    props: defineEntityPickerVProps<Client>(),\n    emits: defineEntityPickerVEmitOptions<Client>(),\n    slots: Object as SlotsType<EntityPickerVSlots<Client>>,\n    setup(props, setup) {\n        const { render } = defineEntityPicker({\n            component: AClients,\n            props,\n            setup,\n        });\n\n        return () => render();\n    },\n});\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { Permission } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { EntityVSlots } from '../../utility';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n    defineEntityVProps,\n} from '../../utility';\n\nexport const APermission = defineComponent({\n    props: defineEntityVProps<Permission>(),\n    emits: defineEntityVEmitOptions<Permission>(),\n    slots: Object as SlotsType<EntityVSlots<Permission>>,\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.PERMISSION}`,\n            setup,\n            props,\n        });\n\n        try {\n            await manager.resolveOrFail();\n\n            return () => manager.render();\n        } catch (e) {\n            return () => manager.renderError(e);\n        }\n    },\n});\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PermissionEvaluationOptions } from '@authup/access';\nimport { PolicyData } from '@authup/access';\nimport { SlotName } from '@vuecs/list-controls';\nimport type { PropType } from 'vue';\nimport { computed, defineComponent } from 'vue';\nimport { createPermissionCheckerReactiveFn, hasNormalizedSlot, normalizeSlot } from '../../../core';\n\nexport const APermissionCheck = defineComponent({\n    props: {\n        name: {\n            type: [String, Array] as PropType<string | string[]>,\n            required: true,\n        },\n        input: { type: Object as PropType<Record<string, any>> },\n        options: { type: Object as PropType<PermissionEvaluationOptions> },\n    },\n    setup(props, { slots }) {\n        const fn = createPermissionCheckerReactiveFn();\n\n        const isPermitted = computed(() => fn({\n            name: props.name,\n            input: new PolicyData(props.input),\n            options: props.options,\n        }));\n\n        return () => {\n            if (\n                isPermitted.value &&\n                hasNormalizedSlot(SlotName.DEFAULT, slots)\n            ) {\n                return normalizeSlot(SlotName.DEFAULT, {}, slots);\n            }\n\n            return [];\n        };\n    },\n});\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Permission } from '@authup/core-kit';\nimport { EntityType } from '@authup/core-kit';\nimport { DecisionStrategy } from '@authup/kit';\nimport useVuelidate from '@vuelidate/core';\nimport type { PropType, VNodeArrayChildren } from 'vue';\nimport {\n    computed,\n    defineComponent,\n    h,\n    reactive,\n    ref,\n    watch,\n} from 'vue';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport type { FormSelectOption } from '@vuecs/form-controls';\nimport { \n    buildFormGroup, \n    buildFormInput, \n    buildFormSelect, \n    buildFormTextarea, \n} from '@vuecs/form-controls';\nimport { useIsEditing, useUpdatedAt } from '../../../composables';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    VuelidateCustomRule,\n    VuelidateCustomRuleKey,\n    assignFormProperties,\n    buildFormSubmitWithTranslations,\n    createFormSubmitTranslations,\n    getVuelidateSeverity,\n    injectStore,\n    storeToRefs,\n    useTranslationsForGroup,\n    useTranslationsForNestedValidation,\n} from '../../../core';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport { ARealmPicker } from '../realm';\n\nfunction decisionStrategyHint(value: string) : string {\n    switch (value) {\n        case DecisionStrategy.AFFIRMATIVE:\n            return 'At least one policy must evaluate positively.';\n        case DecisionStrategy.CONSENSUS:\n            return 'More policies must evaluate positively than negatively.';\n        case DecisionStrategy.UNANIMOUS:\n            return 'All policies must evaluate positively.';\n        default:\n            return 'No strategy selected. Defaults to unanimous (all policies must evaluate positively).';\n    }\n}\n\nexport const APermissionForm = defineComponent({\n    props: { entity: { type: Object as PropType<Permission> } },\n    emits: defineEntityVEmitOptions<Permission>(),\n    setup(props, ctx) {\n        const busy = ref(false);\n\n        const form = reactive({\n            name: '',\n            display_name: '',\n            description: '',\n            decision_strategy: '',\n            realm_id: '',\n        });\n\n        const decisionStrategyOptions : FormSelectOption[] = Object.values(DecisionStrategy)\n            .map((value) => ({\n                id: value,\n                value,\n            }));\n\n        const $v = useVuelidate({\n            name: {\n                required,\n                minLength: minLength(3),\n                maxLength: maxLength(128),\n                [\n                VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT\n                ]: VuelidateCustomRule[VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT],\n            },\n            display_name: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            description: {\n                minLength: minLength(5),\n                maxLength: maxLength(4096),\n            },\n            decision_strategy: {},\n            realm_id: {},\n        }, form);\n\n        const store = injectStore();\n        const storeRefs = storeToRefs(store);\n\n        const manager = defineEntityManager({\n            type: `${EntityType.PERMISSION}`,\n            setup: ctx,\n            props,\n        });\n\n        const realmId = computed(() => {\n            if (!storeRefs.realmIsRoot) {\n                return storeRefs.realmId.value;\n            }\n\n            return manager.data.value ?\n                manager.data.value.realm_id :\n                null;\n        });\n\n        const isEditing = useIsEditing(manager.data);\n        const updatedAt = useUpdatedAt(props.entity);\n\n        function initForm() {\n            assignFormProperties(form, manager.data.value);\n\n            if (realmId.value) {\n                form.realm_id = realmId.value;\n            }\n        }\n\n        watch(updatedAt, (val, oldVal) => {\n            if (val && val !== oldVal) {\n                manager.data.value = props.entity;\n\n                initForm();\n            }\n        });\n\n        initForm();\n\n        const submit = async () => {\n            if ($v.value.$invalid) {\n                return;\n            }\n\n            const data : Record<string, any> = {\n                ...form,\n                decision_strategy: form.decision_strategy || null,\n            };\n\n            await manager.createOrUpdate(data);\n        };\n\n        const translationsValidation = useTranslationsForNestedValidation($v.value);\n        const translationsSubmit = createFormSubmitTranslations();\n\n        const translationsDefault = useTranslationsForGroup(\n            TranslatorTranslationGroup.DEFAULT,\n            [\n                { key: TranslatorTranslationDefaultKey.NAME },\n                { key: TranslatorTranslationDefaultKey.DISPLAY_NAME },\n                { key: TranslatorTranslationDefaultKey.DESCRIPTION },\n                { key: TranslatorTranslationDefaultKey.DECISION_STRATEGY },\n                { key: TranslatorTranslationDefaultKey.REALM },\n            ],\n        );\n\n        const render = () => {\n            const children : VNodeArrayChildren = [];\n\n            children.push(buildFormGroup({\n                validationMessages: translationsValidation.name.value,\n                validationSeverity: getVuelidateSeverity($v.value.name),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.NAME].value,\n                content: buildFormInput({\n                    value: $v.value.name.$model,\n                    onChange(input) {\n                        $v.value.name.$model = input;\n                    },\n                    props: {\n                        disabled: manager.data.value &&\n                            manager.data.value.built_in,\n                    },\n                }),\n            }));\n\n            children.push(buildFormGroup({\n                validationMessages: translationsValidation.display_name.value,\n                validationSeverity: getVuelidateSeverity($v.value.display_name),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.DISPLAY_NAME].value,\n                content: buildFormInput({\n                    value: $v.value.display_name.$model,\n                    onChange(input) {\n                        $v.value.display_name.$model = input;\n                    },\n                }),\n            }));\n\n            children.push(buildFormGroup({\n                validationMessages: translationsValidation.description.value,\n                validationSeverity: getVuelidateSeverity($v.value.description),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.DESCRIPTION].value,\n                content: buildFormTextarea({\n                    value: $v.value.description.$model,\n                    onChange(input) {\n                        $v.value.description.$model = input;\n                    },\n                    props: { rows: 4 },\n                }),\n            }));\n\n            children.push(buildFormGroup({\n                validationMessages: translationsValidation.decision_strategy.value,\n                validationSeverity: getVuelidateSeverity($v.value.decision_strategy),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.DECISION_STRATEGY].value,\n                content: [\n                    buildFormSelect({\n                        value: $v.value.decision_strategy.$model,\n                        onChange(input) {\n                            $v.value.decision_strategy.$model = input;\n                        },\n                        options: decisionStrategyOptions,\n                        optionDefault: true,\n                        optionDefaultValue: '-- None (default: unanimous) --',\n                    }),\n                    h('div', { class: 'alert alert-sm alert-info mt-1 mb-0' }, decisionStrategyHint($v.value.decision_strategy.$model)),\n                ],\n            }));\n\n            if (!realmId.value && !isEditing.value) {\n                children.push(buildFormGroup({\n                    validationMessages: translationsValidation.realm_id.value,\n                    validationSeverity: getVuelidateSeverity($v.value.realm_id),\n                    label: true,\n                    labelContent: translationsDefault[TranslatorTranslationDefaultKey.REALM].value,\n                    content: h(ARealmPicker, {\n                        value: $v.value.realm_id.$model,\n                        multiple: false,\n                        onChange(input: string[]) {\n                            $v.value.realm_id.$model = input.length > 0 ? input[0] ?? '' : '';\n                        },\n                    }),\n                }));\n            }\n\n            children.push(buildFormSubmitWithTranslations({\n                submit,\n                busy,\n                isEditing: isEditing.value,\n                invalid: $v.value.$invalid,\n            }, translationsSubmit));\n\n            return h('form', {\n                onSubmit($event: any) {\n                    $event.preventDefault();\n\n                    return submit.apply(null);\n                },\n            }, children);\n        };\n\n        return () => render();\n    },\n});\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport { EntityType } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { Permission } from '@authup/core-kit';\nimport type { EntityCollectionVSlots } from '../../utility';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    TranslatorTranslationVuecsKey,\n    useTranslation,\n} from '../../../core';\nimport {\n    defineEntityCollectionManager,\n    defineEntityCollectionVEmitOptions,\n    defineEntityCollectionVProps,\n} from '../../utility';\n\nexport const APermissions = defineComponent({\n    props: defineEntityCollectionVProps<Permission>(),\n    emits: defineEntityCollectionVEmitOptions<Permission>(),\n    slots: Object as SlotsType<EntityCollectionVSlots<Permission>>,\n    setup(props, setup) {\n        const { render } = defineEntityCollectionManager({\n            type: `${EntityType.PERMISSION}`,\n            props,\n            setup,\n        });\n\n        const translationName = useTranslation({\n            group: TranslatorTranslationGroup.DEFAULT,\n            key: TranslatorTranslationDefaultKey.PERMISSIONS,\n        });\n\n        const translation = useTranslation({\n            group: TranslatorTranslationGroup.VUECS,\n            key: TranslatorTranslationVuecsKey.NO_MORE,\n            data: { name: translationName },\n        });\n\n        return () => render({ noMore: { content: translation.value } });\n    },\n});\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport { EntityType } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { Policy } from '@authup/core-kit';\nimport type { EntityCollectionVSlots } from '../../utility';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    TranslatorTranslationVuecsKey,\n    useTranslation,\n} from '../../../core';\nimport {\n    defineEntityCollectionManager,\n    defineEntityCollectionVEmitOptions,\n    defineEntityCollectionVProps,\n} from '../../utility';\n\nexport const APolicies = defineComponent({\n    props: defineEntityCollectionVProps<Policy>(),\n    emits: defineEntityCollectionVEmitOptions<Policy>(),\n    slots: Object as SlotsType<EntityCollectionVSlots<Policy>>,\n    setup(props, setup) {\n        const { render } = defineEntityCollectionManager({\n            type: `${EntityType.POLICY}`,\n            props,\n            setup,\n        });\n\n        const translationName = useTranslation({\n            group: TranslatorTranslationGroup.DEFAULT,\n            key: TranslatorTranslationDefaultKey.POLICIES,\n        });\n\n        const translation = useTranslation({\n            group: TranslatorTranslationGroup.VUECS,\n            key: TranslatorTranslationVuecsKey.NO_MORE,\n            data: { name: translationName },\n        });\n\n        return () => render({ noMore: { content: translation.value } });\n    },\n});\n","<!--\n  Copyright (c) 2026.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { BuiltInPolicyType } from '@authup/access';\n\nconst typeLabels: Record<string, string> = {\n    [BuiltInPolicyType.COMPOSITE]: 'Composite',\n    [BuiltInPolicyType.DATE]: 'Date',\n    [BuiltInPolicyType.TIME]: 'Time',\n    [BuiltInPolicyType.ATTRIBUTE_NAMES]: 'Attr Names',\n    [BuiltInPolicyType.ATTRIBUTES]: 'Attributes',\n    [BuiltInPolicyType.REALM_MATCH]: 'Realm Match',\n    [BuiltInPolicyType.IDENTITY]: 'Identity',\n    [BuiltInPolicyType.PERMISSION_BINDING]: 'Perm Binding',\n};\n\nexport default defineComponent({\n    props: {\n        type: {\n            type: String,\n            required: true,\n        },\n    },\n    setup() {\n        return { typeLabels };\n    },\n});\n</script>\n<template>\n    <span class=\"badge bg-info\">{{ typeLabels[type] || type }}</span>\n</template>\n","<!--\n  Copyright (c) 2026.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { BuiltInPolicyType } from '@authup/access';\n\nconst typeLabels: Record<string, string> = {\n    [BuiltInPolicyType.COMPOSITE]: 'Composite',\n    [BuiltInPolicyType.DATE]: 'Date',\n    [BuiltInPolicyType.TIME]: 'Time',\n    [BuiltInPolicyType.ATTRIBUTE_NAMES]: 'Attr Names',\n    [BuiltInPolicyType.ATTRIBUTES]: 'Attributes',\n    [BuiltInPolicyType.REALM_MATCH]: 'Realm Match',\n    [BuiltInPolicyType.IDENTITY]: 'Identity',\n    [BuiltInPolicyType.PERMISSION_BINDING]: 'Perm Binding',\n};\n\nexport default defineComponent({\n    props: {\n        type: {\n            type: String,\n            required: true,\n        },\n    },\n    setup() {\n        return { typeLabels };\n    },\n});\n</script>\n<template>\n    <span class=\"badge bg-info\">{{ typeLabels[type] || type }}</span>\n</template>\n","<!--\n  Copyright (c) 2026.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n    props: {\n        policyId: {\n            type: String,\n            required: true,\n        },\n    },\n    emits: ['click'],\n    setup(props, { emit }) {\n        const handleClick = (e: Event) => {\n            e.preventDefault();\n            emit('click', props.policyId);\n        };\n\n        return { handleClick };\n    },\n});\n</script>\n<template>\n    <button\n        type=\"button\"\n        class=\"btn btn-xs btn-outline-info\"\n        title=\"View policy details\"\n        aria-label=\"View policy details\"\n        @click=\"handleClick\"\n    >\n        <i class=\"fa fa-eye\" />\n    </button>\n</template>\n","<!--\n  Copyright (c) 2026.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n    props: {\n        policyId: {\n            type: String,\n            required: true,\n        },\n    },\n    emits: ['click'],\n    setup(props, { emit }) {\n        const handleClick = (e: Event) => {\n            e.preventDefault();\n            emit('click', props.policyId);\n        };\n\n        return { handleClick };\n    },\n});\n</script>\n<template>\n    <button\n        type=\"button\"\n        class=\"btn btn-xs btn-outline-info\"\n        title=\"View policy details\"\n        aria-label=\"View policy details\"\n        @click=\"handleClick\"\n    >\n        <i class=\"fa fa-eye\" />\n    </button>\n</template>\n","<!--\n  Copyright (c) 2026.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport type { Policy } from '@authup/core-kit';\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport APolicyTypeBadge from './APolicyTypeBadge.vue';\nimport APolicyDetailNav from './APolicyDetailNav.vue';\n\nexport default defineComponent({\n    components: { APolicyTypeBadge, APolicyDetailNav },\n    props: {\n        entity: {\n            type: Object as PropType<Policy>,\n            required: true,\n        },\n    },\n    emits: ['detail'],\n    setup(props, { emit }) {\n        const handleDetail = () => {\n            emit('detail', props.entity);\n        };\n\n        return { handleDetail };\n    },\n});\n</script>\n<template>\n    <APolicyTypeBadge :type=\"entity.type\" />\n    <span\n        v-if=\"entity.invert\"\n        class=\"badge bg-warning\"\n    >Inverted</span>\n    <APolicyDetailNav\n        :policy-id=\"entity.id\"\n        @click=\"handleDetail\"\n    />\n</template>\n","<!--\n  Copyright (c) 2026.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport type { Policy } from '@authup/core-kit';\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport APolicyTypeBadge from './APolicyTypeBadge.vue';\nimport APolicyDetailNav from './APolicyDetailNav.vue';\n\nexport default defineComponent({\n    components: { APolicyTypeBadge, APolicyDetailNav },\n    props: {\n        entity: {\n            type: Object as PropType<Policy>,\n            required: true,\n        },\n    },\n    emits: ['detail'],\n    setup(props, { emit }) {\n        const handleDetail = () => {\n            emit('detail', props.entity);\n        };\n\n        return { handleDetail };\n    },\n});\n</script>\n<template>\n    <APolicyTypeBadge :type=\"entity.type\" />\n    <span\n        v-if=\"entity.invert\"\n        class=\"badge bg-warning\"\n    >Inverted</span>\n    <APolicyDetailNav\n        :policy-id=\"entity.id\"\n        @click=\"handleDetail\"\n    />\n</template>\n","<!--\n  Copyright (c) 2026.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport type { Policy } from '@authup/core-kit';\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport APolicyTypeBadge from './APolicyTypeBadge.vue';\n\nexport default defineComponent({\n    components: { APolicyTypeBadge },\n    props: {\n        entity: {\n            type: Object as PropType<Policy>,\n            required: true,\n        },\n    },\n});\n</script>\n<template>\n    <div>\n        <div class=\"d-flex flex-row gap-2 mb-2\">\n            <strong style=\"min-width: 120px\">Name</strong>\n            <div>{{ entity.name }}</div>\n        </div>\n        <div class=\"d-flex flex-row gap-2 mb-2\">\n            <strong style=\"min-width: 120px\">Type</strong>\n            <div>\n                <APolicyTypeBadge :type=\"entity.type\" />\n            </div>\n        </div>\n        <div\n            v-if=\"entity.display_name\"\n            class=\"d-flex flex-row gap-2 mb-2\"\n        >\n            <strong style=\"min-width: 120px\">Display Name</strong>\n            <div>{{ entity.display_name }}</div>\n        </div>\n        <div\n            v-if=\"entity.description\"\n            class=\"d-flex flex-row gap-2 mb-2\"\n        >\n            <strong style=\"min-width: 120px\">Description</strong>\n            <div>{{ entity.description }}</div>\n        </div>\n        <div\n            v-if=\"entity.invert\"\n            class=\"d-flex flex-row gap-2 mb-2\"\n        >\n            <strong style=\"min-width: 120px\">Invert</strong>\n            <div>\n                <span class=\"badge bg-warning\">Yes</span>\n            </div>\n        </div>\n        <div\n            v-if=\"entity.built_in\"\n            class=\"d-flex flex-row gap-2 mb-2\"\n        >\n            <strong style=\"min-width: 120px\">Built-in</strong>\n            <div>\n                <span class=\"badge bg-secondary\">Yes</span>\n            </div>\n        </div>\n    </div>\n</template>\n","<!--\n  Copyright (c) 2026.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport type { Policy } from '@authup/core-kit';\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport APolicyTypeBadge from './APolicyTypeBadge.vue';\n\nexport default defineComponent({\n    components: { APolicyTypeBadge },\n    props: {\n        entity: {\n            type: Object as PropType<Policy>,\n            required: true,\n        },\n    },\n});\n</script>\n<template>\n    <div>\n        <div class=\"d-flex flex-row gap-2 mb-2\">\n            <strong style=\"min-width: 120px\">Name</strong>\n            <div>{{ entity.name }}</div>\n        </div>\n        <div class=\"d-flex flex-row gap-2 mb-2\">\n            <strong style=\"min-width: 120px\">Type</strong>\n            <div>\n                <APolicyTypeBadge :type=\"entity.type\" />\n            </div>\n        </div>\n        <div\n            v-if=\"entity.display_name\"\n            class=\"d-flex flex-row gap-2 mb-2\"\n        >\n            <strong style=\"min-width: 120px\">Display Name</strong>\n            <div>{{ entity.display_name }}</div>\n        </div>\n        <div\n            v-if=\"entity.description\"\n            class=\"d-flex flex-row gap-2 mb-2\"\n        >\n            <strong style=\"min-width: 120px\">Description</strong>\n            <div>{{ entity.description }}</div>\n        </div>\n        <div\n            v-if=\"entity.invert\"\n            class=\"d-flex flex-row gap-2 mb-2\"\n        >\n            <strong style=\"min-width: 120px\">Invert</strong>\n            <div>\n                <span class=\"badge bg-warning\">Yes</span>\n            </div>\n        </div>\n        <div\n            v-if=\"entity.built_in\"\n            class=\"d-flex flex-row gap-2 mb-2\"\n        >\n            <strong style=\"min-width: 120px\">Built-in</strong>\n            <div>\n                <span class=\"badge bg-secondary\">Yes</span>\n            </div>\n        </div>\n    </div>\n</template>\n","/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { EntityTypeMap, PermissionRelation, Policy } from '@authup/core-kit';\nimport type { PropType } from 'vue';\nimport {\n    Teleport,\n    defineComponent,\n    h,\n    onMounted,\n    onUnmounted,\n    ref,\n    toRef,\n    watch,\n} from 'vue';\nimport { SlotName } from '@vuecs/list-controls';\nimport { hasOwnProperty } from '@authup/kit';\nimport { injectHTTPClient } from '../../../core';\nimport { APolicies } from '../policy/APolicies';\nimport APolicyInlineInfo from '../policy/APolicyInlineInfo.vue';\nimport APolicySummary from '../policy/APolicySummary.vue';\n\ntype PermissionBindingEntity = PermissionRelation & { id: string };\n\nexport const APermissionPolicyBindingButton = defineComponent({\n    props: {\n        entityType: {\n            type: String as PropType<keyof EntityTypeMap>,\n            required: true,\n        },\n        entity: {\n            type: Object as PropType<PermissionBindingEntity>,\n            required: true,\n        },\n    },\n    emits: ['updated', 'failed'],\n    setup(props, { emit }) {\n        const client = injectHTTPClient();\n\n        const modalOpen = ref(false);\n        const busy = ref(false);\n        const currentPolicyId = ref<string | null>(props.entity.policy_id);\n        const detailPolicy = ref<Policy | null>(null);\n\n        const entityRef = toRef(props, 'entity');\n        watch(entityRef, (val) => {\n            currentPolicyId.value = val.policy_id;\n        }, { deep: true });\n\n        const handleKeydown = (e: KeyboardEvent) => {\n            if (e.key === 'Escape') {\n                if (detailPolicy.value) {\n                    detailPolicy.value = null;\n                } else if (modalOpen.value) {\n                    modalOpen.value = false;\n                }\n            }\n        };\n\n        onMounted(() => {\n            document.addEventListener('keydown', handleKeydown);\n        });\n\n        onUnmounted(() => {\n            document.removeEventListener('keydown', handleKeydown);\n        });\n\n        const handlePolicySelect = async (policyId: string | null) => {\n            if (busy.value) return;\n\n            const api = hasOwnProperty(client, props.entityType) ?\n                client[props.entityType] as any :\n                undefined;\n\n            if (!api || !api.update) return;\n\n            busy.value = true;\n            try {\n                const response = await api.update(props.entity.id, { policy_id: policyId });\n                currentPolicyId.value = policyId;\n                emit('updated', response);\n            } catch (e) {\n                if (e instanceof Error) {\n                    emit('failed', e);\n                }\n            } finally {\n                busy.value = false;\n            }\n        };\n\n        const modalTitleId = `policy-modal-title-${props.entity.id}`;\n\n        return () => {\n            const children = [];\n\n            children.push(h('button', {\n                class: ['btn btn-xs', {\n                    'btn-dark': busy.value,\n                    'btn-primary': !busy.value && currentPolicyId.value,\n                    'btn-secondary': !busy.value && !currentPolicyId.value,\n                }],\n                disabled: busy.value,\n                onClick(e: Event) {\n                    e.preventDefault();\n                    modalOpen.value = true;\n                },\n            }, [\n                h('i', { class: 'fa fa-cog' }),\n            ]));\n\n            if (modalOpen.value) {\n                const backdrop = h('div', {\n                    class: 'modal-backdrop fade show',\n                    onClick() {\n                        if (detailPolicy.value) {\n                            detailPolicy.value = null;\n                        } else {\n                            modalOpen.value = false;\n                        }\n                    },\n                });\n\n                let modalTitle: string;\n                let modalBody;\n                let modalFooter;\n\n                if (detailPolicy.value) {\n                    const policy = detailPolicy.value;\n                    modalTitle = policy.name;\n                    modalBody = h(APolicySummary, { entity: policy });\n                    modalFooter = [\n                        h('button', {\n                            type: 'button',\n                            class: 'btn btn-outline-secondary btn-xs',\n                            onClick() {\n                                detailPolicy.value = null;\n                            },\n                        }, [\n                            h('i', { class: 'fa fa-arrow-left me-1' }),\n                            'Back',\n                        ]),\n                    ];\n                } else {\n                    modalTitle = 'Junction Policy';\n                    modalBody = h(APolicies, { query: { filters: { parent_id: null } } }, {\n                        [SlotName.ITEM]: (slotProps: { data: Policy }) => {\n                            const isSelected = currentPolicyId.value === slotProps.data.id;\n\n                            return [\n                                h('div', [slotProps.data.name]),\n                                h(APolicyInlineInfo, {\n                                    entity: slotProps.data,\n                                    onDetail: (policy: Policy) => {\n                                        detailPolicy.value = policy;\n                                    },\n                                }),\n                                h('div', { class: 'ms-auto' }, [\n                                    h('button', {\n                                        class: ['btn btn-xs', {\n                                            'btn-dark': busy.value,\n                                            'btn-success': !busy.value && isSelected,\n                                            'btn-secondary': !busy.value && !isSelected,\n                                        }],\n                                        disabled: busy.value,\n                                        onClick(e: Event) {\n                                            e.preventDefault();\n                                            if (isSelected) {\n                                                handlePolicySelect(null);\n                                            } else {\n                                                handlePolicySelect(slotProps.data.id);\n                                            }\n                                        },\n                                    }, [\n                                        h('i', {\n                                            class: ['fa', {\n                                                'fa-check': isSelected,\n                                                'fa-plus': !isSelected,\n                                            }],\n                                        }),\n                                    ]),\n                                ]),\n                            ];\n                        },\n                    });\n                    modalFooter = [\n                        currentPolicyId.value ?\n                            h('button', {\n                                type: 'button',\n                                class: 'btn btn-warning btn-xs',\n                                disabled: busy.value,\n                                onClick() {\n                                    handlePolicySelect(null);\n                                },\n                            }, 'Reset') :\n                            undefined,\n                        h('button', {\n                            type: 'button',\n                            class: 'btn btn-secondary btn-xs',\n                            onClick() {\n                                modalOpen.value = false;\n                            },\n                        }, 'Close'),\n                    ];\n                }\n\n                const modal = h('div', {\n                    class: 'modal fade show d-block',\n                    tabindex: '-1',\n                    role: 'dialog',\n                    'aria-modal': 'true',\n                    'aria-labelledby': modalTitleId,\n                }, [\n                    h('div', {\n                        class: 'modal-dialog',\n                        role: 'document',\n                        onClick(e: Event) {\n                            e.stopPropagation();\n                        },\n                    }, [\n                        h('div', { class: 'modal-content' }, [\n                            h('div', { class: 'modal-header' }, [\n                                h('h5', { class: 'modal-title', id: modalTitleId }, modalTitle),\n                                h('button', {\n                                    type: 'button',\n                                    class: 'btn-close',\n                                    'aria-label': 'Close',\n                                    onClick() {\n                                        if (detailPolicy.value) {\n                                            detailPolicy.value = null;\n                                        } else {\n                                            modalOpen.value = false;\n                                        }\n                                    },\n                                }),\n                            ]),\n                            h('div', { class: 'modal-body' }, [modalBody]),\n                            h('div', { class: 'modal-footer' }, modalFooter),\n                        ]),\n                    ]),\n                ]);\n\n                children.push(h(Teleport, { to: 'body' }, [backdrop, modal]));\n            }\n\n            return h('span', children);\n        };\n    },\n});\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { ClientPermission } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\nimport { APermissionPolicyBindingButton } from '../permission-policy-binding';\n\nexport default defineComponent({\n    components: { AToggleButton, APermissionPolicyBindingButton },\n    props: {\n        clientId: { type: String, required: true },\n        permissionId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<ClientPermission>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.CLIENT_PERMISSION}`,\n            setup,\n            query: () => ({\n                filters: {\n                    client_id: props.clientId,\n                    permission_id: props.permissionId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.permission_id === props.permissionId &&\n                        event.data.client_id === props.clientId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    client_id: props.clientId,\n                    permission_id: props.permissionId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    client_id: props.clientId,\n                    permission_id: props.permissionId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        const handleUpdated = (entity: ClientPermission) => {\n            manager.updated(entity);\n        };\n\n        return {\n            manager,\n            handleChanged,\n            handleUpdated,\n            EntityType,\n        };\n    },\n});\n</script>\n<template>\n    <span class=\"d-flex gap-1\">\n        <AToggleButton\n            :value=\"!!manager.data.value\"\n            :is-busy=\"manager.busy.value\"\n            @changed=\"handleChanged\"\n        />\n        <APermissionPolicyBindingButton\n            v-if=\"manager.data.value\"\n            :key=\"manager.data.value.id\"\n            :entity-type=\"EntityType.CLIENT_PERMISSION\"\n            :entity=\"manager.data.value\"\n            @updated=\"handleUpdated\"\n        />\n    </span>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { ClientPermission } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\nimport { APermissionPolicyBindingButton } from '../permission-policy-binding';\n\nexport default defineComponent({\n    components: { AToggleButton, APermissionPolicyBindingButton },\n    props: {\n        clientId: { type: String, required: true },\n        permissionId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<ClientPermission>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.CLIENT_PERMISSION}`,\n            setup,\n            query: () => ({\n                filters: {\n                    client_id: props.clientId,\n                    permission_id: props.permissionId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.permission_id === props.permissionId &&\n                        event.data.client_id === props.clientId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    client_id: props.clientId,\n                    permission_id: props.permissionId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    client_id: props.clientId,\n                    permission_id: props.permissionId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        const handleUpdated = (entity: ClientPermission) => {\n            manager.updated(entity);\n        };\n\n        return {\n            manager,\n            handleChanged,\n            handleUpdated,\n            EntityType,\n        };\n    },\n});\n</script>\n<template>\n    <span class=\"d-flex gap-1\">\n        <AToggleButton\n            :value=\"!!manager.data.value\"\n            :is-busy=\"manager.busy.value\"\n            @changed=\"handleChanged\"\n        />\n        <APermissionPolicyBindingButton\n            v-if=\"manager.data.value\"\n            :key=\"manager.data.value.id\"\n            :entity-type=\"EntityType.CLIENT_PERMISSION\"\n            :entity=\"manager.data.value\"\n            @updated=\"handleUpdated\"\n        />\n    </span>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { APermissions } from '../permission';\nimport AClientPermissionAssignment from './AClientPermissionAssignment.vue';\n\nexport default defineComponent({\n    components: { APermissions, AClientPermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <APermissions>\n        <template #itemActions=\"{ data }\">\n            <AClientPermissionAssignment\n                :key=\"data.id\"\n                :client-id=\"entityId\"\n                :permission-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </APermissions>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { APermissions } from '../permission';\nimport AClientPermissionAssignment from './AClientPermissionAssignment.vue';\n\nexport default defineComponent({\n    components: { APermissions, AClientPermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <APermissions>\n        <template #itemActions=\"{ data }\">\n            <AClientPermissionAssignment\n                :key=\"data.id\"\n                :client-id=\"entityId\"\n                :permission-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </APermissions>\n</template>\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport useVuelidate from '@vuelidate/core';\nimport type { PropType, VNodeArrayChildren } from 'vue';\nimport {\n    computed, \n    defineComponent, \n    h, \n    reactive, \n    ref, \n    watch,\n} from 'vue';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport type { Role } from '@authup/core-kit';\nimport {\n    buildFormGroup,\n    buildFormInput,\n    buildFormTextarea,\n} from '@vuecs/form-controls';\nimport { useIsEditing, useUpdatedAt } from '../../../composables';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    VuelidateCustomRule,\n    VuelidateCustomRuleKey,\n    assignFormProperties,\n    buildFormSubmitWithTranslations,\n    createFormSubmitTranslations,\n    getVuelidateSeverity,\n    injectStore,\n    storeToRefs,\n    useTranslationsForGroup,\n    useTranslationsForNestedValidation,\n} from '../../../core';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport { ARealmPicker } from '../realm';\n\nexport const ARoleForm = defineComponent({\n    props: {\n        entity: {\n            type: Object as PropType<Role>,\n            default: undefined,\n        },\n    },\n    emits: defineEntityVEmitOptions<Role>(),\n    setup(props, ctx) {\n        const busy = ref(false);\n        const form = reactive({\n            name: '',\n            display_name: '',\n            description: '',\n            realm_id: '',\n        });\n\n        const $v = useVuelidate({\n            name: {\n                required,\n                minLength: minLength(3),\n                maxLength: maxLength(30),\n                [\n                VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT\n                ]: VuelidateCustomRule[VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT],\n            },\n            display_name: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            description: {\n                minLength: minLength(5),\n                maxLength: maxLength(4096),\n            },\n            realm_id: {},\n        }, form);\n\n        const store = injectStore();\n        const storeRefs = storeToRefs(store);\n\n        const manager = defineEntityManager({\n            type: `${EntityType.ROLE}`,\n            setup: ctx,\n            props,\n        });\n\n        const realmId = computed(() => {\n            if (!storeRefs.realmIsRoot) {\n                return storeRefs.realmId.value;\n            }\n\n            return manager.data.value ?\n                manager.data.value.realm_id :\n                null;\n        });\n\n        const isEditing = useIsEditing(manager.data);\n        const updatedAt = useUpdatedAt(props.entity);\n\n        function initForm() {\n            assignFormProperties(form, manager.data.value);\n        }\n\n        watch(updatedAt, (val, oldVal) => {\n            if (val && val !== oldVal) {\n                manager.data.value = props.entity;\n\n                initForm();\n            }\n        });\n\n        initForm();\n\n        const submit = async () => {\n            if ($v.value.$invalid) {\n                return;\n            }\n\n            await manager.createOrUpdate(form);\n        };\n\n        const translationsValidation = useTranslationsForNestedValidation($v.value);\n        const translationsSubmit = createFormSubmitTranslations();\n\n        const translationsDefault = useTranslationsForGroup(\n            TranslatorTranslationGroup.DEFAULT,\n            [\n                { key: TranslatorTranslationDefaultKey.NAME },\n                { key: TranslatorTranslationDefaultKey.DISPLAY_NAME },\n                { key: TranslatorTranslationDefaultKey.DESCRIPTION },\n                { key: TranslatorTranslationDefaultKey.REALM },\n            ],\n        );\n\n        const render = () => {\n            const children : VNodeArrayChildren = [];\n\n            children.push(buildFormGroup({\n                validationMessages: translationsValidation.name.value,\n                validationSeverity: getVuelidateSeverity($v.value.name),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.NAME].value,\n                content: buildFormInput({\n                    value: $v.value.name.$model,\n                    onChange(input) {\n                        $v.value.name.$model = input;\n                    },\n                }),\n            }));\n\n            children.push(buildFormGroup({\n                validationMessages: translationsValidation.display_name.value,\n                validationSeverity: getVuelidateSeverity($v.value.display_name),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.DISPLAY_NAME].value,\n                content: buildFormInput({\n                    value: $v.value.display_name.$model,\n                    onChange(input) {\n                        $v.value.display_name.$model = input;\n                    },\n                }),\n            }));\n\n            children.push(buildFormGroup({\n                validationMessages: translationsValidation.description.value,\n                validationSeverity: getVuelidateSeverity($v.value.description),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.DESCRIPTION].value,\n                content: buildFormTextarea({\n                    value: $v.value.description.$model,\n                    onChange(input) {\n                        $v.value.description.$model = input;\n                    },\n                    props: { rows: 6 },\n                }),\n            }));\n\n            if (!realmId.value && !isEditing.value) {\n                children.push(\n                    buildFormGroup({\n                        validationMessages: translationsValidation.realm_id.value,\n                        validationSeverity: getVuelidateSeverity($v.value.realm_id),\n                        label: true,\n                        labelContent: translationsDefault[TranslatorTranslationDefaultKey.REALM].value,\n                        content: h(ARealmPicker, {\n                            value: $v.value.realm_id.$model,\n                            onChange: (input: string[]) => {\n                                $v.value.realm_id.$model = input.length > 0 ? input[0] ?? '' : '';\n                            },\n                        }),\n                    }),\n                );\n            }\n\n            children.push(buildFormSubmitWithTranslations({\n                submit,\n                busy,\n                isEditing: isEditing.value,\n                invalid: $v.value.$invalid,\n            }, translationsSubmit));\n\n            return h('form', {\n                onSubmit($event: any) {\n                    $event.preventDefault();\n\n                    return submit.apply(null);\n                },\n            }, children);\n        };\n\n        return () => render();\n    },\n});\n\nexport default ARoleForm;\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { Role } from '@authup/core-kit';\nimport type { EntityCollectionVSlots } from '../../utility';\nimport {\n    defineEntityCollectionManager,\n    defineEntityCollectionVEmitOptions,\n    defineEntityCollectionVProps,\n} from '../../utility';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    TranslatorTranslationVuecsKey,\n    useTranslation,\n} from '../../../core';\n\nexport const ARoles = defineComponent({\n    props: defineEntityCollectionVProps<Role>(),\n    emits: defineEntityCollectionVEmitOptions<Role>(),\n    slots: Object as SlotsType<EntityCollectionVSlots<Role>>,\n    setup(props, ctx) {\n        const { render } = defineEntityCollectionManager({\n            type: `${EntityType.ROLE}`,\n            props,\n            setup: ctx,\n        });\n\n        const translationName = useTranslation({\n            group: TranslatorTranslationGroup.VUECS,\n            key: TranslatorTranslationDefaultKey.ROLES,\n        });\n\n        const translation = useTranslation({\n            group: TranslatorTranslationGroup.VUECS,\n            key: TranslatorTranslationVuecsKey.NO_MORE,\n            data: { name: translationName },\n        });\n\n        return () => render({ noMore: { content: translation.value } });\n    },\n});\n\nexport default ARoles;\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { Role } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { EntityVSlots } from '../../utility';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n    defineEntityVProps,\n} from '../../utility';\n\nexport const ARole = defineComponent({\n    props: defineEntityVProps<Role>(),\n    emits: defineEntityVEmitOptions<Role>(),\n    slots: Object as SlotsType<EntityVSlots<Role>>,\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.ROLE}`,\n            props,\n            setup,\n        });\n\n        try {\n            await manager.resolveOrFail();\n\n            return () => manager.render();\n        } catch (e) {\n            return () => manager.renderError(e);\n        }\n    },\n});\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { ClientRole } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\n\nexport default defineComponent({\n    components: { AToggleButton },\n    props: {\n        roleId: { type: String, required: true },\n        clientId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<ClientRole>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.CLIENT_ROLE}`,\n            setup,\n            query: () => ({\n                filters: {\n                    client_id: props.clientId,\n                    role_id: props.roleId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.client_id === props.clientId &&\n                        event.data.role_id === props.roleId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    client_id: props.clientId,\n                    role_id: props.roleId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    client_id: props.clientId,\n                    role_id: props.roleId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        return {\n            manager,\n            handleChanged,\n        };\n    },\n});\n</script>\n<template>\n    <AToggleButton\n        :value=\"!!manager.data.value\"\n        :is-busy=\"manager.busy.value\"\n        @changed=\"handleChanged\"\n    />\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { ClientRole } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\n\nexport default defineComponent({\n    components: { AToggleButton },\n    props: {\n        roleId: { type: String, required: true },\n        clientId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<ClientRole>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.CLIENT_ROLE}`,\n            setup,\n            query: () => ({\n                filters: {\n                    client_id: props.clientId,\n                    role_id: props.roleId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.client_id === props.clientId &&\n                        event.data.role_id === props.roleId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    client_id: props.clientId,\n                    role_id: props.roleId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    client_id: props.clientId,\n                    role_id: props.roleId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        return {\n            manager,\n            handleChanged,\n        };\n    },\n});\n</script>\n<template>\n    <AToggleButton\n        :value=\"!!manager.data.value\"\n        :is-busy=\"manager.busy.value\"\n        @changed=\"handleChanged\"\n    />\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { ARoles } from '../role';\nimport AClientRoleAssignment from './AClientRoleAssignment.vue';\n\nexport default defineComponent({\n    components: { ARoles, AClientRoleAssignment },\n    props: {\n        entityId: { type: String, required: true },\n        realmId: String,\n    },\n    setup(props, { slots }) {\n        const query = computed(() => ({ filters: { realm_id: [...(props.realmId ? [props.realmId] : []), null] } }));\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n\n        return { query, forwardedSlots };\n    },\n});\n</script>\n<template>\n    <ARoles :query=\"query\">\n        <template #itemActions=\"{ data }\">\n            <AClientRoleAssignment\n                :key=\"data.id\"\n                :client-id=\"entityId\"\n                :role-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </ARoles>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { ARoles } from '../role';\nimport AClientRoleAssignment from './AClientRoleAssignment.vue';\n\nexport default defineComponent({\n    components: { ARoles, AClientRoleAssignment },\n    props: {\n        entityId: { type: String, required: true },\n        realmId: String,\n    },\n    setup(props, { slots }) {\n        const query = computed(() => ({ filters: { realm_id: [...(props.realmId ? [props.realmId] : []), null] } }));\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n\n        return { query, forwardedSlots };\n    },\n});\n</script>\n<template>\n    <ARoles :query=\"query\">\n        <template #itemActions=\"{ data }\">\n            <AClientRoleAssignment\n                :key=\"data.id\"\n                :client-id=\"entityId\"\n                :role-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </ARoles>\n</template>\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { ClientScope } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { EntityVSlots } from '../../utility';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n    defineEntityVProps,\n} from '../../utility';\n\nexport const AClientScope = defineComponent({\n    props: defineEntityVProps<ClientScope>(),\n    emits: defineEntityVEmitOptions<ClientScope>(),\n    slots: Object as SlotsType<EntityVSlots<ClientScope>>,\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.CLIENT_SCOPE}`,\n            props,\n            setup,\n        });\n\n        try {\n            await manager.resolveOrFail();\n\n            return () => manager.render();\n        } catch (e) {\n            return () => manager.renderError(e);\n        }\n    },\n});\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { ClientScope } from '@authup/core-kit';\nimport type { EntityCollectionVSlots } from '../../utility';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    TranslatorTranslationVuecsKey,\n    useTranslation,\n} from '../../../core';\nimport {\n    defineEntityCollectionManager,\n    defineEntityCollectionVEmitOptions,\n    defineEntityCollectionVProps,\n} from '../../utility';\n\nexport const AClientScopes = defineComponent({\n    props: defineEntityCollectionVProps<ClientScope>(),\n    emits: defineEntityCollectionVEmitOptions<ClientScope>(),\n    slots: Object as SlotsType<EntityCollectionVSlots<ClientScope>>,\n    setup(props, ctx) {\n        const { render } = defineEntityCollectionManager({\n            type: `${EntityType.CLIENT_SCOPE}`,\n            props,\n            setup: ctx,\n        });\n\n        const translationClientScopes = useTranslation({\n            group: TranslatorTranslationGroup.DEFAULT,\n            key: TranslatorTranslationDefaultKey.CLIENT_SCOPES,\n        });\n\n        const translation = useTranslation({\n            group: TranslatorTranslationGroup.VUECS,\n            key: TranslatorTranslationVuecsKey.NO_MORE,\n            data: { name: translationClientScopes },\n        });\n\n        return () => render({ noMore: { content: translation.value } });\n    },\n});\n\nexport default AClientScopes;\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport useVuelidate from '@vuelidate/core';\nimport type {\n    PropType,\n    VNodeArrayChildren,\n} from 'vue';\nimport {\n    computed,\n    defineComponent,\n    h,\n    reactive,\n    ref,\n    watch,\n} from 'vue';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport type { Scope } from '@authup/core-kit';\nimport {\n    buildFormGroup,\n    buildFormInput,\n    buildFormTextarea,\n} from '@vuecs/form-controls';\nimport { useIsEditing, useUpdatedAt } from '../../../composables';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    VuelidateCustomRule,\n    VuelidateCustomRuleKey,\n    assignFormProperties,\n    buildFormSubmitWithTranslations,\n    createFormSubmitTranslations,\n    getVuelidateSeverity,\n    injectStore,\n    storeToRefs,\n    useTranslationsForGroup, \n    useTranslationsForNestedValidation,\n} from '../../../core';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport { ARealmPicker } from '../realm';\n\nexport const AScopeForm = defineComponent({\n    props: {\n        name: {\n            type: String,\n            default: undefined,\n        },\n        entity: { type: Object as PropType<Scope> },\n    },\n    emits: defineEntityVEmitOptions<Scope>(),\n    setup(props, ctx) {\n        const busy = ref(false);\n        const form = reactive({\n            name: '',\n            display_name: '',\n            description: '',\n            realm_id: '',\n        });\n\n        const $v = useVuelidate({\n            name: {\n                required,\n                [\n                VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT\n                ]: VuelidateCustomRule[VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT],\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            display_name: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            description: {\n                minLength: minLength(3),\n                maxLength: maxLength(4096),\n            },\n            realm_id: {},\n        }, form);\n\n        const store = injectStore();\n        const storeRefs = storeToRefs(store);\n\n        const manager = defineEntityManager({\n            type: `${EntityType.SCOPE}`,\n            setup: ctx,\n            props,\n        });\n\n        const realmId = computed(() => {\n            if (!storeRefs.realmIsRoot) {\n                return storeRefs.realmId.value;\n            }\n\n            return manager.data.value ?\n                manager.data.value.realm_id :\n                null;\n        });\n\n        const isEditing = useIsEditing(manager.data);\n        const updatedAt = useUpdatedAt(props.entity);\n\n        const isNameFixed = computed<boolean>(() => {\n            if (!!props.name && props.name.length > 0) {\n                return true;\n            }\n\n            return !!(manager.data.value && manager.data.value.built_in);\n        });\n\n        function initForm() {\n            if (props.name) {\n                form.name = props.name;\n            }\n\n            assignFormProperties(form, manager.data.value);\n        }\n\n        watch(updatedAt, (val, oldVal) => {\n            if (val && val !== oldVal) {\n                manager.data.value = props.entity;\n                initForm();\n            }\n        });\n\n        initForm();\n\n        const submit = async () => {\n            if ($v.value.$invalid) {\n                return;\n            }\n\n            await manager.createOrUpdate(form);\n        };\n\n        const translationsValidation = useTranslationsForNestedValidation($v.value);\n        const translationsSubmit = createFormSubmitTranslations();\n\n        const translationsDefault = useTranslationsForGroup(\n            TranslatorTranslationGroup.DEFAULT,\n            [\n                { key: TranslatorTranslationDefaultKey.NAME },\n                { key: TranslatorTranslationDefaultKey.DISPLAY_NAME },\n                { key: TranslatorTranslationDefaultKey.DESCRIPTION },\n                { key: TranslatorTranslationDefaultKey.REALM },\n            ],\n        );\n\n        return () => {\n            const children : VNodeArrayChildren = [\n                buildFormGroup({\n                    validationMessages: translationsValidation.name.value,\n                    validationSeverity: getVuelidateSeverity($v.value.name),\n                    label: true,\n                    labelContent: translationsDefault[TranslatorTranslationDefaultKey.NAME].value,\n                    content: buildFormInput({\n                        value: $v.value.name.$model,\n                        onChange(input) {\n                            $v.value.name.$model = input;\n                        },\n                        props: { disabled: isNameFixed.value },\n                    }),\n                }),\n                buildFormGroup({\n                    validationMessages: translationsValidation.display_name.value,\n                    validationSeverity: getVuelidateSeverity($v.value.display_name),\n                    label: true,\n                    labelContent: translationsDefault[TranslatorTranslationDefaultKey.DISPLAY_NAME].value,\n                    content: buildFormInput({\n                        value: $v.value.display_name.$model,\n                        onChange(input) {\n                            $v.value.display_name.$model = input;\n                        },\n                    }),\n                }),\n                buildFormGroup({\n                    validationMessages: translationsValidation.description.value,\n                    validationSeverity: getVuelidateSeverity($v.value.description),\n                    label: true,\n                    labelContent: translationsDefault[TranslatorTranslationDefaultKey.DESCRIPTION].value,\n                    content: buildFormTextarea({\n                        value: $v.value.description.$model,\n                        onChange(input) {\n                            $v.value.description.$model = input;\n                        },\n                        props: { rows: 7 },\n                    }),\n                }),\n            ];\n\n            if (\n                !realmId.value &&\n                !isNameFixed.value &&\n                !isEditing.value\n            ) {\n                children.push(buildFormGroup({\n                    validationMessages: translationsValidation.realm_id.value,\n                    validationSeverity: getVuelidateSeverity($v.value.realm_id),\n                    label: true,\n                    labelContent: translationsDefault[TranslatorTranslationDefaultKey.REALM].value,\n                    content: h(ARealmPicker, {\n                        value: $v.value.realm_id.$model,\n                        onChange: (input: string[]) => {\n                            $v.value.realm_id.$model = input.length > 0 ? input[0] ?? '' : '';\n                        },\n                    }),\n                }));\n            }\n\n            children.push(buildFormSubmitWithTranslations({\n                submit,\n                busy,\n                isEditing: isEditing.value,\n                invalid: $v.value.$invalid,\n            }, translationsSubmit));\n\n            return h('form', {\n                onSubmit($event: any) {\n                    $event.preventDefault();\n\n                    return submit.apply(null);\n                },\n            }, children);\n        };\n    },\n});\n\nexport default AScopeForm;\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { Scope } from '@authup/core-kit';\nimport type { EntityCollectionVSlots } from '../../utility';\nimport {\n    defineEntityCollectionManager,\n    defineEntityCollectionVEmitOptions,\n    defineEntityCollectionVProps,\n} from '../../utility';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    TranslatorTranslationVuecsKey,\n    useTranslation,\n} from '../../../core';\n\nexport const AScopes = defineComponent({\n    props: defineEntityCollectionVProps<Scope>(),\n    emits: defineEntityCollectionVEmitOptions<Scope>(),\n    slots: Object as SlotsType<EntityCollectionVSlots<Scope>>,\n    setup(props, ctx) {\n        const { render } = defineEntityCollectionManager({\n            type: EntityType.SCOPE,\n            props,\n            setup: ctx,\n        });\n\n        const translationName = useTranslation({\n            group: TranslatorTranslationGroup.DEFAULT,\n            key: TranslatorTranslationDefaultKey.SCOPES,\n        });\n\n        const translation = useTranslation({\n            group: TranslatorTranslationGroup.VUECS,\n            key: TranslatorTranslationVuecsKey.NO_MORE,\n            data: { name: translationName },\n        });\n\n        return () => render({ noMore: { content: translation.value } });\n    },\n});\n\nexport default AScopes;\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { Scope } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { EntityVSlots } from '../../utility';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n    defineEntityVProps,\n} from '../../utility';\n\nexport const AScope = defineComponent({\n    props: defineEntityVProps<Scope>(),\n    emits: defineEntityVEmitOptions<Scope>(),\n    slots: Object as SlotsType<EntityVSlots<Scope>>,\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.SCOPE}`,\n            props,\n            setup,\n        });\n\n        try {\n            await manager.resolveOrFail();\n\n            return () => manager.render();\n        } catch (e) {\n            return () => manager.renderError(e);\n        }\n    },\n});\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { ClientScope } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\n\nexport default defineComponent({\n    components: { AToggleButton },\n    props: {\n        clientId: { type: String, required: true },\n        scopeId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<ClientScope>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.CLIENT_SCOPE}`,\n            setup,\n            query: () => ({\n                filters: {\n                    client_id: props.clientId,\n                    scope_id: props.scopeId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.client_id === props.clientId &&\n                        event.data.scope_id === props.scopeId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    client_id: props.clientId,\n                    scope_id: props.scopeId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    client_id: props.clientId,\n                    scope_id: props.scopeId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        return {\n            manager,\n            handleChanged,\n        };\n    },\n});\n</script>\n<template>\n    <AToggleButton\n        :value=\"!!manager.data.value\"\n        :is-busy=\"manager.busy.value\"\n        @changed=\"handleChanged\"\n    />\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { ClientScope } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\n\nexport default defineComponent({\n    components: { AToggleButton },\n    props: {\n        clientId: { type: String, required: true },\n        scopeId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<ClientScope>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.CLIENT_SCOPE}`,\n            setup,\n            query: () => ({\n                filters: {\n                    client_id: props.clientId,\n                    scope_id: props.scopeId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.client_id === props.clientId &&\n                        event.data.scope_id === props.scopeId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    client_id: props.clientId,\n                    scope_id: props.scopeId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    client_id: props.clientId,\n                    scope_id: props.scopeId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        return {\n            manager,\n            handleChanged,\n        };\n    },\n});\n</script>\n<template>\n    <AToggleButton\n        :value=\"!!manager.data.value\"\n        :is-busy=\"manager.busy.value\"\n        @changed=\"handleChanged\"\n    />\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { AScopes } from '../scope';\nimport AClientScopeAssignment from './AClientScopeAssignment.vue';\n\nexport default defineComponent({\n    components: { AScopes, AClientScopeAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <AScopes>\n        <template #itemActions=\"{ data }\">\n            <AClientScopeAssignment\n                :key=\"data.id\"\n                :client-id=\"entityId\"\n                :scope-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </AScopes>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { AScopes } from '../scope';\nimport AClientScopeAssignment from './AClientScopeAssignment.vue';\n\nexport default defineComponent({\n    components: { AScopes, AClientScopeAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <AScopes>\n        <template #itemActions=\"{ data }\">\n            <AClientScopeAssignment\n                :key=\"data.id\"\n                :client-id=\"entityId\"\n                :scope-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </AScopes>\n</template>\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { IdentityProvider } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { EntityVSlots } from '../../utility';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n    defineEntityVProps,\n} from '../../utility';\n\nexport const AIdentityProvider = defineComponent({\n    props: defineEntityVProps<IdentityProvider>(),\n    emits: defineEntityVEmitOptions<IdentityProvider>(),\n    slots: Object as SlotsType<EntityVSlots<IdentityProvider>>,\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.IDENTITY_PROVIDER}`,\n            props,\n            setup,\n        });\n\n        try {\n            await manager.resolveOrFail();\n\n            return () => manager.render();\n        } catch (e) {\n            return () => manager.renderError(e);\n        }\n    },\n});\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IdentityProvider } from '@authup/core-kit';\nimport { createNanoID } from '@authup/kit';\nimport { buildFormGroup, buildFormInput, buildFormInputCheckbox } from '@vuecs/form-controls';\nimport useVuelidate from '@vuelidate/core';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport type { PropType } from 'vue';\nimport {\n    computed, \n    defineComponent, \n    h, \n    reactive,\n} from 'vue';\nimport { onChange, useUpdatedAt } from '../../../composables';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    VuelidateCustomRule,\n    VuelidateCustomRuleKey, \n    assignFormProperties, \n    getVuelidateSeverity, \n    useTranslationsForGroup, \n    useTranslationsForNestedValidation,\n} from '../../../core';\n\nexport const AIdentityProviderBasicFields = defineComponent({\n    props: { entity: { type: Object as PropType<Partial<IdentityProvider>> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const form = reactive({\n            name: '',\n            display_name: '',\n            enabled: true,\n        });\n\n        const $v = useVuelidate({\n            name: {\n                required,\n                minLength: minLength(3),\n                maxLength: maxLength(128),\n                [VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT]: VuelidateCustomRule[\n                    VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT\n                ],\n            },\n            display_name: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            enabled: { required },\n        }, form, { $registerAs: 'basic' });\n\n        const isNameEmpty = computed(() => !form.name || form.name.length === 0);\n\n        function generateId() {\n            form.name = createNanoID();\n        }\n\n        const update = () => {\n            setup.emit('updated', {\n                data: form,\n                valid: !$v.value.$invalid,\n            });\n        };\n\n        function assign(data: Partial<IdentityProvider> = {}) {\n            assignFormProperties(form, data);\n\n            if (isNameEmpty.value) {\n                generateId();\n            }\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as IdentityProvider);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const translationsDefault = useTranslationsForGroup(\n            TranslatorTranslationGroup.DEFAULT,\n            [\n                { key: TranslatorTranslationDefaultKey.DISPLAY_NAME },\n                { key: TranslatorTranslationDefaultKey.NAME },\n                { key: TranslatorTranslationDefaultKey.DESCRIPTION },\n            ],\n        );\n        const translationsValidation = useTranslationsForNestedValidation($v.value);\n\n        return () => {\n            const name = buildFormGroup({\n                validationMessages: translationsValidation.name.value,\n                validationSeverity: getVuelidateSeverity($v.value.name),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.NAME].value,\n                content: buildFormInput({\n                    value: $v.value.name.$model,\n                    onChange(input) {\n                        $v.value.name.$model = input;\n                    },\n                }),\n            });\n\n            const nameGenerator = h('div', { class: 'mb-3' }, [\n                h('button', {\n                    class: 'btn btn-xs btn-dark',\n                    onClick($event: any) {\n                        $event.preventDefault();\n\n                        generateId.call(null);\n                        update();\n                    },\n                }, [\n                    h('i', { class: 'fa fa-refresh' }),\n                    ' ',\n                    'Generate',\n                ]),\n            ]);\n\n            const displayName = buildFormGroup({\n                validationMessages: translationsValidation.display_name.value,\n                validationSeverity: getVuelidateSeverity($v.value.display_name),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.DISPLAY_NAME].value,\n                content: buildFormInput({\n                    value: $v.value.display_name.$model,\n                    onChange(input) {\n                        $v.value.display_name.$model = input;\n                    },\n                }),\n            });\n\n            const enabled = buildFormInputCheckbox({\n                groupClass: 'form-switch mt-3',\n                labelContent: 'Enabled?',\n                value: $v.value.enabled.$model,\n                onChange(input) {\n                    $v.value.enabled.$model = input;\n                    update();\n                },\n            });\n\n            return [\n                name,\n                nameGenerator,\n                displayName,\n                enabled,\n            ];\n        };\n    },\n});\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IdentityProvider, LdapIdentityProvider } from '@authup/core-kit';\nimport { buildFormGroup, buildFormInput, buildFormInputCheckbox } from '@vuecs/form-controls';\nimport useVuelidate from '@vuelidate/core';\nimport { numeric, required } from '@vuelidate/validators';\nimport type { PropType } from 'vue';\nimport { defineComponent, reactive } from 'vue';\nimport { onChange, useUpdatedAt } from '../../../composables';\nimport { assignFormProperties, getVuelidateSeverity, useTranslationsForNestedValidation } from '../../../core';\n\nexport const AIdentityProviderLdapConnectionFields = defineComponent({\n    props: {\n        entity: { type: Object as PropType<Partial<LdapIdentityProvider>> },\n        discovery: {\n            type: Boolean,\n            default: false,\n        },\n    },\n    emits: ['updated'],\n    setup(props) {\n        const form = reactive({\n            url: '',\n            timeout: 0,\n            start_tls: true,\n            base_dn: '',\n        });\n\n        const $v = useVuelidate({\n            url: { required },\n            timeout: { numeric },\n            start_tls: { required },\n            base_dn: { required },\n        }, form, { $registerAs: 'connection' });\n\n        function init() {\n            if (!props.entity) return;\n\n            assignFormProperties(form, props.entity);\n        }\n\n        const updated = useUpdatedAt(props.entity as IdentityProvider);\n        onChange(updated, () => init());\n\n        init();\n\n        const validationMessages = useTranslationsForNestedValidation($v.value);\n\n        return () => [\n            buildFormGroup({\n                validationMessages: validationMessages.url.value,\n                validationSeverity: getVuelidateSeverity($v.value.url),\n                label: true,\n                labelContent: 'URL',\n                content: buildFormInput({\n                    value: $v.value.url.$model,\n                    onChange(input) {\n                        $v.value.url.$model = input;\n                    },\n                    props: { placeholder: '<scheme>://<address>:<port>' },\n                }),\n            }),\n            buildFormGroup({\n                validationMessages: validationMessages.timeout.value,\n                validationSeverity: getVuelidateSeverity($v.value.timeout),\n                label: true,\n                labelContent: 'Timeout',\n                content: buildFormInput({\n                    value: $v.value.timeout.$model,\n                    onChange(input) {\n                        const intValue = Number.parseInt(input, 10);\n                        if (!Number.isNaN(intValue)) {\n                            $v.value.timeout.$model = intValue;\n                        }\n                    },\n                    props: { type: 'number' },\n                }),\n            }),\n            buildFormGroup({\n                validationMessages: validationMessages.start_tls.value,\n                validationSeverity: getVuelidateSeverity($v.value.start_tls),\n                label: true,\n                labelContent: 'StartTLS',\n                content: buildFormInputCheckbox({\n                    groupClass: 'form-switch',\n                    labelContent: 'Enable StartTLS process?',\n                    value: $v.value.start_tls.$model,\n                    onChange(input) {\n                        $v.value.start_tls.$model = input;\n                    },\n                }),\n            }),\n            buildFormGroup({\n                validationMessages: validationMessages.base_dn.value,\n                validationSeverity: getVuelidateSeverity($v.value.base_dn),\n                label: true,\n                labelContent: 'Base DN',\n                content: buildFormInput({\n                    value: $v.value.base_dn.$model,\n                    onChange(input) {\n                        $v.value.base_dn.$model = input;\n                    },\n                    props: { placeholder: 'e.g. dc=example,dc=com' },\n                }),\n            }),\n        ];\n    },\n});\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IdentityProvider, LdapIdentityProvider } from '@authup/core-kit';\nimport { buildFormGroup, buildFormInput } from '@vuecs/form-controls';\nimport useVuelidate from '@vuelidate/core';\nimport { required } from '@vuelidate/validators';\nimport type { PropType } from 'vue';\nimport { defineComponent, reactive } from 'vue';\nimport { onChange, useUpdatedAt } from '../../../composables';\nimport { assignFormProperties, getVuelidateSeverity, useTranslationsForNestedValidation } from '../../../core';\n\nexport const AIdentityProviderLdapCredentialsFields = defineComponent({\n    props: {\n        entity: { type: Object as PropType<Partial<LdapIdentityProvider>> },\n        discovery: {\n            type: Boolean,\n            default: false,\n        },\n    },\n    emits: ['updated'],\n    setup(props) {\n        const form = reactive({\n            user: '',\n            password: '',\n        });\n\n        const $v = useVuelidate({\n            user: { required },\n            password: { required },\n        }, form, { $registerAs: 'credentials' });\n\n        function init() {\n            if (!props.entity) return;\n\n            assignFormProperties(form, props.entity);\n        }\n\n        const updated = useUpdatedAt(props.entity as IdentityProvider);\n        onChange(updated, () => init());\n\n        init();\n\n        const validationMessages = useTranslationsForNestedValidation($v.value);\n\n        return () => [\n            buildFormGroup({\n                validationMessages: validationMessages.user.value,\n                validationSeverity: getVuelidateSeverity($v.value.user),\n                label: true,\n                labelContent: 'User',\n                content: buildFormInput({\n                    value: $v.value.user.$model,\n                    onChange(input) {\n                        $v.value.user.$model = input;\n                    },\n                }),\n            }),\n            buildFormGroup({\n                validationMessages: validationMessages.password.value,\n                validationSeverity: getVuelidateSeverity($v.value.password),\n                label: true,\n                labelContent: 'Password',\n                content: buildFormInput({\n                    value: $v.value.password.$model,\n                    onChange(input) {\n                        $v.value.password.$model = input;\n                    },\n                }),\n            }),\n        ];\n    },\n});\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IdentityProvider, LdapIdentityProvider } from '@authup/core-kit';\nimport { buildFormGroup, buildFormInput } from '@vuecs/form-controls';\nimport useVuelidate from '@vuelidate/core';\nimport type { PropType } from 'vue';\nimport { defineComponent, reactive } from 'vue';\nimport { onChange, useUpdatedAt } from '../../../composables';\nimport { assignFormProperties, getVuelidateSeverity, useTranslationsForNestedValidation } from '../../../core';\n\nexport const AIdentityProviderLdapGroupFields = defineComponent({\n    props: {\n        entity: { type: Object as PropType<Partial<LdapIdentityProvider>> },\n        discovery: {\n            type: Boolean,\n            default: false,\n        },\n    },\n    emits: ['updated'],\n    setup(props) {\n        const form = reactive({\n            group_filter: '',\n            group_base_dn: '',\n            group_name_attribute: '',\n            group_class: '',\n            group_member_attribute: '',\n            group_member_user_attribute: '',\n        });\n\n        const $v = useVuelidate({\n            group_filter: {},\n            group_base_dn: {},\n            group_name_attribute: {},\n            group_class: {},\n            group_member_attribute: {},\n            group_member_user_attribute: {},\n        }, form, { $registerAs: 'group' });\n\n        function init() {\n            if (!props.entity) return;\n\n            assignFormProperties(form, props.entity);\n        }\n\n        const updated = useUpdatedAt(props.entity as IdentityProvider);\n        onChange(updated, () => init());\n\n        init();\n\n        const validationMessages = useTranslationsForNestedValidation($v.value);\n\n        return () => [\n            buildFormGroup({\n                validationMessages: validationMessages.group_filter.value,\n                validationSeverity: getVuelidateSeverity($v.value.group_filter),\n                label: true,\n                labelContent: 'Filter',\n                content: buildFormInput({\n                    value: $v.value.group_filter.$model,\n                    onChange(input) {\n                        $v.value.group_filter.$model = input;\n                    },\n                    props: { placeholder: '(member={{dn}})' },\n                }),\n            }),\n            buildFormGroup({\n                validationMessages: validationMessages.group_base_dn.value,\n                validationSeverity: getVuelidateSeverity($v.value.group_base_dn),\n                label: true,\n                labelContent: 'Base DN',\n                content: buildFormInput({\n                    value: $v.value.group_base_dn.$model,\n                    onChange(input) {\n                        $v.value.group_base_dn.$model = input;\n                    },\n                }),\n            }),\n            buildFormGroup({\n                validationMessages: validationMessages.group_class.value,\n                validationSeverity: getVuelidateSeverity($v.value.group_class),\n                label: true,\n                labelContent: 'Class',\n                content: buildFormInput({\n                    value: $v.value.group_class.$model,\n                    onChange(input) {\n                        $v.value.group_class.$model = input;\n                    },\n                }),\n            }),\n            buildFormGroup({\n                validationMessages: validationMessages.group_name_attribute.value,\n                validationSeverity: getVuelidateSeverity($v.value.group_name_attribute),\n                label: true,\n                labelContent: 'Name Attribute',\n                content: buildFormInput({\n                    value: $v.value.group_name_attribute.$model,\n                    onChange(input) {\n                        $v.value.group_name_attribute.$model = input;\n                    },\n                }),\n            }),\n            buildFormGroup({\n                validationMessages: validationMessages.group_member_attribute.value,\n                validationSeverity: getVuelidateSeverity($v.value.group_member_attribute),\n                label: true,\n                labelContent: 'Member Attribute',\n                content: buildFormInput({\n                    value: $v.value.group_member_attribute.$model,\n                    onChange(input) {\n                        $v.value.group_member_attribute.$model = input;\n                    },\n                }),\n            }),\n            buildFormGroup({\n                validationMessages: validationMessages.group_member_user_attribute.value,\n                validationSeverity: getVuelidateSeverity($v.value.group_member_user_attribute),\n                label: true,\n                labelContent: 'Member User Attribute',\n                content: buildFormInput({\n                    value: $v.value.group_member_user_attribute.$model,\n                    onChange(input) {\n                        $v.value.group_member_user_attribute.$model = input;\n                    },\n                }),\n            }),\n        ];\n    },\n});\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IdentityProvider, LdapIdentityProvider } from '@authup/core-kit';\nimport { buildFormGroup, buildFormInput } from '@vuecs/form-controls';\nimport useVuelidate from '@vuelidate/core';\nimport type { PropType } from 'vue';\nimport { defineComponent, reactive } from 'vue';\nimport { onChange, useUpdatedAt } from '../../../composables';\nimport { assignFormProperties, getVuelidateSeverity, useTranslationsForNestedValidation } from '../../../core';\n\nexport const AIdentityProviderLdapUserFields = defineComponent({\n    props: {\n        entity: { type: Object as PropType<Partial<LdapIdentityProvider>> },\n        discovery: {\n            type: Boolean,\n            default: false,\n        },\n    },\n    emits: ['updated'],\n    setup(props) {\n        const form = reactive({\n            user_filter: '',\n            user_base_dn: '',\n            user_name_attribute: '',\n            user_mail_attribute: '',\n            user_display_name_attribute: '',\n        } satisfies Omit<LdapIdentityProvider, keyof IdentityProvider | 'base_dn' | 'url'>);\n\n        const $v = useVuelidate({\n            user_filter: {},\n            user_base_dn: {},\n            user_name_attribute: {},\n            user_mail_attribute: {},\n            user_display_name_attribute: {},\n        }, form, { $registerAs: 'user' });\n\n        function init() {\n            if (!props.entity) return;\n\n            assignFormProperties(form, props.entity);\n        }\n\n        const updated = useUpdatedAt(props.entity as IdentityProvider);\n        onChange(updated, () => init());\n\n        init();\n\n        const validationMessages = useTranslationsForNestedValidation($v.value);\n\n        return () => [\n            buildFormGroup({\n                validationMessages: validationMessages.user_filter.value,\n                validationSeverity: getVuelidateSeverity($v.value.user_filter),\n                label: true,\n                labelContent: 'Filter',\n                content: buildFormInput({\n                    value: $v.value.user_filter.$model,\n                    onChange(input) {\n                        $v.value.user_filter.$model = input;\n                    },\n                    props: { placeholder: '(|({name_attribute}={{input}})({mail_attribute}={{input}}))' },\n                }),\n            }),\n            buildFormGroup({\n                validationMessages: validationMessages.user_base_dn.value,\n                validationSeverity: getVuelidateSeverity($v.value.user_base_dn),\n                label: true,\n                labelContent: 'Base DN',\n                content: buildFormInput({\n                    value: $v.value.user_base_dn.$model,\n                    onChange(input) {\n                        $v.value.user_base_dn.$model = input;\n                    },\n                }),\n            }),\n            buildFormGroup({\n                validationMessages: validationMessages.user_name_attribute.value,\n                validationSeverity: getVuelidateSeverity($v.value.user_name_attribute),\n                label: true,\n                labelContent: 'Name Attribute',\n                content: buildFormInput({\n                    value: $v.value.user_name_attribute.$model,\n                    onChange(input) {\n                        $v.value.user_name_attribute.$model = input;\n                    },\n                }),\n            }),\n            buildFormGroup({\n                validationMessages: validationMessages.user_mail_attribute.value,\n                validationSeverity: getVuelidateSeverity($v.value.user_mail_attribute),\n                label: true,\n                labelContent: 'Mail Attribute',\n                content: buildFormInput({\n                    value: $v.value.user_mail_attribute.$model,\n                    onChange(input) {\n                        $v.value.user_mail_attribute.$model = input;\n                    },\n                }),\n            }),\n            buildFormGroup({\n                validationMessages: validationMessages.user_display_name_attribute.value,\n                validationSeverity: getVuelidateSeverity($v.value.user_display_name_attribute),\n                label: true,\n                labelContent: 'DisplayName Attribute',\n                content: buildFormInput({\n                    value: $v.value.user_display_name_attribute.$model,\n                    onChange(input) {\n                        $v.value.user_display_name_attribute.$model = input;\n                    },\n                }),\n            }),\n        ];\n    },\n});\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { IdentityProviderProtocol } from '@authup/core-kit';\nimport type { IdentityProviderProtocolElement } from './type';\n\nconst elements = {\n    [IdentityProviderProtocol.OAUTH2]: {\n        name: 'OAuth2',\n        icon: 'fa fa-lock',\n    },\n    [IdentityProviderProtocol.OIDC]: {\n        name: 'OpenID Connect',\n        icon: 'fas fa-id-card',\n    },\n    [IdentityProviderProtocol.LDAP]: {\n        name: 'LDAP',\n        icon: 'fas fa-sitemap',\n    },\n};\n\nexport function getIdentityProviderProtocolElement(\n    id: `${IdentityProviderProtocol}`,\n) : IdentityProviderProtocolElement | undefined {\n    return elements[id];\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IdentityProviderProtocol } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport { hasNormalizedSlot, normalizeSlot } from '../../../core';\nimport { getIdentityProviderProtocolElement } from './protocol';\n\nexport const AIdentityProviderProtocol = defineComponent({\n    props: {\n        id: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, setup) {\n        const preset = getIdentityProviderProtocolElement(props.id as IdentityProviderProtocol);\n        if (preset) {\n            if (hasNormalizedSlot('default', setup.slots)) {\n                return () => normalizeSlot('default', preset, setup.slots);\n            }\n        } else if (hasNormalizedSlot('error', setup.slots)) {\n            return () => normalizeSlot('error', {}, setup.slots);\n        }\n\n        return () => [];\n    },\n});\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IdentityProvider, LdapIdentityProvider } from '@authup/core-kit';\nimport { EntityType, IdentityProviderProtocol } from '@authup/core-kit';\nimport useVuelidate from '@vuelidate/core';\nimport {\n    type PropType, \n    type VNodeChild, \n    defineComponent, \n    h, \n    ref,\n} from 'vue';\nimport { useIsEditing } from '../../../composables';\nimport {\n    buildFormSubmitWithTranslations,\n    createFormSubmitTranslations,\n    extractVuelidateResultsFromChild,\n} from '../../../core';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport { AIdentityProviderBasicFields } from './AIdentityProviderBasicFields';\nimport { AIdentityProviderLdapConnectionFields } from './AIdentityProviderLdapConnectionFields';\nimport { AIdentityProviderLdapCredentialsFields } from './AIdentityProviderLdapCredentialsFields';\nimport { AIdentityProviderLdapGroupFields } from './AIdentityProviderLdapGroupFields';\nimport { AIdentityProviderLdapUserFields } from './AIdentityProviderLdapUserFields';\nimport { AIdentityProviderProtocol } from './AIdentityProviderProtocol';\nimport type { IdentityProviderProtocolElement } from './protocol';\n\nexport const AIdentityProviderLdapForm = defineComponent({\n    props: {\n        entity: {\n            type: Object as PropType<IdentityProvider>,\n            required: false,\n            default: undefined,\n        },\n        realmId: {\n            type: String,\n            default: undefined,\n        },\n    },\n    emits: defineEntityVEmitOptions<IdentityProvider>(),\n    setup(props, ctx) {\n        const manager = defineEntityManager({\n            type: `${EntityType.IDENTITY_PROVIDER}`,\n            setup: ctx,\n            props,\n        });\n\n        const isEditing = useIsEditing(manager.data);\n\n        const busy = ref(false);\n        const $v = useVuelidate({ $stopPropagation: true });\n\n        const submit = async () => {\n            if ($v.value.$invalid) {\n                return;\n            }\n\n            const data : Partial<IdentityProvider> = {\n                ...extractVuelidateResultsFromChild($v, 'basic'),\n                ...extractVuelidateResultsFromChild($v, 'connection'),\n                ...extractVuelidateResultsFromChild($v, 'credentials'),\n                ...extractVuelidateResultsFromChild($v, 'group'),\n                ...extractVuelidateResultsFromChild($v, 'user'),\n                protocol: IdentityProviderProtocol.LDAP,\n            };\n\n            await manager.createOrUpdate(data);\n        };\n\n        const submitTranslations = createFormSubmitTranslations();\n\n        return () => {\n            const submitNode = buildFormSubmitWithTranslations({\n                submit,\n                busy: busy.value,\n                isEditing: isEditing.value,\n                invalid: $v.value.$invalid,\n            }, submitTranslations);\n\n            let headerNode : VNodeChild | undefined;\n            if (!manager.data.value) {\n                headerNode = h(AIdentityProviderProtocol, {\n                    key: IdentityProviderProtocol.LDAP,\n                    id: IdentityProviderProtocol.LDAP,\n                }, {\n                    default: (element: IdentityProviderProtocolElement) => h('div', [\n                        h('h4', { class: 'mb-3' }, [\n                            h('i', { class: [element.icon, 'pe-1'] }),\n                            element.name,\n                        ]),\n                    ]),\n                });\n            }\n\n            const basicNode : VNodeChild = [\n                h('h6', [\n                    h('i', { class: 'fa fa-wrench' }),\n                    ' ',\n                    'Basic',\n                ]),\n                h(AIdentityProviderBasicFields, { entity: manager.data.value }),\n            ];\n\n            const connectionNode : VNodeChild = [\n                h('h6', [\n                    h('i', { class: 'fa-solid fa-vihara' }),\n                    ' ',\n                    'Connection',\n                ]),\n                h(AIdentityProviderLdapConnectionFields, { entity: manager.data.value as LdapIdentityProvider }),\n            ];\n\n            const credentialsNode : VNodeChild = [\n                h('h6', [\n                    h('i', { class: 'fa fa-lock' }),\n                    ' ',\n                    'Security',\n                ]),\n                h(AIdentityProviderLdapCredentialsFields, { entity: manager.data.value as LdapIdentityProvider }),\n            ];\n\n            const groupNode : VNodeChild = [\n                h('h6', [\n                    h('i', { class: 'fa-solid fa-theater-masks' }),\n                    ' ',\n                    'Group',\n                ]),\n                h(AIdentityProviderLdapGroupFields, { entity: manager.data.value as LdapIdentityProvider }),\n            ];\n\n            const userNode : VNodeChild = [\n                h('h6', [\n                    h('i', { class: 'fas fa-user' }),\n                    ' ',\n                    'User',\n                ]),\n                h(AIdentityProviderLdapUserFields, { entity: manager.data.value as LdapIdentityProvider }),\n            ];\n\n            return h('form', {\n                onSubmit($event: any) {\n                    $event.preventDefault();\n\n                    return submit.call(null);\n                },\n            }, [\n                headerNode,\n                h('div', { class: 'row' }, [\n                    h('div', { class: 'col' }, [\n                        basicNode,\n                    ]),\n                    h('div', { class: 'col' }, [\n                        credentialsNode,\n                    ]),\n                ]),\n                h('hr'),\n                connectionNode,\n                h('hr'),\n                h('div', { class: 'row' }, [\n                    h('div', { class: 'col' }, [\n                        userNode,\n                    ]),\n                    h('div', { class: 'col' }, [\n                        groupNode,\n                    ]),\n                ]),\n                submitNode,\n            ]);\n        };\n    },\n});\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { IdentityProviderPreset } from '@authup/core-kit';\nimport type { IdentityProviderPresetElement } from './type';\n\nconst elements = {\n    [IdentityProviderPreset.FACEBOOK]: {\n        name: 'Facebook',\n        icon: 'fab fa-facebook',\n    },\n    [IdentityProviderPreset.GITHUB]: {\n        name: 'GitHub',\n        icon: 'fab fa-github',\n    },\n    [IdentityProviderPreset.GITLAB]: {\n        name: 'GitLab',\n        icon: 'fab fa-gitlab',\n    },\n    [IdentityProviderPreset.GOOGLE]: {\n        name: 'Google',\n        icon: 'fab fa-google',\n    },\n    [IdentityProviderPreset.PAYPAL]: {\n        name: 'Paypal',\n        icon: 'fab fa-paypal',\n    },\n    [IdentityProviderPreset.INSTAGRAM]: {\n        name: 'Instagram',\n        icon: 'fab fa-instagram',\n    },\n    [IdentityProviderPreset.STACKOVERFLOW]: {\n        name: 'StackOverflow',\n        icon: 'fa fa-code',\n    },\n    [IdentityProviderPreset.TWITTER]: {\n        name: 'Twitter',\n        icon: 'fab fa-twitter',\n    },\n};\n\nexport function getIdentityProviderPresetElement(\n    id: `${IdentityProviderPreset}`,\n) : IdentityProviderPresetElement | undefined {\n    return elements[id];\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IdentityProviderPreset } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport { getIdentityProviderPresetElement } from './preset';\nimport { hasNormalizedSlot, normalizeSlot } from '../../../core';\n\nexport const AIdentityProviderPreset = defineComponent({\n    props: {\n        id: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, setup) {\n        const preset = getIdentityProviderPresetElement(props.id as IdentityProviderPreset);\n        if (preset) {\n            if (hasNormalizedSlot('default', setup.slots)) {\n                return () => normalizeSlot('default', preset, setup.slots);\n            }\n        } else if (hasNormalizedSlot('error', setup.slots)) {\n            return () => normalizeSlot('error', {}, setup.slots);\n        }\n\n        return () => [];\n    },\n});\n","<script lang=\"ts\">\nimport { IdentityProviderPreset, IdentityProviderProtocol } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport { AIdentityProviderPreset } from './AIdentityProviderPreset';\nimport { AIdentityProviderProtocol } from './AIdentityProviderProtocol';\n\nexport default defineComponent({\n    components: {\n        AIdentityProviderPreset,\n        AIdentityProviderProtocol,\n    },\n    props: {\n        protocol: { type: String },\n        preset: { type: String },\n    },\n    emits: ['pick'],\n    setup(props, setup) {\n        const protocols = Object.values(IdentityProviderProtocol);\n        const presets = Object.values(IdentityProviderPreset);\n\n        const pickProtocol = (protocol: string) => {\n            setup.emit('pick', 'protocol', protocol);\n        };\n\n        const pickPreset = (preset: string) => {\n            setup.emit('pick', 'preset', preset);\n        };\n\n        return {\n            protocols,\n            presets,\n            pickProtocol,\n            pickPreset,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"d-flex flex-column gap-2\">\n        <div>\n            <h6>Protocols</h6>\n\n            <div class=\"d-flex flex-row gap-2 flex-wrap\">\n                <template\n                    v-for=\"(item, key) in protocols\"\n                    :key=\"key\"\n                >\n                    <AIdentityProviderProtocol :id=\"item\">\n                        <template #default=\"props\">\n                            <div\n                                :class=\"{'active': item === protocol && !preset}\"\n                                class=\"d-flex flex-column gap-1 text-center identity-provider-picker-item\"\n                                @click.prevent=\"pickProtocol(item)\"\n                            >\n                                <div>\n                                    <i\n                                        class=\"fa-2x\"\n                                        :class=\"props.icon\"\n                                    />\n                                </div>\n                                <div>\n                                    {{ props.name }}\n                                </div>\n                            </div>\n                        </template>\n                    </AIdentityProviderProtocol>\n                </template>\n            </div>\n        </div>\n        <div>\n            <h6>Presets</h6>\n\n            <div class=\"d-flex flex-row gap-2 flex-wrap\">\n                <template\n                    v-for=\"(item, key) in presets\"\n                    :key=\"key\"\n                >\n                    <AIdentityProviderPreset :id=\"item\">\n                        <template #default=\"props\">\n                            <div\n                                :class=\"{'active': item === preset}\"\n                                class=\"d-flex flex-column gap-1 text-center identity-provider-picker-item\"\n                                @click.prevent=\"pickPreset(item)\"\n                            >\n                                <div>\n                                    <i\n                                        class=\"fa-2x\"\n                                        :class=\"props.icon\"\n                                    />\n                                </div>\n                                <div>\n                                    {{ props.name }}\n                                </div>\n                            </div>\n                        </template>\n                    </AIdentityProviderPreset>\n                </template>\n            </div>\n        </div>\n    </div>\n</template>\n<style scoped>\n.identity-provider-picker-item {\n    cursor: pointer;\n    border-radius: 4px;\n    min-width: 120px;\n    color: #5b646c;\n    background-color: #ececec;\n    padding: 0.5rem;\n}\n\n.identity-provider-picker-item.active,\n.identity-provider-picker-item:hover,\n.identity-provider-picker-item:active {\n    background-color: #6d7fcc;\n    color: #fff;\n}\n</style>\n","<script lang=\"ts\">\nimport { IdentityProviderPreset, IdentityProviderProtocol } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport { AIdentityProviderPreset } from './AIdentityProviderPreset';\nimport { AIdentityProviderProtocol } from './AIdentityProviderProtocol';\n\nexport default defineComponent({\n    components: {\n        AIdentityProviderPreset,\n        AIdentityProviderProtocol,\n    },\n    props: {\n        protocol: { type: String },\n        preset: { type: String },\n    },\n    emits: ['pick'],\n    setup(props, setup) {\n        const protocols = Object.values(IdentityProviderProtocol);\n        const presets = Object.values(IdentityProviderPreset);\n\n        const pickProtocol = (protocol: string) => {\n            setup.emit('pick', 'protocol', protocol);\n        };\n\n        const pickPreset = (preset: string) => {\n            setup.emit('pick', 'preset', preset);\n        };\n\n        return {\n            protocols,\n            presets,\n            pickProtocol,\n            pickPreset,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"d-flex flex-column gap-2\">\n        <div>\n            <h6>Protocols</h6>\n\n            <div class=\"d-flex flex-row gap-2 flex-wrap\">\n                <template\n                    v-for=\"(item, key) in protocols\"\n                    :key=\"key\"\n                >\n                    <AIdentityProviderProtocol :id=\"item\">\n                        <template #default=\"props\">\n                            <div\n                                :class=\"{'active': item === protocol && !preset}\"\n                                class=\"d-flex flex-column gap-1 text-center identity-provider-picker-item\"\n                                @click.prevent=\"pickProtocol(item)\"\n                            >\n                                <div>\n                                    <i\n                                        class=\"fa-2x\"\n                                        :class=\"props.icon\"\n                                    />\n                                </div>\n                                <div>\n                                    {{ props.name }}\n                                </div>\n                            </div>\n                        </template>\n                    </AIdentityProviderProtocol>\n                </template>\n            </div>\n        </div>\n        <div>\n            <h6>Presets</h6>\n\n            <div class=\"d-flex flex-row gap-2 flex-wrap\">\n                <template\n                    v-for=\"(item, key) in presets\"\n                    :key=\"key\"\n                >\n                    <AIdentityProviderPreset :id=\"item\">\n                        <template #default=\"props\">\n                            <div\n                                :class=\"{'active': item === preset}\"\n                                class=\"d-flex flex-column gap-1 text-center identity-provider-picker-item\"\n                                @click.prevent=\"pickPreset(item)\"\n                            >\n                                <div>\n                                    <i\n                                        class=\"fa-2x\"\n                                        :class=\"props.icon\"\n                                    />\n                                </div>\n                                <div>\n                                    {{ props.name }}\n                                </div>\n                            </div>\n                        </template>\n                    </AIdentityProviderPreset>\n                </template>\n            </div>\n        </div>\n    </div>\n</template>\n<style scoped>\n.identity-provider-picker-item {\n    cursor: pointer;\n    border-radius: 4px;\n    min-width: 120px;\n    color: #5b646c;\n    background-color: #ececec;\n    padding: 0.5rem;\n}\n\n.identity-provider-picker-item.active,\n.identity-provider-picker-item:hover,\n.identity-provider-picker-item:active {\n    background-color: #6d7fcc;\n    color: #fff;\n}\n</style>\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IdentityProvider, OAuth2IdentityProvider } from '@authup/core-kit';\nimport { buildFormGroup, buildFormInput } from '@vuecs/form-controls';\nimport useVuelidate from '@vuelidate/core';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport type { PropType } from 'vue';\nimport { defineComponent, reactive } from 'vue';\nimport { onChange, useUpdatedAt } from '../../../composables';\nimport { assignFormProperties, getVuelidateSeverity, useTranslationsForNestedValidation } from '../../../core';\n\nexport const AIdentityProviderOAuth2ClientFields = defineComponent({\n    props: { entity: { type: Object as PropType<Partial<OAuth2IdentityProvider>> } },\n    emits: ['updated'],\n    setup(props) {\n        const form = reactive({\n            client_id: '',\n            client_secret: '',\n        });\n\n        const $v = useVuelidate({\n            client_id: {\n                required,\n                minLength: minLength(3),\n                maxLength: maxLength(128),\n            },\n            client_secret: {\n                minLength: minLength(3),\n                maxLength: maxLength(128),\n            },\n        }, form, { $registerAs: 'client' });\n\n        function assign() {\n            assignFormProperties(form, props.entity);\n        }\n\n        const updatedAt = useUpdatedAt(props.entity as IdentityProvider);\n        onChange(updatedAt, () => assign());\n\n        assign();\n\n        const validationMessages = useTranslationsForNestedValidation($v.value);\n\n        return () => [\n            buildFormGroup({\n                validationMessages: validationMessages.client_id.value,\n                validationSeverity: getVuelidateSeverity($v.value.client_id),\n                label: true,\n                labelContent: 'Client ID',\n                content: buildFormInput({\n                    value: $v.value.client_id.$model,\n                    onChange(input) {\n                        $v.value.client_id.$model = input;\n                    },\n                }),\n            }),\n            buildFormGroup({\n                validationMessages: validationMessages.client_secret.value,\n                validationSeverity: getVuelidateSeverity($v.value.client_secret),\n                label: true,\n                labelContent: 'Client Secret',\n                content: buildFormInput({\n                    value: $v.value.client_secret.$model,\n                    onChange(input) {\n                        $v.value.client_secret.$model = input;\n                    },\n                }),\n            }),\n        ];\n    },\n});\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Client } from '@authup/core-http-kit';\nimport { isOpenIDProviderMetadata } from '@authup/specs';\nimport { buildFormGroup, buildFormInput } from '@vuecs/form-controls';\nimport useVuelidate from '@vuelidate/core';\nimport { url } from '@vuelidate/validators';\nimport type { VNodeChild } from 'vue';\nimport {\n    defineComponent, \n    h, \n    reactive, \n    ref,\n} from 'vue';\nimport { getVuelidateSeverity, useTranslationsForBaseValidation } from '../../../core';\n\nexport const AIdentityProviderOAuth2Discovery = defineComponent({\n    emits: ['lookup', 'failed'],\n    setup(_, setup) {\n        const busy = ref(false);\n        const form = reactive({ url: '' });\n\n        const $v = useVuelidate({ url: { url } }, form);\n\n        const lookupValid = ref(false);\n\n        const message = ref<string | null>(null);\n\n        const apiClient = new Client();\n\n        const lookup = async () => {\n            if (busy.value || $v.value.url.$invalid) {\n                return;\n            }\n\n            try {\n                const response = await apiClient.get(form.url);\n                if (isOpenIDProviderMetadata(response.data)) {\n                    setup.emit('lookup', response.data);\n                    lookupValid.value = true;\n                }\n            } catch (e) {\n                lookupValid.value = false;\n\n                if (e instanceof Error) {\n                    message.value = `Lookup failed with: ${e.message}`;\n                    setup.emit('failed', e);\n                }\n            } finally {\n                busy.value = false;\n            }\n        };\n\n        const validationMessages = useTranslationsForBaseValidation($v.value.url);\n\n        return () => {\n            let messageNode : VNodeChild;\n            if (message.value) {\n                messageNode = h('div', { class: 'alert alert-sm alert-warning' }, message.value);\n            }\n\n            return [\n                buildFormGroup({\n                    validationMessages: validationMessages.value,\n                    validationSeverity: getVuelidateSeverity($v.value.url),\n                    labelContent: 'Discovery',\n                    content: buildFormInput({\n                        class: { 'is-valid': lookupValid.value },\n                        props: { placeholder: 'https://example.com/.well-known/openid-configuration' },\n                        value: $v.value.url.$model,\n                        onChange(input) {\n                            $v.value.url.$model = input;\n                        },\n                    }),\n                }),\n                messageNode,\n                h('button', {\n                    type: 'button',\n                    class: 'btn btn-xs btn-primary mb-1',\n                    disabled: !form.url || $v.value.$invalid,\n                    onClick($event: any) {\n                        $event.preventDefault();\n\n                        return lookup();\n                    },\n                }, [\n                    h('i', { class: 'fa fa-search pe-1' }),\n                    'Lookup',\n                ]),\n            ];\n        };\n    },\n});\n","<!--\n  Copyright (c) 2023.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport type { IdentityProvider, OAuth2IdentityProvider } from '@authup/core-kit';\nimport type { OpenIDProviderMetadata } from '@authup/specs';\nimport { VCFormGroup, VCFormInput } from '@vuecs/form-controls';\nimport useVuelidate from '@vuelidate/core';\nimport { required, url } from '@vuelidate/validators';\nimport type { PropType } from 'vue';\nimport { defineComponent, reactive } from 'vue';\nimport { onChange, useUpdatedAt } from '../../../composables';\nimport { assignFormProperties, getVuelidateSeverity, useTranslationsForNestedValidation } from '../../../core';\nimport { AIdentityProviderOAuth2Discovery } from './AIdentityProviderOAuth2Discovery';\n\nexport default defineComponent({\n    components: {\n        VCFormGroup, \n        VCFormInput, \n        AIdentityProviderOAuth2Discovery, \n    },\n    props: {\n        entity: { type: Object as PropType<Partial<OAuth2IdentityProvider>> },\n        discovery: {\n            type: Boolean,\n            default: false,\n        },\n    },\n    emits: ['updated'],\n    setup(props) {\n        const form = reactive({\n            token_url: '',\n            authorize_url: '',\n            user_info_url: '',\n        });\n\n        const $v = useVuelidate({\n            token_url: {\n                required,\n                url,\n            },\n            authorize_url: {\n                required,\n                url,\n            },\n            user_info_url: { url },\n        }, form, { $registerAs: 'endpoint' });\n\n        function init() {\n            form.token_url = '';\n            form.authorize_url = '';\n            form.user_info_url = '';\n\n            if (!props.entity) return;\n\n            assignFormProperties(form, props.entity);\n        }\n\n        const updated = useUpdatedAt(props.entity as IdentityProvider);\n        onChange(updated, () => init());\n\n        init();\n\n        const validationMessages = useTranslationsForNestedValidation($v.value);\n\n        const handleDiscoveryLookup = (data: OpenIDProviderMetadata) => {\n            form.authorize_url = data.authorization_endpoint;\n            form.token_url = data.token_endpoint;\n        };\n\n        return {\n            $v,\n            validationMessages,\n            handleDiscoveryLookup,\n            getVuelidateSeverity,\n        };\n    },\n});\n</script>\n<template>\n    <AIdentityProviderOAuth2Discovery\n        v-if=\"discovery\"\n        @lookup=\"handleDiscoveryLookup\"\n    />\n    <VCFormGroup\n        :label=\"true\"\n        :validation-messages=\"validationMessages.token_url.value\"\n        :validation-severity=\"getVuelidateSeverity($v.token_url)\"\n    >\n        <template #label>\n            Token\n        </template>\n        <VCFormInput\n            v-model=\"$v.token_url.$model\"\n            placeholder=\"https://...\"\n        />\n    </VCFormGroup>\n    <VCFormGroup\n        :label=\"true\"\n        :validation-messages=\"validationMessages.authorize_url.value\"\n        :validation-severity=\"getVuelidateSeverity($v.authorize_url)\"\n    >\n        <template #label>\n            Authorize\n        </template>\n        <VCFormInput\n            v-model=\"$v.authorize_url.$model\"\n            placeholder=\"https://...\"\n        />\n    </VCFormGroup>\n    <VCFormGroup\n        :label=\"true\"\n        :validation-messages=\"validationMessages.user_info_url.value\"\n        :validation-severity=\"getVuelidateSeverity($v.user_info_url)\"\n    >\n        <template #label>\n            UserInfo\n        </template>\n        <VCFormInput\n            v-model=\"$v.user_info_url.$model\"\n            placeholder=\"https://...\"\n        />\n    </VCFormGroup>\n</template>\n","<!--\n  Copyright (c) 2023.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport type { IdentityProvider, OAuth2IdentityProvider } from '@authup/core-kit';\nimport type { OpenIDProviderMetadata } from '@authup/specs';\nimport { VCFormGroup, VCFormInput } from '@vuecs/form-controls';\nimport useVuelidate from '@vuelidate/core';\nimport { required, url } from '@vuelidate/validators';\nimport type { PropType } from 'vue';\nimport { defineComponent, reactive } from 'vue';\nimport { onChange, useUpdatedAt } from '../../../composables';\nimport { assignFormProperties, getVuelidateSeverity, useTranslationsForNestedValidation } from '../../../core';\nimport { AIdentityProviderOAuth2Discovery } from './AIdentityProviderOAuth2Discovery';\n\nexport default defineComponent({\n    components: {\n        VCFormGroup, \n        VCFormInput, \n        AIdentityProviderOAuth2Discovery, \n    },\n    props: {\n        entity: { type: Object as PropType<Partial<OAuth2IdentityProvider>> },\n        discovery: {\n            type: Boolean,\n            default: false,\n        },\n    },\n    emits: ['updated'],\n    setup(props) {\n        const form = reactive({\n            token_url: '',\n            authorize_url: '',\n            user_info_url: '',\n        });\n\n        const $v = useVuelidate({\n            token_url: {\n                required,\n                url,\n            },\n            authorize_url: {\n                required,\n                url,\n            },\n            user_info_url: { url },\n        }, form, { $registerAs: 'endpoint' });\n\n        function init() {\n            form.token_url = '';\n            form.authorize_url = '';\n            form.user_info_url = '';\n\n            if (!props.entity) return;\n\n            assignFormProperties(form, props.entity);\n        }\n\n        const updated = useUpdatedAt(props.entity as IdentityProvider);\n        onChange(updated, () => init());\n\n        init();\n\n        const validationMessages = useTranslationsForNestedValidation($v.value);\n\n        const handleDiscoveryLookup = (data: OpenIDProviderMetadata) => {\n            form.authorize_url = data.authorization_endpoint;\n            form.token_url = data.token_endpoint;\n        };\n\n        return {\n            $v,\n            validationMessages,\n            handleDiscoveryLookup,\n            getVuelidateSeverity,\n        };\n    },\n});\n</script>\n<template>\n    <AIdentityProviderOAuth2Discovery\n        v-if=\"discovery\"\n        @lookup=\"handleDiscoveryLookup\"\n    />\n    <VCFormGroup\n        :label=\"true\"\n        :validation-messages=\"validationMessages.token_url.value\"\n        :validation-severity=\"getVuelidateSeverity($v.token_url)\"\n    >\n        <template #label>\n            Token\n        </template>\n        <VCFormInput\n            v-model=\"$v.token_url.$model\"\n            placeholder=\"https://...\"\n        />\n    </VCFormGroup>\n    <VCFormGroup\n        :label=\"true\"\n        :validation-messages=\"validationMessages.authorize_url.value\"\n        :validation-severity=\"getVuelidateSeverity($v.authorize_url)\"\n    >\n        <template #label>\n            Authorize\n        </template>\n        <VCFormInput\n            v-model=\"$v.authorize_url.$model\"\n            placeholder=\"https://...\"\n        />\n    </VCFormGroup>\n    <VCFormGroup\n        :label=\"true\"\n        :validation-messages=\"validationMessages.user_info_url.value\"\n        :validation-severity=\"getVuelidateSeverity($v.user_info_url)\"\n    >\n        <template #label>\n            UserInfo\n        </template>\n        <VCFormInput\n            v-model=\"$v.user_info_url.$model\"\n            placeholder=\"https://...\"\n        />\n    </VCFormGroup>\n</template>\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport useVuelidate from '@vuelidate/core';\nimport type {\n    PropType,\n    VNodeArrayChildren, \n    VNodeChild,\n} from 'vue';\nimport {\n    computed,\n    defineComponent,\n    h, \n    nextTick,\n    ref,\n} from 'vue';\nimport type {\n    IdentityProvider,\n    IdentityProviderPreset, \n    OAuth2IdentityProvider,\n} from '@authup/core-kit';\nimport { EntityType, IdentityProviderProtocol } from '@authup/core-kit';\nimport {\n    buildFormGroup,\n    buildFormInput,\n} from '@vuecs/form-controls';\nimport { onChange, useIsEditing } from '../../../composables';\nimport {\n    buildFormSubmitWithTranslations,\n    createFormSubmitTranslations,\n    extractVuelidateResultsFromChild,\n    injectHTTPClient,\n} from '../../../core';\nimport { defineEntityManager, defineEntityVEmitOptions } from '../../utility';\nimport { AIdentityProviderBasicFields } from './AIdentityProviderBasicFields';\nimport { AIdentityProviderOAuth2ClientFields } from './AIdentityProviderOAuth2ClientFields';\nimport AIdentityProviderOAuth2EndpointFields from './AIdentityProviderOAuth2EndpointFields.vue';\nimport { AIdentityProviderPreset } from './AIdentityProviderPreset';\nimport { AIdentityProviderProtocol } from './AIdentityProviderProtocol';\nimport type { IdentityProviderPresetElement } from './preset';\nimport type { IdentityProviderProtocolElement } from './protocol';\n\nexport const AIdentityProviderOAuth2Form = defineComponent({\n    components: {\n        IdentityProviderBasicFields: AIdentityProviderBasicFields,\n        IdentityProviderClientFields: AIdentityProviderOAuth2ClientFields,\n    },\n    props: {\n        entity: {\n            type: Object as PropType<IdentityProvider>,\n            required: false,\n            default: undefined,\n        },\n        realmId: {\n            type: String,\n            default: undefined,\n        },\n        protocol: {\n            type: String as PropType<string | null>,\n            default: IdentityProviderProtocol.OAUTH2,\n        },\n        preset: { type: String as PropType<string | null> },\n    },\n    emits: defineEntityVEmitOptions<IdentityProvider>(),\n    setup(props, ctx) {\n        const apiClient = injectHTTPClient();\n        const manager = defineEntityManager({\n            type: `${EntityType.IDENTITY_PROVIDER}`,\n            setup: ctx,\n            props,\n        });\n\n        const protocol = computed(() => {\n            if (manager.data.value) {\n                return manager.data.value.protocol;\n            }\n\n            return props.protocol;\n        });\n\n        const preset = computed(() => {\n            if (manager.data.value) {\n                return manager.data.value.preset;\n            }\n\n            return props.preset;\n        });\n\n        const busy = ref(false);\n\n        const $v = useVuelidate({ $stopPropagation: true });\n\n        const isEditing = useIsEditing(manager.data);\n\n        const authorizeUri = computed<string>(() => {\n            if (!manager.data.value) {\n                return '';\n            }\n\n            return apiClient.identityProvider.getAuthorizeUri(manager.data.value.id);\n        });\n\n        const basicFieldsNode = ref<null | typeof AIdentityProviderBasicFields>(null);\n\n        onChange(preset, () => {\n            if (!basicFieldsNode.value) {\n                return;\n            }\n\n            if (preset.value) {\n                basicFieldsNode.value.assign({\n                    name: preset.value,\n                    slug: preset.value,\n                });\n\n                return;\n            }\n\n            basicFieldsNode.value.assign({\n                name: '',\n                slug: '',\n            });\n        });\n        function initForm() {\n            nextTick(() => {\n                if (\n                    !manager.data.value &&\n                    preset.value &&\n                    basicFieldsNode.value\n                ) {\n                    basicFieldsNode.value.assign({\n                        name: preset.value,\n                        slug: preset.value,\n                    });\n                }\n            });\n        }\n\n        initForm();\n\n        const submit = async () => {\n            if ($v.value.$invalid) {\n                return;\n            }\n\n            const data : Partial<IdentityProvider> = {\n                ...extractVuelidateResultsFromChild($v, 'basic'),\n                ...extractVuelidateResultsFromChild($v, 'client'),\n                ...extractVuelidateResultsFromChild($v, 'endpoint'),\n            };\n\n            if (protocol.value) {\n                data.protocol = protocol.value as IdentityProviderProtocol;\n            }\n\n            if (preset.value) {\n                data.preset = preset.value as IdentityProviderPreset;\n            }\n\n            await manager.createOrUpdate(data);\n        };\n\n        const submitTranslations = createFormSubmitTranslations();\n\n        return () => {\n            let headerNode : VNodeChild;\n\n            if (!manager.data.value) {\n                if (preset.value) {\n                    headerNode = h(AIdentityProviderPreset, {\n                        key: preset.value,\n                        id: preset.value,\n                    }, {\n                        default: (element: IdentityProviderPresetElement) => h('div', [\n                            h('h4', { class: 'mb-3' }, [\n                                h('i', { class: [element.icon, 'pe-1'] }),\n                                element.name,\n                            ]),\n                        ]),\n                    });\n                } else {\n                    headerNode = h(AIdentityProviderProtocol, {\n                        key: protocol.value!,\n                        id: protocol.value!,\n                    }, {\n                        default: (element: IdentityProviderProtocolElement) => h('div', [\n                            h('h4', { class: 'mb-3' }, [\n                                h('i', { class: [element.icon, 'pe-1'] }),\n                                element.name,\n                            ]),\n                        ]),\n                    });\n                }\n            }\n\n            let detailsNode : VNodeArrayChildren = [];\n            if (isEditing.value) {\n                detailsNode = [\n                    h('h6', [\n                        h('i', { class: 'fas fa-info-circle' }),\n                        ' ',\n                        'Details',\n                    ]),\n                    buildFormGroup({\n                        label: true,\n                        labelContent: 'Redirect URL',\n                        content: buildFormInput({\n                            value: authorizeUri,\n                            props: { disabled: true },\n                        }),\n                    }),\n                    h('hr'),\n                ];\n            }\n\n            const basicNode : VNodeChild = [\n                h('h6', [\n                    h('i', { class: 'fa fa-wrench' }),\n                    ' ',\n                    'Basic',\n                ]),\n                h(AIdentityProviderBasicFields, {\n                    ref: basicFieldsNode,\n                    entity: manager.data.value,\n                }),\n            ];\n\n            const securityNode : VNodeChild = [\n                h('h6', [\n                    h('i', { class: 'fa fa-lock' }),\n                    ' ',\n                    'Security',\n                ]),\n                h(AIdentityProviderOAuth2ClientFields, { entity: manager.data.value as OAuth2IdentityProvider }),\n            ];\n\n            let endpointsNode : VNodeChild;\n            if (!preset.value) {\n                endpointsNode = [\n                    h('h6', [\n                        h('i', { class: 'fa-solid fa-vihara' }),\n                        ' ',\n                        'Endpoints',\n                    ]),\n                    h(\n                        AIdentityProviderOAuth2EndpointFields,\n                        {\n                            entity: manager.data.value as OAuth2IdentityProvider,\n                            discovery: protocol.value === IdentityProviderProtocol.OIDC,\n                        },\n                    ),\n                ];\n            }\n\n            const submitNode = buildFormSubmitWithTranslations({\n                submit,\n                busy: busy.value,\n                isEditing: isEditing.value,\n                invalid: $v.value.$invalid,\n            }, submitTranslations);\n\n            return h('form', {\n                onSubmit($event: any) {\n                    $event.preventDefault();\n\n                    return submit.call(null);\n                },\n            }, [\n                headerNode,\n                detailsNode,\n                h('div', { class: 'row' }, [\n                    h('div', { class: 'col' }, [\n                        basicNode,\n                    ]),\n                    h('div', { class: 'col' }, [\n                        securityNode,\n                    ]),\n                ]),\n                h('hr'),\n                endpointsNode,\n                submitNode,\n            ]);\n        };\n    },\n});\n\nexport default AIdentityProviderOAuth2Form;\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n    defineComponent, \n    h, \n    ref, \n    toRef,\n} from 'vue';\nimport { IdentityProviderProtocol, getIdentityProviderProtocolForPreset } from '@authup/core-kit';\nimport type { IdentityProvider, IdentityProviderPreset } from '@authup/core-kit';\nimport type { PropType, VNodeChild } from 'vue';\nimport { onChange, useUpdatedAt } from '../../../composables';\nimport { AIdentityProviderLdapForm } from './AIdentityProviderLdapForm';\nimport AIdentityProviderPicker from './AIdentityProviderPicker.vue';\nimport { AIdentityProviderOAuth2Form } from './AIdentityProviderOAuth2Form';\n\nexport const AIdentityProviderForm = defineComponent({\n    props: {\n        entity: { type: Object as PropType<IdentityProvider> },\n        realmId: { type: String },\n    },\n    emits: ['created', 'deleted', 'updated', 'failed'],\n    setup(props, setup) {\n        const protocol = ref<string | null>(null);\n        const preset = ref<string | null>(null);\n\n        const entity = toRef(props, 'entity');\n        const updatedAt = useUpdatedAt(entity);\n\n        const set = () => {\n            if (entity.value) {\n                if (entity.value.preset) {\n                    preset.value = entity.value.preset;\n                }\n\n                if (entity.value.protocol) {\n                    protocol.value = entity.value.protocol;\n                }\n            }\n        };\n\n        set();\n\n        onChange(updatedAt, () => set());\n\n        const renderPicker = () : VNodeChild => h(\n            AIdentityProviderPicker,\n            {\n                protocol: protocol.value ?? undefined,\n                preset: preset.value ?? undefined,\n                onPick(type: 'protocol' | 'preset', value: string) {\n                    if (type === 'preset') {\n                        preset.value = value;\n                        protocol.value = `${getIdentityProviderProtocolForPreset(value as IdentityProviderPreset)}`;\n                        return;\n                    }\n\n                    protocol.value = value;\n                    preset.value = null;\n                },\n            },\n        );\n\n        const render = (node: VNodeChild) : VNodeChild => {\n            if (!entity.value) {\n                return [\n                    renderPicker(),\n                    h('hr'),\n                    node,\n                ];\n            }\n\n            return node;\n        };\n\n        return () => {\n            if (!protocol.value && !preset.value) {\n                return renderPicker();\n            }\n\n            if (protocol.value) {\n                switch (protocol.value) {\n                    case IdentityProviderProtocol.OAUTH2:\n                    case IdentityProviderProtocol.OIDC: {\n                        return render(h(AIdentityProviderOAuth2Form, {\n                            entity: entity.value,\n                            realmId: props.realmId,\n                            protocol: protocol.value,\n                            preset: preset.value,\n                            onCreated: (el: IdentityProvider) => {\n                                entity.value = el;\n\n                                setup.emit('created', el);\n                            },\n                            onUpdated: (el: IdentityProvider) => {\n                                entity.value = el;\n\n                                setup.emit('updated', el);\n                            },\n                        }));\n                    }\n                    case IdentityProviderProtocol.LDAP: {\n                        return render(h(AIdentityProviderLdapForm, {\n                            entity: entity.value,\n                            realmId: props.realmId,\n                            onCreated: (el: IdentityProvider) => {\n                                entity.value = el;\n\n                                setup.emit('created', el);\n                            },\n                            onUpdated: (el: IdentityProvider) => {\n                                entity.value = el;\n\n                                setup.emit('updated', el);\n                            },\n                        }));\n                    }\n                }\n            }\n\n            let prefix : string | undefined;\n            if (protocol.value) {\n                prefix = protocol.value;\n            }\n            if (preset.value) {\n                prefix = preset.value;\n            }\n\n            return render(h('div', { class: 'alert alert-warning alert-sm' }, [\n                `${prefix} is not supported yet :/`,\n            ]));\n        };\n    },\n});\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { IdentityProvider } from '@authup/core-kit';\nimport type { EntityCollectionVSlots } from '../../utility';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    TranslatorTranslationVuecsKey,\n    useTranslation,\n} from '../../../core';\nimport {\n\n    defineEntityCollectionManager,\n    defineEntityCollectionVEmitOptions,\n    defineEntityCollectionVProps,\n} from '../../utility';\n\nexport const AIdentityProviders = defineComponent({\n    props: defineEntityCollectionVProps<IdentityProvider>(),\n    emits: defineEntityCollectionVEmitOptions<IdentityProvider>(),\n    slots: Object as SlotsType<EntityCollectionVSlots<IdentityProvider>>,\n    setup(props, ctx) {\n        const { render } = defineEntityCollectionManager({\n            type: `${EntityType.IDENTITY_PROVIDER}`,\n            props,\n            setup: ctx,\n        });\n\n        const translationName = useTranslation({\n            group: TranslatorTranslationGroup.DEFAULT,\n            key: TranslatorTranslationDefaultKey.IDENTITY_PROVIDERS,\n        });\n\n        const translation = useTranslation({\n            group: TranslatorTranslationGroup.VUECS,\n            key: TranslatorTranslationVuecsKey.NO_MORE,\n            data: { name: translationName },\n        });\n\n        return () => render({ noMore: { content: translation.value } });\n    },\n});\n\nexport default AIdentityProviders;\n","<!--\n  Copyright (c) 2023.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport type { IdentityProvider } from '@authup/core-kit';\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { AIdentityProviderPreset } from './AIdentityProviderPreset';\nimport { AIdentityProviderProtocol } from './AIdentityProviderProtocol';\n\nexport default defineComponent({\n    components: { AIdentityProviderPreset, AIdentityProviderProtocol },\n    inheritAttrs: false,\n    props: {\n        entity: {\n            type: Object as PropType<IdentityProvider>,\n            required: true,\n        },\n    },\n});\n</script>\n<template>\n    <AIdentityProviderPreset\n        v-if=\"entity.preset\"\n        :id=\"entity.preset\"\n    >\n        <template #default=\"item\">\n            <i :class=\"[item.icon, $attrs.class]\" />\n        </template>\n    </AIdentityProviderPreset>\n    <AIdentityProviderProtocol\n        v-else-if=\"entity.protocol\"\n        :id=\"entity.protocol\"\n    >\n        <template #default=\"item\">\n            <i :class=\"[item.icon, $attrs.class]\" />\n        </template>\n    </AIdentityProviderProtocol>\n</template>\n","<!--\n  Copyright (c) 2023.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport type { IdentityProvider } from '@authup/core-kit';\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { AIdentityProviderPreset } from './AIdentityProviderPreset';\nimport { AIdentityProviderProtocol } from './AIdentityProviderProtocol';\n\nexport default defineComponent({\n    components: { AIdentityProviderPreset, AIdentityProviderProtocol },\n    inheritAttrs: false,\n    props: {\n        entity: {\n            type: Object as PropType<IdentityProvider>,\n            required: true,\n        },\n    },\n});\n</script>\n<template>\n    <AIdentityProviderPreset\n        v-if=\"entity.preset\"\n        :id=\"entity.preset\"\n    >\n        <template #default=\"item\">\n            <i :class=\"[item.icon, $attrs.class]\" />\n        </template>\n    </AIdentityProviderPreset>\n    <AIdentityProviderProtocol\n        v-else-if=\"entity.protocol\"\n        :id=\"entity.protocol\"\n    >\n        <template #default=\"item\">\n            <i :class=\"[item.icon, $attrs.class]\" />\n        </template>\n    </AIdentityProviderProtocol>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport useVuelidate from '@vuelidate/core';\nimport { maxLength, minLength } from '@vuelidate/validators';\nimport type { PropType } from 'vue';\nimport { defineComponent, reactive, ref } from 'vue';\nimport type { IdentityProviderRoleMapping, Role } from '@authup/core-kit';\nimport { VCFormGroup, VCFormInput, VCFormInputCheckbox } from '@vuecs/form-controls';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    assignFormProperties,\n    getVuelidateSeverity,\n    useTranslationsForGroup,\n    useTranslationsForNestedValidation,\n} from '../../../core';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\n\nexport default defineComponent({\n    components: {\n        VCFormGroup, \n        VCFormInput, \n        VCFormInputCheckbox, \n    },\n    props: {\n        role: {\n            type: Object as PropType<Role>,\n            required: true,\n        },\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    emits: defineEntityVEmitOptions<IdentityProviderRoleMapping>(),\n    async setup(props, setup) {\n        const display = ref(false);\n        const toggleDisplay = () => {\n            display.value = !display.value;\n        };\n\n        const form = reactive({\n            name: '',\n            value: '',\n            value_is_regex: false,\n        });\n\n        const $v = useVuelidate({\n            name: {\n                minLength: minLength(3),\n                maxLength: maxLength(32),\n            },\n            value: {\n                minLength: minLength(3),\n                maxLength: maxLength(128),\n            },\n            value_is_regex: {},\n        }, form);\n\n        const validationMessages = useTranslationsForNestedValidation($v.value);\n        const translationsDefault = useTranslationsForGroup(\n            TranslatorTranslationGroup.DEFAULT,\n            [\n                { key: TranslatorTranslationDefaultKey.VALUE_IS_REGEX },\n            ],\n        );\n\n        const manager = defineEntityManager({\n            type: `${EntityType.IDENTITY_PROVIDER_ROLE_MAPPING}`,\n            setup,\n            socket: {\n                processEvent(event) {\n                    return event.data.role_id === props.role.id &&\n                        event.data.provider_id === props.entityId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    role_id: props.role.id,\n                    provider_id: props.entityId,\n                },\n            },\n        });\n\n        if (manager.data.value) {\n            assignFormProperties(form, manager.data.value);\n        }\n\n        const handleSaveOrCreate = (e: Event) => {\n            e.preventDefault();\n\n            if (manager.data.value) {\n                return manager.update(form);\n            }\n\n            return manager.create({\n                ...form,\n                provider_id: props.entityId,\n                role_id: props.role.id,\n            });\n        };\n\n        const handleDelete = (e: Event) => {\n            e.preventDefault();\n\n            return manager.delete();\n        };\n\n        return {\n            display,\n            toggleDisplay,\n            $v,\n            validationMessages,\n            translationsDefault,\n            manager,\n            handleSaveOrCreate,\n            handleDelete,\n            getVuelidateSeverity,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"list-item flex-column\">\n        <div class=\"d-flex flex-row\">\n            <div class=\"me-2\">\n                <button\n                    class=\"btn btn-xs btn-dark\"\n                    @click.prevent=\"toggleDisplay()\"\n                >\n                    <i\n                        :class=\"['fa', {\n                            'fa-chevron-down': !display,\n                            'fa-chevron-up': display,\n                        }]\"\n                    />\n                </button>\n            </div>\n            <div>\n                <h6\n                    class=\"mb-0\"\n                    @click.prevent=\"toggleDisplay()\"\n                >\n                    {{ role.name }}\n                </h6>\n            </div>\n            <div class=\"ms-auto\">\n                <button\n                    :class=\"['btn btn-xs', {\n                        'btn-primary': !manager.data.value,\n                        'btn-dark': !!manager.data.value,\n                    }]\"\n                    @click=\"handleSaveOrCreate\"\n                >\n                    <i\n                        :class=\"['fa', {\n                            'fa-plus': !manager.data.value,\n                            'fa-save': manager.data.value,\n                        }]\"\n                    />\n                </button>\n                <button\n                    v-if=\"manager.data.value\"\n                    class=\"btn btn-xs btn-danger ms-1\"\n                    :disabled=\"manager.busy.value\"\n                    @click=\"handleDelete\"\n                >\n                    <i class=\"fa fa-trash\" />\n                </button>\n            </div>\n        </div>\n        <div\n            v-if=\"display\"\n            class=\"mt-2\"\n        >\n            <VCFormGroup\n                :label=\"true\"\n                :validation-messages=\"validationMessages.name.value\"\n                :validation-severity=\"getVuelidateSeverity($v.name)\"\n            >\n                <template #label>\n                    Name\n                </template>\n                <VCFormInput\n                    v-model=\"$v.name.$model\"\n                />\n            </VCFormGroup>\n            <VCFormGroup\n                :label=\"true\"\n                :validation-messages=\"validationMessages.value.value\"\n                :validation-severity=\"getVuelidateSeverity($v.value)\"\n            >\n                <template #label>\n                    Value\n                </template>\n                <VCFormInput\n                    v-model=\"$v.value.$model\"\n                />\n            </VCFormGroup>\n            <VCFormGroup\n                :label=\"true\"\n                :validation-messages=\"validationMessages.value_is_regex.value\"\n                :validation-severity=\"getVuelidateSeverity($v.value_is_regex)\"\n            >\n                <template #label>\n                    Regex\n                </template>\n                <VCFormInputCheckbox\n                    v-model=\"$v.value_is_regex.$model\"\n                    group-class=\"form-switch\"\n                    :label-content=\"translationsDefault.valueIsRegex.value\"\n                />\n            </VCFormGroup>\n        </div>\n    </div>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport useVuelidate from '@vuelidate/core';\nimport { maxLength, minLength } from '@vuelidate/validators';\nimport type { PropType } from 'vue';\nimport { defineComponent, reactive, ref } from 'vue';\nimport type { IdentityProviderRoleMapping, Role } from '@authup/core-kit';\nimport { VCFormGroup, VCFormInput, VCFormInputCheckbox } from '@vuecs/form-controls';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    assignFormProperties,\n    getVuelidateSeverity,\n    useTranslationsForGroup,\n    useTranslationsForNestedValidation,\n} from '../../../core';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\n\nexport default defineComponent({\n    components: {\n        VCFormGroup, \n        VCFormInput, \n        VCFormInputCheckbox, \n    },\n    props: {\n        role: {\n            type: Object as PropType<Role>,\n            required: true,\n        },\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    emits: defineEntityVEmitOptions<IdentityProviderRoleMapping>(),\n    async setup(props, setup) {\n        const display = ref(false);\n        const toggleDisplay = () => {\n            display.value = !display.value;\n        };\n\n        const form = reactive({\n            name: '',\n            value: '',\n            value_is_regex: false,\n        });\n\n        const $v = useVuelidate({\n            name: {\n                minLength: minLength(3),\n                maxLength: maxLength(32),\n            },\n            value: {\n                minLength: minLength(3),\n                maxLength: maxLength(128),\n            },\n            value_is_regex: {},\n        }, form);\n\n        const validationMessages = useTranslationsForNestedValidation($v.value);\n        const translationsDefault = useTranslationsForGroup(\n            TranslatorTranslationGroup.DEFAULT,\n            [\n                { key: TranslatorTranslationDefaultKey.VALUE_IS_REGEX },\n            ],\n        );\n\n        const manager = defineEntityManager({\n            type: `${EntityType.IDENTITY_PROVIDER_ROLE_MAPPING}`,\n            setup,\n            socket: {\n                processEvent(event) {\n                    return event.data.role_id === props.role.id &&\n                        event.data.provider_id === props.entityId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    role_id: props.role.id,\n                    provider_id: props.entityId,\n                },\n            },\n        });\n\n        if (manager.data.value) {\n            assignFormProperties(form, manager.data.value);\n        }\n\n        const handleSaveOrCreate = (e: Event) => {\n            e.preventDefault();\n\n            if (manager.data.value) {\n                return manager.update(form);\n            }\n\n            return manager.create({\n                ...form,\n                provider_id: props.entityId,\n                role_id: props.role.id,\n            });\n        };\n\n        const handleDelete = (e: Event) => {\n            e.preventDefault();\n\n            return manager.delete();\n        };\n\n        return {\n            display,\n            toggleDisplay,\n            $v,\n            validationMessages,\n            translationsDefault,\n            manager,\n            handleSaveOrCreate,\n            handleDelete,\n            getVuelidateSeverity,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"list-item flex-column\">\n        <div class=\"d-flex flex-row\">\n            <div class=\"me-2\">\n                <button\n                    class=\"btn btn-xs btn-dark\"\n                    @click.prevent=\"toggleDisplay()\"\n                >\n                    <i\n                        :class=\"['fa', {\n                            'fa-chevron-down': !display,\n                            'fa-chevron-up': display,\n                        }]\"\n                    />\n                </button>\n            </div>\n            <div>\n                <h6\n                    class=\"mb-0\"\n                    @click.prevent=\"toggleDisplay()\"\n                >\n                    {{ role.name }}\n                </h6>\n            </div>\n            <div class=\"ms-auto\">\n                <button\n                    :class=\"['btn btn-xs', {\n                        'btn-primary': !manager.data.value,\n                        'btn-dark': !!manager.data.value,\n                    }]\"\n                    @click=\"handleSaveOrCreate\"\n                >\n                    <i\n                        :class=\"['fa', {\n                            'fa-plus': !manager.data.value,\n                            'fa-save': manager.data.value,\n                        }]\"\n                    />\n                </button>\n                <button\n                    v-if=\"manager.data.value\"\n                    class=\"btn btn-xs btn-danger ms-1\"\n                    :disabled=\"manager.busy.value\"\n                    @click=\"handleDelete\"\n                >\n                    <i class=\"fa fa-trash\" />\n                </button>\n            </div>\n        </div>\n        <div\n            v-if=\"display\"\n            class=\"mt-2\"\n        >\n            <VCFormGroup\n                :label=\"true\"\n                :validation-messages=\"validationMessages.name.value\"\n                :validation-severity=\"getVuelidateSeverity($v.name)\"\n            >\n                <template #label>\n                    Name\n                </template>\n                <VCFormInput\n                    v-model=\"$v.name.$model\"\n                />\n            </VCFormGroup>\n            <VCFormGroup\n                :label=\"true\"\n                :validation-messages=\"validationMessages.value.value\"\n                :validation-severity=\"getVuelidateSeverity($v.value)\"\n            >\n                <template #label>\n                    Value\n                </template>\n                <VCFormInput\n                    v-model=\"$v.value.$model\"\n                />\n            </VCFormGroup>\n            <VCFormGroup\n                :label=\"true\"\n                :validation-messages=\"validationMessages.value_is_regex.value\"\n                :validation-severity=\"getVuelidateSeverity($v.value_is_regex)\"\n            >\n                <template #label>\n                    Regex\n                </template>\n                <VCFormInputCheckbox\n                    v-model=\"$v.value_is_regex.$model\"\n                    group-class=\"form-switch\"\n                    :label-content=\"translationsDefault.valueIsRegex.value\"\n                />\n            </VCFormGroup>\n        </div>\n    </div>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport AIdentityProviderRoleAssignment from './AIdentityProviderRoleAssignment.vue';\nimport { ARoles } from '../role';\n\nexport default defineComponent({\n    components: { ARoles, AIdentityProviderRoleAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'body')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <ARoles :header-title=\"false\">\n        <template #body=\"slotProps\">\n            <AIdentityProviderRoleAssignment\n                v-for=\"item in slotProps.data\"\n                :key=\"item.id\"\n                :entity-id=\"entityId\"\n                :role=\"item\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </ARoles>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport AIdentityProviderRoleAssignment from './AIdentityProviderRoleAssignment.vue';\nimport { ARoles } from '../role';\n\nexport default defineComponent({\n    components: { ARoles, AIdentityProviderRoleAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'body')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <ARoles :header-title=\"false\">\n        <template #body=\"slotProps\">\n            <AIdentityProviderRoleAssignment\n                v-for=\"item in slotProps.data\"\n                :key=\"item.id\"\n                :entity-id=\"entityId\"\n                :role=\"item\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </ARoles>\n</template>\n","<script lang=\"ts\">\nimport type { AttributeNamesPolicy } from '@authup/access';\nimport type { Policy } from '@authup/core-kit';\nimport useVuelidate from '@vuelidate/core';\nimport type { PropType } from 'vue';\nimport { defineComponent, reactive } from 'vue';\nimport { onChange, useUpdatedAt } from '../../../../composables';\nimport AFormInputList from '../../../utility/form-input-list/AFormInputList.vue';\n\nexport default defineComponent({\n    components: { AFormInputList },\n    props: { entity: { type: Object as PropType<Partial<Policy>> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const form = reactive<{ names: string[] }>({ names: [] });\n\n        const vuelidate = useVuelidate({ names: {} }, form, { $registerAs: 'type' });\n\n        function assign(data: Partial<AttributeNamesPolicy> = {}) {\n            form.names = data.names || [];\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as Policy);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const handleUpdated = (data: string[]) => {\n            form.names = data;\n            setup.emit('updated', data);\n        };\n\n        return {\n            handleUpdated,\n\n            vuelidate,\n        };\n    },\n});\n</script>\n<template>\n    <AFormInputList\n        :names=\"vuelidate.names.$model\"\n        :min-items=\"1\"\n        @changed=\"handleUpdated\"\n    />\n</template>\n","<script lang=\"ts\">\nimport type { AttributeNamesPolicy } from '@authup/access';\nimport type { Policy } from '@authup/core-kit';\nimport useVuelidate from '@vuelidate/core';\nimport type { PropType } from 'vue';\nimport { defineComponent, reactive } from 'vue';\nimport { onChange, useUpdatedAt } from '../../../../composables';\nimport AFormInputList from '../../../utility/form-input-list/AFormInputList.vue';\n\nexport default defineComponent({\n    components: { AFormInputList },\n    props: { entity: { type: Object as PropType<Partial<Policy>> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const form = reactive<{ names: string[] }>({ names: [] });\n\n        const vuelidate = useVuelidate({ names: {} }, form, { $registerAs: 'type' });\n\n        function assign(data: Partial<AttributeNamesPolicy> = {}) {\n            form.names = data.names || [];\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as Policy);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const handleUpdated = (data: string[]) => {\n            form.names = data;\n            setup.emit('updated', data);\n        };\n\n        return {\n            handleUpdated,\n\n            vuelidate,\n        };\n    },\n});\n</script>\n<template>\n    <AFormInputList\n        :names=\"vuelidate.names.$model\"\n        :min-items=\"1\"\n        @changed=\"handleUpdated\"\n    />\n</template>\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { Policy } from '@authup/core-kit';\nimport type { EntityManager } from '../../utility';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n    renderToggleButton,\n} from '../../utility';\n\nexport const APolicyParentAssignment = defineComponent({\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n        entity: { type: Object as PropType<Policy> },\n        parentId: {\n            type: String,\n            required: true,\n        },\n    },\n    emits: defineEntityVEmitOptions<Policy>(),\n    async setup(props, setup) {\n        const manager : EntityManager<Policy> = defineEntityManager({\n            type: `${EntityType.POLICY}`,\n            setup,\n            socket: {\n                processEvent(event) {\n                    return event.data.id === props.entityId;\n                },\n            },\n            props: {\n                entity: props.entity,\n                entityId: props.entityId,\n            },\n        });\n\n        await manager.resolve({ query: { filters: { id: props.entityId } } });\n\n        return () => renderToggleButton({\n            changed: (value) => {\n                if (!manager.data.value) {\n                    return;\n                }\n\n                if (value) {\n                    manager.data.value.parent_id = props.parentId;\n                } else {\n                    manager.data.value.parent_id = null;\n                    if (manager.data.value.parent) {\n                        manager.data.value.parent = null;\n                    }\n                }\n\n                manager.update(manager.data.value);\n            },\n            value: !!manager.data.value &&\n                manager.data.value.parent_id === props.parentId,\n            isBusy: manager.busy.value,\n        });\n    },\n});\n","<!--\n  Copyright (c) 2025.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport type { Policy } from '@authup/core-kit';\nimport { SlotName } from '@vuecs/list-controls';\nimport type { SlotsType } from 'vue';\nimport { defineComponent, h } from 'vue';\nimport { defineEntityPicker, defineEntityPickerVEmitOptions, defineEntityPickerVProps } from '../../utility';\nimport type { EntityPickerVSlots } from '../../utility';\nimport { APolicies } from './APolicies';\nimport { APolicyParentAssignment } from './APolicyParentAssignment';\n\nexport default defineComponent({\n    props: {\n        parentId: { type: String },\n        ...defineEntityPickerVProps<Policy>(),\n    },\n    emits: defineEntityPickerVEmitOptions<Policy>(),\n    slots: Object as SlotsType<EntityPickerVSlots<Policy>>,\n    setup(props, {\n        slots,\n        ...setup\n    }) {\n        const { render } = defineEntityPicker({\n            component: APolicies,\n            props,\n            setup: {\n                ...setup,\n                slots: {\n                    ...(\n                        props.parentId ? {\n                            [SlotName.ITEM_ACTIONS]: (\n                                slotProps: EntityPickerVSlots<Policy>['itemActions'],\n                            ) => h(APolicyParentAssignment, {\n                                entity: slotProps.data,\n                                entityId: slotProps.data.id,\n                                parentId: props.parentId as string,\n                            }),\n                        } : {}\n                    ),\n                    ...slots,\n                },\n            },\n        });\n\n        return () => render();\n    },\n});\n</script>\n","<!--\n  Copyright (c) 2025.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport type { Policy } from '@authup/core-kit';\nimport { SlotName } from '@vuecs/list-controls';\nimport type { SlotsType } from 'vue';\nimport { defineComponent, h } from 'vue';\nimport { defineEntityPicker, defineEntityPickerVEmitOptions, defineEntityPickerVProps } from '../../utility';\nimport type { EntityPickerVSlots } from '../../utility';\nimport { APolicies } from './APolicies';\nimport { APolicyParentAssignment } from './APolicyParentAssignment';\n\nexport default defineComponent({\n    props: {\n        parentId: { type: String },\n        ...defineEntityPickerVProps<Policy>(),\n    },\n    emits: defineEntityPickerVEmitOptions<Policy>(),\n    slots: Object as SlotsType<EntityPickerVSlots<Policy>>,\n    setup(props, {\n        slots,\n        ...setup\n    }) {\n        const { render } = defineEntityPicker({\n            component: APolicies,\n            props,\n            setup: {\n                ...setup,\n                slots: {\n                    ...(\n                        props.parentId ? {\n                            [SlotName.ITEM_ACTIONS]: (\n                                slotProps: EntityPickerVSlots<Policy>['itemActions'],\n                            ) => h(APolicyParentAssignment, {\n                                entity: slotProps.data,\n                                entityId: slotProps.data.id,\n                                parentId: props.parentId as string,\n                            }),\n                        } : {}\n                    ),\n                    ...slots,\n                },\n            },\n        });\n\n        return () => render();\n    },\n});\n</script>\n","<script lang=\"ts\">\nimport type { BuildInput, FiltersBuildInput } from 'rapiq';\nimport {\n    type PropType,\n    computed,\n    defineComponent,\n    reactive,\n} from 'vue';\nimport useVuelidate from '@vuelidate/core';\nimport type { Policy } from '@authup/core-kit';\nimport { DecisionStrategy } from '@authup/kit';\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport type { FormSelectOption } from '@vuecs/form-controls';\nimport { VCFormGroup, VCFormSelect } from '@vuecs/form-controls';\nimport { onChange, useUpdatedAt } from '../../../../composables';\nimport APolicyPicker from '../APolicyPicker.vue';\n\nexport default defineComponent({\n    components: {\n        APolicyChildrenPicker: APolicyPicker,\n        VCFormGroup,\n        VCFormSelect,\n        IVuelidate,\n    },\n    props: { entity: { type: Object as PropType<Partial<Policy>> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const form = reactive<{ items: string[], decision_strategy: string }>({\n            items: [],\n            decision_strategy: '',\n        });\n\n        const decisionStrategyOptions : FormSelectOption[] = Object.values(DecisionStrategy)\n            .map((value) => ({\n                id: value,\n                value,\n            }));\n\n        const id = computed(() => {\n            if (!props.entity) {\n                return undefined;\n            }\n\n            return props.entity.id;\n        });\n\n        const vuelidate = useVuelidate({ items: {}, decision_strategy: {} }, form, { $registerAs: 'type' });\n\n        const query = computed<BuildInput<Policy & { parent_id?: string | null }>>(() => {\n            const filters : FiltersBuildInput<Policy & { parent_id?: string | null }> = {};\n            if (props.entity) {\n                // todo: maybe respect manual realmId component prop\n                if (props.entity.realm_id) {\n                    filters.realm_id = props.entity.realm_id;\n                }\n\n                if (props.entity.parent_id) {\n                    filters.id = [\n                        `!${props.entity.id}`,\n                        `!${props.entity.parent_id}`,\n                    ];\n                } else {\n                    filters.id = `!${props.entity.id}`;\n                }\n\n                filters.parent_id = [null, `${props.entity.id}`];\n            } else {\n                filters.parent_id = null;\n            }\n\n            return {\n                filters,\n                sort: { name: 'ASC' },\n            };\n        });\n\n        function assign(data: Partial<Policy> = {}) {\n            if (data.children) {\n                form.items = data.children\n                    .map((child) => child.id)\n                    .filter((id): id is string => !!id);\n            } else {\n                form.items = [];\n            }\n\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            const record = data as Record<string, any>;\n            if (record.decision_strategy) {\n                form.decision_strategy = record.decision_strategy;\n            } else {\n                form.decision_strategy = '';\n            }\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as Policy);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const handleUpdated = (children: string[]) => {\n            form.items = children;\n            emitUpdated();\n        };\n\n        const decisionStrategyHint = computed(() => {\n            switch (form.decision_strategy) {\n                case DecisionStrategy.AFFIRMATIVE:\n                    return 'At least one child policy must evaluate positively.';\n                case DecisionStrategy.CONSENSUS:\n                    return 'More child policies must evaluate positively than negatively.';\n                case DecisionStrategy.UNANIMOUS:\n                    return 'All child policies must evaluate positively.';\n                default:\n                    return 'No strategy selected. Defaults to unanimous (all child policies must evaluate positively).';\n            }\n        });\n\n        const handleDecisionStrategyUpdated = () => {\n            emitUpdated();\n        };\n\n        const emitUpdated = () => {\n            setup.emit('updated', {\n                data: [\n                    ...form.items,\n                ],\n                decision_strategy: form.decision_strategy || undefined,\n                valid: !vuelidate.value.$invalid,\n            });\n        };\n\n        return {\n            id,\n\n            handleUpdated,\n            handleDecisionStrategyUpdated,\n\n            decisionStrategyHint,\n            decisionStrategyOptions,\n            vuelidate,\n\n            query,\n        };\n    },\n});\n</script>\n<template>\n    <div>\n        <IVuelidate :validation=\"vuelidate.decision_strategy\">\n            <template #default=\"props\">\n                <VCFormGroup\n                    :validation-messages=\"props.data\"\n                    :validation-severity=\"props.severity\"\n                >\n                    <template #label>\n                        Decision Strategy\n                    </template>\n                    <VCFormSelect\n                        v-model=\"vuelidate.decision_strategy.$model\"\n                        :options=\"decisionStrategyOptions\"\n                        :option-default=\"true\"\n                        :option-default-value=\"'-- None (default: unanimous) --'\"\n                        @change=\"handleDecisionStrategyUpdated\"\n                    />\n                    <div class=\"alert alert-sm alert-info mt-1 mb-0\">\n                        {{ decisionStrategyHint }}\n                    </div>\n                </VCFormGroup>\n            </template>\n        </IVuelidate>\n        <IVuelidate :validation=\"vuelidate.items\">\n            <template #default=\"props\">\n                <VCFormGroup\n                    :validation-messages=\"props.data\"\n                    :validation-severity=\"props.severity\"\n                >\n                    <template #label>\n                        Children\n                    </template>\n                    <APolicyChildrenPicker\n                        :parent-id=\"id\"\n                        :query=\"query\"\n                        :value=\"vuelidate.items.$model\"\n                        @change=\"handleUpdated\"\n                    />\n                </VCFormGroup>\n            </template>\n        </IVuelidate>\n    </div>\n</template>\n","<script lang=\"ts\">\nimport type { BuildInput, FiltersBuildInput } from 'rapiq';\nimport {\n    type PropType,\n    computed,\n    defineComponent,\n    reactive,\n} from 'vue';\nimport useVuelidate from '@vuelidate/core';\nimport type { Policy } from '@authup/core-kit';\nimport { DecisionStrategy } from '@authup/kit';\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport type { FormSelectOption } from '@vuecs/form-controls';\nimport { VCFormGroup, VCFormSelect } from '@vuecs/form-controls';\nimport { onChange, useUpdatedAt } from '../../../../composables';\nimport APolicyPicker from '../APolicyPicker.vue';\n\nexport default defineComponent({\n    components: {\n        APolicyChildrenPicker: APolicyPicker,\n        VCFormGroup,\n        VCFormSelect,\n        IVuelidate,\n    },\n    props: { entity: { type: Object as PropType<Partial<Policy>> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const form = reactive<{ items: string[], decision_strategy: string }>({\n            items: [],\n            decision_strategy: '',\n        });\n\n        const decisionStrategyOptions : FormSelectOption[] = Object.values(DecisionStrategy)\n            .map((value) => ({\n                id: value,\n                value,\n            }));\n\n        const id = computed(() => {\n            if (!props.entity) {\n                return undefined;\n            }\n\n            return props.entity.id;\n        });\n\n        const vuelidate = useVuelidate({ items: {}, decision_strategy: {} }, form, { $registerAs: 'type' });\n\n        const query = computed<BuildInput<Policy & { parent_id?: string | null }>>(() => {\n            const filters : FiltersBuildInput<Policy & { parent_id?: string | null }> = {};\n            if (props.entity) {\n                // todo: maybe respect manual realmId component prop\n                if (props.entity.realm_id) {\n                    filters.realm_id = props.entity.realm_id;\n                }\n\n                if (props.entity.parent_id) {\n                    filters.id = [\n                        `!${props.entity.id}`,\n                        `!${props.entity.parent_id}`,\n                    ];\n                } else {\n                    filters.id = `!${props.entity.id}`;\n                }\n\n                filters.parent_id = [null, `${props.entity.id}`];\n            } else {\n                filters.parent_id = null;\n            }\n\n            return {\n                filters,\n                sort: { name: 'ASC' },\n            };\n        });\n\n        function assign(data: Partial<Policy> = {}) {\n            if (data.children) {\n                form.items = data.children\n                    .map((child) => child.id)\n                    .filter((id): id is string => !!id);\n            } else {\n                form.items = [];\n            }\n\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            const record = data as Record<string, any>;\n            if (record.decision_strategy) {\n                form.decision_strategy = record.decision_strategy;\n            } else {\n                form.decision_strategy = '';\n            }\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as Policy);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const handleUpdated = (children: string[]) => {\n            form.items = children;\n            emitUpdated();\n        };\n\n        const decisionStrategyHint = computed(() => {\n            switch (form.decision_strategy) {\n                case DecisionStrategy.AFFIRMATIVE:\n                    return 'At least one child policy must evaluate positively.';\n                case DecisionStrategy.CONSENSUS:\n                    return 'More child policies must evaluate positively than negatively.';\n                case DecisionStrategy.UNANIMOUS:\n                    return 'All child policies must evaluate positively.';\n                default:\n                    return 'No strategy selected. Defaults to unanimous (all child policies must evaluate positively).';\n            }\n        });\n\n        const handleDecisionStrategyUpdated = () => {\n            emitUpdated();\n        };\n\n        const emitUpdated = () => {\n            setup.emit('updated', {\n                data: [\n                    ...form.items,\n                ],\n                decision_strategy: form.decision_strategy || undefined,\n                valid: !vuelidate.value.$invalid,\n            });\n        };\n\n        return {\n            id,\n\n            handleUpdated,\n            handleDecisionStrategyUpdated,\n\n            decisionStrategyHint,\n            decisionStrategyOptions,\n            vuelidate,\n\n            query,\n        };\n    },\n});\n</script>\n<template>\n    <div>\n        <IVuelidate :validation=\"vuelidate.decision_strategy\">\n            <template #default=\"props\">\n                <VCFormGroup\n                    :validation-messages=\"props.data\"\n                    :validation-severity=\"props.severity\"\n                >\n                    <template #label>\n                        Decision Strategy\n                    </template>\n                    <VCFormSelect\n                        v-model=\"vuelidate.decision_strategy.$model\"\n                        :options=\"decisionStrategyOptions\"\n                        :option-default=\"true\"\n                        :option-default-value=\"'-- None (default: unanimous) --'\"\n                        @change=\"handleDecisionStrategyUpdated\"\n                    />\n                    <div class=\"alert alert-sm alert-info mt-1 mb-0\">\n                        {{ decisionStrategyHint }}\n                    </div>\n                </VCFormGroup>\n            </template>\n        </IVuelidate>\n        <IVuelidate :validation=\"vuelidate.items\">\n            <template #default=\"props\">\n                <VCFormGroup\n                    :validation-messages=\"props.data\"\n                    :validation-severity=\"props.severity\"\n                >\n                    <template #label>\n                        Children\n                    </template>\n                    <APolicyChildrenPicker\n                        :parent-id=\"id\"\n                        :query=\"query\"\n                        :value=\"vuelidate.items.$model\"\n                        @change=\"handleUpdated\"\n                    />\n                </VCFormGroup>\n            </template>\n        </IVuelidate>\n    </div>\n</template>\n","<script lang=\"ts\">\nimport { type PropType, defineComponent, reactive } from 'vue';\nimport useVuelidate from '@vuelidate/core';\nimport type { Policy } from '@authup/core-kit';\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport { VCFormGroup, VCFormInput } from '@vuecs/form-controls';\nimport type { DatePolicy } from '@authup/access';\nimport { assignFormProperties } from '../../../../core';\nimport { onChange, useUpdatedAt } from '../../../../composables';\n\nexport default defineComponent({\n    components: {\n        VCFormInput,\n        VCFormGroup,\n        IVuelidate,\n    },\n    props: { entity: { type: Object as PropType<Partial<Policy>> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const form = reactive({\n            start: '',\n            end: '',\n        });\n\n        const vuelidate = useVuelidate({\n            start: {},\n            end: {},\n        }, form, { $registerAs: 'type' });\n\n        function assign(data: Partial<DatePolicy> = {}) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            assignFormProperties(form, data as Record<string, any>);\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as Policy);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const handleUpdated = () => {\n            setup.emit('updated', {\n                data: form,\n                valid: !vuelidate.value.$invalid,\n            });\n        };\n\n        return {\n            handleUpdated,\n\n            vuelidate,\n        };\n    },\n});\n</script>\n<template>\n    <div>\n        <IVuelidate :validation=\"vuelidate.start\">\n            <template #default=\"props\">\n                <VCFormGroup\n                    :validation-messages=\"props.data\"\n                    :validation-severity=\"props.severity\"\n                >\n                    <template #label>\n                        Start\n                    </template>\n                    <VCFormInput\n                        v-model=\"vuelidate.start.$model\"\n                        placeholder=\"YYYY-MM-DD\"\n                        @change=\"handleUpdated\"\n                    />\n                </VCFormGroup>\n            </template>\n        </IVuelidate>\n\n        <IVuelidate :validation=\"vuelidate.end\">\n            <template #default=\"props\">\n                <VCFormGroup\n                    :validation-messages=\"props.data\"\n                    :validation-severity=\"props.severity\"\n                >\n                    <template #label>\n                        End\n                    </template>\n                    <VCFormInput\n                        v-model=\"vuelidate.end.$model\"\n                        placeholder=\"YYYY-MM-DD\"\n                        @change=\"handleUpdated\"\n                    />\n                </VCFormGroup>\n            </template>\n        </IVuelidate>\n    </div>\n</template>\n","<script lang=\"ts\">\nimport { type PropType, defineComponent, reactive } from 'vue';\nimport useVuelidate from '@vuelidate/core';\nimport type { Policy } from '@authup/core-kit';\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport { VCFormGroup, VCFormInput } from '@vuecs/form-controls';\nimport type { DatePolicy } from '@authup/access';\nimport { assignFormProperties } from '../../../../core';\nimport { onChange, useUpdatedAt } from '../../../../composables';\n\nexport default defineComponent({\n    components: {\n        VCFormInput,\n        VCFormGroup,\n        IVuelidate,\n    },\n    props: { entity: { type: Object as PropType<Partial<Policy>> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const form = reactive({\n            start: '',\n            end: '',\n        });\n\n        const vuelidate = useVuelidate({\n            start: {},\n            end: {},\n        }, form, { $registerAs: 'type' });\n\n        function assign(data: Partial<DatePolicy> = {}) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            assignFormProperties(form, data as Record<string, any>);\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as Policy);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const handleUpdated = () => {\n            setup.emit('updated', {\n                data: form,\n                valid: !vuelidate.value.$invalid,\n            });\n        };\n\n        return {\n            handleUpdated,\n\n            vuelidate,\n        };\n    },\n});\n</script>\n<template>\n    <div>\n        <IVuelidate :validation=\"vuelidate.start\">\n            <template #default=\"props\">\n                <VCFormGroup\n                    :validation-messages=\"props.data\"\n                    :validation-severity=\"props.severity\"\n                >\n                    <template #label>\n                        Start\n                    </template>\n                    <VCFormInput\n                        v-model=\"vuelidate.start.$model\"\n                        placeholder=\"YYYY-MM-DD\"\n                        @change=\"handleUpdated\"\n                    />\n                </VCFormGroup>\n            </template>\n        </IVuelidate>\n\n        <IVuelidate :validation=\"vuelidate.end\">\n            <template #default=\"props\">\n                <VCFormGroup\n                    :validation-messages=\"props.data\"\n                    :validation-severity=\"props.severity\"\n                >\n                    <template #label>\n                        End\n                    </template>\n                    <VCFormInput\n                        v-model=\"vuelidate.end.$model\"\n                        placeholder=\"YYYY-MM-DD\"\n                        @change=\"handleUpdated\"\n                    />\n                </VCFormGroup>\n            </template>\n        </IVuelidate>\n    </div>\n</template>\n","<script lang=\"ts\">\nimport type { IdentityPolicy } from '@authup/access';\nimport type { Policy } from '@authup/core-kit';\nimport useVuelidate from '@vuelidate/core';\nimport type { PropType } from 'vue';\nimport { defineComponent, reactive } from 'vue';\nimport { onChange, useUpdatedAt } from '../../../../composables';\nimport AFormInputList from '../../../utility/form-input-list/AFormInputList.vue';\n\nexport default defineComponent({\n    components: { AFormInputList },\n    props: { entity: { type: Object as PropType<Partial<Policy>> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const form = reactive<{ types: string[] }>({ types: [] });\n\n        const vuelidate = useVuelidate({ types: {} }, form, { $registerAs: 'type' });\n\n        function assign(data: Partial<IdentityPolicy> = {}) {\n            form.types = data.types || [];\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as Policy);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const handleUpdated = (data: string[]) => {\n            form.types = data;\n            setup.emit('updated', data);\n        };\n\n        return {\n            handleUpdated,\n\n            vuelidate,\n        };\n    },\n});\n</script>\n<template>\n    <AFormInputList\n        :names=\"vuelidate.types.$model\"\n        :min-items=\"1\"\n        @changed=\"handleUpdated\"\n    >\n        <template #label>\n            Types\n        </template>\n    </AFormInputList>\n</template>\n","<script lang=\"ts\">\nimport type { IdentityPolicy } from '@authup/access';\nimport type { Policy } from '@authup/core-kit';\nimport useVuelidate from '@vuelidate/core';\nimport type { PropType } from 'vue';\nimport { defineComponent, reactive } from 'vue';\nimport { onChange, useUpdatedAt } from '../../../../composables';\nimport AFormInputList from '../../../utility/form-input-list/AFormInputList.vue';\n\nexport default defineComponent({\n    components: { AFormInputList },\n    props: { entity: { type: Object as PropType<Partial<Policy>> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const form = reactive<{ types: string[] }>({ types: [] });\n\n        const vuelidate = useVuelidate({ types: {} }, form, { $registerAs: 'type' });\n\n        function assign(data: Partial<IdentityPolicy> = {}) {\n            form.types = data.types || [];\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as Policy);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const handleUpdated = (data: string[]) => {\n            form.types = data;\n            setup.emit('updated', data);\n        };\n\n        return {\n            handleUpdated,\n\n            vuelidate,\n        };\n    },\n});\n</script>\n<template>\n    <AFormInputList\n        :names=\"vuelidate.types.$model\"\n        :min-items=\"1\"\n        @changed=\"handleUpdated\"\n    >\n        <template #label>\n            Types\n        </template>\n    </AFormInputList>\n</template>\n","<script lang=\"ts\">\nimport { type PropType, defineComponent, reactive } from 'vue';\nimport useVuelidate from '@vuelidate/core';\nimport type { Policy } from '@authup/core-kit';\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport { VCFormGroup } from '@vuecs/form-controls';\nimport type { RealmMatchPolicy } from '@authup/access';\nimport { assignFormProperties } from '../../../../core';\nimport { onChange, useUpdatedAt } from '../../../../composables';\nimport AFormInputList from '../../../utility/form-input-list/AFormInputList.vue';\n\nexport default defineComponent({\n    components: {\n        AFormInputList,\n        VCFormGroup,\n        IVuelidate,\n    },\n    props: { entity: { type: Object as PropType<Partial<Policy>> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const form = reactive({\n            attribute_name_strict: false,\n            attribute_null_match_all: false,\n            identity_master_match_all: false,\n            attribute_name: [] as string[],\n        });\n\n        const vuelidate = useVuelidate({\n            attribute_name_strict: {},\n            attribute_null_match_all: {},\n            identity_master_match_all: {},\n            attribute_name: {},\n        }, form, { $registerAs: 'type' });\n\n        function assign(input: Partial<RealmMatchPolicy> = {}) {\n            const {\n                attribute_name, \n                ...data \n            } = input;\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            assignFormProperties(form, data as Record<string, any>);\n            if (attribute_name) {\n                form.attribute_name = typeof attribute_name === 'string' ? [attribute_name] : attribute_name;\n            } else {\n                form.attribute_name = [];\n            }\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as Policy);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const handleUpdated = () => {\n            setup.emit('updated', {\n                data: form,\n                valid: !vuelidate.value.$invalid,\n            });\n        };\n\n        const handleAttributeNameChanged = (data: string[]) => {\n            form.attribute_name = data;\n            handleUpdated();\n        };\n\n        return {\n            handleUpdated,\n            handleAttributeNameChanged,\n\n            vuelidate,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"row\">\n        <div class=\"col-7\">\n            <IVuelidate :validation=\"vuelidate.attribute_name\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <AFormInputList\n                            :names=\"vuelidate.attribute_name.$model\"\n                            @changed=\"handleAttributeNameChanged\"\n                        />\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n        </div>\n        <div class=\"col-5\">\n            <IVuelidate :validation=\"vuelidate.attribute_name_strict\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <VCFormInputCheckbox\n                            v-model=\"vuelidate.attribute_name_strict.$model\"\n                            :group-class=\"'form-switch'\"\n                            :label=\"true\"\n                            @change=\"handleUpdated\"\n                        >\n                            <template #label=\"iProps\">\n                                <label :for=\"iProps.id\">\n                                    Only match if the attribute is strict equal to the name?\n                                </label>\n                            </template>\n                        </VCFormInputCheckbox>\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n            <IVuelidate :validation=\"vuelidate.attribute_null_match_all\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <VCFormInputCheckbox\n                            v-model=\"vuelidate.attribute_null_match_all.$model\"\n                            :group-class=\"'form-switch'\"\n                            :label=\"true\"\n                            @change=\"handleUpdated\"\n                        >\n                            <template #label=\"iProps\">\n                                <label :for=\"iProps.id\">\n                                    Determines if resources with null realm-id/name value should match all identity realms.<br>\n                                    If true, any identity realm can access resources with null realm-id/name values.\n                                </label>\n                            </template>\n                        </VCFormInputCheckbox>\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n            <IVuelidate :validation=\"vuelidate.identity_master_match_all\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <VCFormInputCheckbox\n                            v-model=\"vuelidate.identity_master_match_all.$model\"\n                            :group-class=\"'form-switch'\"\n                            :label=\"true\"\n                            @change=\"handleUpdated\"\n                        >\n                            <template #label=\"iProps\">\n                                <label :for=\"iProps.id\">\n                                    Specifies whether the master realm of an identity should match all realm-id/name attributes, including null.<br>\n                                    If true, the master realm can access any resource regardless of its realm value.\n                                </label>\n                            </template>\n                        </VCFormInputCheckbox>\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n        </div>\n    </div>\n</template>\n","<script lang=\"ts\">\nimport { type PropType, defineComponent, reactive } from 'vue';\nimport useVuelidate from '@vuelidate/core';\nimport type { Policy } from '@authup/core-kit';\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport { VCFormGroup } from '@vuecs/form-controls';\nimport type { RealmMatchPolicy } from '@authup/access';\nimport { assignFormProperties } from '../../../../core';\nimport { onChange, useUpdatedAt } from '../../../../composables';\nimport AFormInputList from '../../../utility/form-input-list/AFormInputList.vue';\n\nexport default defineComponent({\n    components: {\n        AFormInputList,\n        VCFormGroup,\n        IVuelidate,\n    },\n    props: { entity: { type: Object as PropType<Partial<Policy>> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const form = reactive({\n            attribute_name_strict: false,\n            attribute_null_match_all: false,\n            identity_master_match_all: false,\n            attribute_name: [] as string[],\n        });\n\n        const vuelidate = useVuelidate({\n            attribute_name_strict: {},\n            attribute_null_match_all: {},\n            identity_master_match_all: {},\n            attribute_name: {},\n        }, form, { $registerAs: 'type' });\n\n        function assign(input: Partial<RealmMatchPolicy> = {}) {\n            const {\n                attribute_name, \n                ...data \n            } = input;\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            assignFormProperties(form, data as Record<string, any>);\n            if (attribute_name) {\n                form.attribute_name = typeof attribute_name === 'string' ? [attribute_name] : attribute_name;\n            } else {\n                form.attribute_name = [];\n            }\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as Policy);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const handleUpdated = () => {\n            setup.emit('updated', {\n                data: form,\n                valid: !vuelidate.value.$invalid,\n            });\n        };\n\n        const handleAttributeNameChanged = (data: string[]) => {\n            form.attribute_name = data;\n            handleUpdated();\n        };\n\n        return {\n            handleUpdated,\n            handleAttributeNameChanged,\n\n            vuelidate,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"row\">\n        <div class=\"col-7\">\n            <IVuelidate :validation=\"vuelidate.attribute_name\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <AFormInputList\n                            :names=\"vuelidate.attribute_name.$model\"\n                            @changed=\"handleAttributeNameChanged\"\n                        />\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n        </div>\n        <div class=\"col-5\">\n            <IVuelidate :validation=\"vuelidate.attribute_name_strict\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <VCFormInputCheckbox\n                            v-model=\"vuelidate.attribute_name_strict.$model\"\n                            :group-class=\"'form-switch'\"\n                            :label=\"true\"\n                            @change=\"handleUpdated\"\n                        >\n                            <template #label=\"iProps\">\n                                <label :for=\"iProps.id\">\n                                    Only match if the attribute is strict equal to the name?\n                                </label>\n                            </template>\n                        </VCFormInputCheckbox>\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n            <IVuelidate :validation=\"vuelidate.attribute_null_match_all\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <VCFormInputCheckbox\n                            v-model=\"vuelidate.attribute_null_match_all.$model\"\n                            :group-class=\"'form-switch'\"\n                            :label=\"true\"\n                            @change=\"handleUpdated\"\n                        >\n                            <template #label=\"iProps\">\n                                <label :for=\"iProps.id\">\n                                    Determines if resources with null realm-id/name value should match all identity realms.<br>\n                                    If true, any identity realm can access resources with null realm-id/name values.\n                                </label>\n                            </template>\n                        </VCFormInputCheckbox>\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n            <IVuelidate :validation=\"vuelidate.identity_master_match_all\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <VCFormInputCheckbox\n                            v-model=\"vuelidate.identity_master_match_all.$model\"\n                            :group-class=\"'form-switch'\"\n                            :label=\"true\"\n                            @change=\"handleUpdated\"\n                        >\n                            <template #label=\"iProps\">\n                                <label :for=\"iProps.id\">\n                                    Specifies whether the master realm of an identity should match all realm-id/name attributes, including null.<br>\n                                    If true, the master realm can access any resource regardless of its realm value.\n                                </label>\n                            </template>\n                        </VCFormInputCheckbox>\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n        </div>\n    </div>\n</template>\n","<script lang=\"ts\">\nimport {\n    type PropType, \n    computed, \n    defineComponent, \n    reactive,\n} from 'vue';\nimport useVuelidate from '@vuelidate/core';\nimport { maxValue, minValue } from '@vuelidate/validators';\nimport type { Policy } from '@authup/core-kit';\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport type { FormSelectOption } from '@vuecs/form-controls';\nimport { VCFormGroup, VCFormInput } from '@vuecs/form-controls';\nimport {\n    TimePolicyInterval,\n    isIntervalForDayOfMonth,\n    isIntervalForDayOfWeek,\n    isIntervalForDayOfYear,\n} from '@authup/access';\nimport type { TimePolicy } from '@authup/access';\nimport { assignFormProperties } from '../../../../core';\nimport { onChange, useUpdatedAt } from '../../../../composables';\n\nexport default defineComponent({\n    components: {\n        VCFormInput,\n        VCFormGroup,\n        IVuelidate,\n    },\n    props: { entity: { type: Object as PropType<Partial<Policy>> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const form = reactive({\n            start: '',\n            end: '',\n            interval: '',\n            day_of_week: '',\n            day_of_month: '',\n            day_of_year: '',\n        });\n\n        const intervalOptions : FormSelectOption[] = Object.values(TimePolicyInterval)\n            .map((el) => ({\n                id: el,\n                value: el,\n            } satisfies FormSelectOption));\n\n        const vuelidate = useVuelidate({\n            start: {},\n            end: {},\n            interval: {},\n            day_of_week: {\n                minValue: minValue(0),\n                maxValue: maxValue(6),\n            },\n            day_of_month: {\n                minValue: minValue(1),\n                maxValue: maxValue(31),\n            },\n            day_of_year: {\n                minValue: minValue(1),\n                maxValue: maxValue(365),\n            },\n        }, form, { $registerAs: 'type' });\n\n        function assign(data: Partial<TimePolicy> = {}) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            assignFormProperties(form, data as Record<string, any>);\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as Policy);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const displayIntervalForDayOfWeek = computed(\n            () => isIntervalForDayOfWeek(vuelidate.value.interval.$model),\n        );\n\n        const displayIntervalForDayOfMonth = computed(\n            () => isIntervalForDayOfMonth(vuelidate.value.interval.$model),\n        );\n\n        const displayIntervalForDayOfYear = computed(\n            () => isIntervalForDayOfYear(vuelidate.value.interval.$model),\n        );\n\n        const handleUpdated = () => {\n            setup.emit('updated', {\n                data: form,\n                valid: !vuelidate.value.$invalid,\n            });\n        };\n\n        const handleIntervalUpdated = (value: string) => {\n            if (!isIntervalForDayOfWeek(value)) {\n                vuelidate.value.day_of_week.$model = '';\n            }\n\n            if (!isIntervalForDayOfMonth(value)) {\n                vuelidate.value.day_of_month.$model = '';\n            }\n\n            if (!isIntervalForDayOfYear(value)) {\n                vuelidate.value.day_of_year.$model = '';\n            }\n\n            handleUpdated();\n        };\n\n        return {\n            handleUpdated,\n            handleIntervalUpdated,\n\n            intervalOptions,\n            vuelidate,\n\n            displayIntervalForDayOfWeek,\n            displayIntervalForDayOfMonth,\n            displayIntervalForDayOfYear,\n        };\n    },\n});\n</script>\n<template>\n    <div>\n        <IVuelidate :validation=\"vuelidate.start\">\n            <template #default=\"props\">\n                <VCFormGroup\n                    :validation-messages=\"props.data\"\n                    :validation-severity=\"props.severity\"\n                >\n                    <template #label>\n                        Start\n                    </template>\n                    <VCFormInput\n                        v-model=\"vuelidate.start.$model\"\n                        placeholder=\"00:00:00\"\n                        @change=\"handleUpdated\"\n                    />\n                </VCFormGroup>\n            </template>\n        </IVuelidate>\n\n        <IVuelidate :validation=\"vuelidate.end\">\n            <template #default=\"props\">\n                <VCFormGroup\n                    :validation-messages=\"props.data\"\n                    :validation-severity=\"props.severity\"\n                >\n                    <template #label>\n                        End\n                    </template>\n                    <VCFormInput\n                        v-model=\"vuelidate.end.$model\"\n                        placeholder=\"00:00:00\"\n                        @change=\"handleUpdated\"\n                    />\n                </VCFormGroup>\n            </template>\n        </IVuelidate>\n        <IVuelidate :validation=\"vuelidate.interval\">\n            <template #default=\"props\">\n                <VCFormGroup\n                    :validation-messages=\"props.data\"\n                    :validation-severity=\"props.severity\"\n                >\n                    <template #label>\n                        Interval\n                    </template>\n                    <VCFormSelect\n                        v-model=\"vuelidate.interval.$model\"\n                        :options=\"intervalOptions\"\n                        @change=\"handleIntervalUpdated\"\n                    />\n                </VCFormGroup>\n            </template>\n        </IVuelidate>\n\n        <div class=\"row\">\n            <div\n                v-if=\"displayIntervalForDayOfWeek\"\n                class=\"col\"\n            >\n                <IVuelidate :validation=\"vuelidate.day_of_week\">\n                    <template #default=\"props\">\n                        <VCFormGroup\n                            :validation-messages=\"props.data\"\n                            :validation-severity=\"props.severity\"\n                        >\n                            <template #label>\n                                Day of Week\n                            </template>\n                            <VCFormInput\n                                v-model=\"vuelidate.day_of_week.$model\"\n                                placeholder=\"0-6\"\n                                type=\"number\"\n                                @change=\"handleUpdated\"\n                            />\n                        </VCFormGroup>\n                    </template>\n                </IVuelidate>\n            </div>\n            <div\n                v-if=\"displayIntervalForDayOfMonth\"\n                class=\"col\"\n            >\n                <IVuelidate :validation=\"vuelidate.day_of_month\">\n                    <template #default=\"props\">\n                        <VCFormGroup\n                            :validation-messages=\"props.data\"\n                            :validation-severity=\"props.severity\"\n                        >\n                            <template #label>\n                                Day of Month\n                            </template>\n                            <VCFormInput\n                                v-model=\"vuelidate.day_of_month.$model\"\n                                placeholder=\"1-31\"\n                                type=\"number\"\n                                @change=\"handleUpdated\"\n                            />\n                        </VCFormGroup>\n                    </template>\n                </IVuelidate>\n            </div>\n            <div\n                v-if=\"displayIntervalForDayOfYear\"\n                class=\"col\"\n            >\n                <IVuelidate :validation=\"vuelidate.day_of_year\">\n                    <template #default=\"props\">\n                        <VCFormGroup\n                            :validation-messages=\"props.data\"\n                            :validation-severity=\"props.severity\"\n                        >\n                            <template #label>\n                                Day of Year\n                            </template>\n                            <VCFormInput\n                                v-model=\"vuelidate.day_of_year.$model\"\n                                type=\"number\"\n                                placeholder=\"1-365\"\n                                @change=\"handleUpdated\"\n                            />\n                        </VCFormGroup>\n                    </template>\n                </IVuelidate>\n            </div>\n        </div>\n    </div>\n</template>\n","<script lang=\"ts\">\nimport {\n    type PropType, \n    computed, \n    defineComponent, \n    reactive,\n} from 'vue';\nimport useVuelidate from '@vuelidate/core';\nimport { maxValue, minValue } from '@vuelidate/validators';\nimport type { Policy } from '@authup/core-kit';\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport type { FormSelectOption } from '@vuecs/form-controls';\nimport { VCFormGroup, VCFormInput } from '@vuecs/form-controls';\nimport {\n    TimePolicyInterval,\n    isIntervalForDayOfMonth,\n    isIntervalForDayOfWeek,\n    isIntervalForDayOfYear,\n} from '@authup/access';\nimport type { TimePolicy } from '@authup/access';\nimport { assignFormProperties } from '../../../../core';\nimport { onChange, useUpdatedAt } from '../../../../composables';\n\nexport default defineComponent({\n    components: {\n        VCFormInput,\n        VCFormGroup,\n        IVuelidate,\n    },\n    props: { entity: { type: Object as PropType<Partial<Policy>> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const form = reactive({\n            start: '',\n            end: '',\n            interval: '',\n            day_of_week: '',\n            day_of_month: '',\n            day_of_year: '',\n        });\n\n        const intervalOptions : FormSelectOption[] = Object.values(TimePolicyInterval)\n            .map((el) => ({\n                id: el,\n                value: el,\n            } satisfies FormSelectOption));\n\n        const vuelidate = useVuelidate({\n            start: {},\n            end: {},\n            interval: {},\n            day_of_week: {\n                minValue: minValue(0),\n                maxValue: maxValue(6),\n            },\n            day_of_month: {\n                minValue: minValue(1),\n                maxValue: maxValue(31),\n            },\n            day_of_year: {\n                minValue: minValue(1),\n                maxValue: maxValue(365),\n            },\n        }, form, { $registerAs: 'type' });\n\n        function assign(data: Partial<TimePolicy> = {}) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            assignFormProperties(form, data as Record<string, any>);\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as Policy);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const displayIntervalForDayOfWeek = computed(\n            () => isIntervalForDayOfWeek(vuelidate.value.interval.$model),\n        );\n\n        const displayIntervalForDayOfMonth = computed(\n            () => isIntervalForDayOfMonth(vuelidate.value.interval.$model),\n        );\n\n        const displayIntervalForDayOfYear = computed(\n            () => isIntervalForDayOfYear(vuelidate.value.interval.$model),\n        );\n\n        const handleUpdated = () => {\n            setup.emit('updated', {\n                data: form,\n                valid: !vuelidate.value.$invalid,\n            });\n        };\n\n        const handleIntervalUpdated = (value: string) => {\n            if (!isIntervalForDayOfWeek(value)) {\n                vuelidate.value.day_of_week.$model = '';\n            }\n\n            if (!isIntervalForDayOfMonth(value)) {\n                vuelidate.value.day_of_month.$model = '';\n            }\n\n            if (!isIntervalForDayOfYear(value)) {\n                vuelidate.value.day_of_year.$model = '';\n            }\n\n            handleUpdated();\n        };\n\n        return {\n            handleUpdated,\n            handleIntervalUpdated,\n\n            intervalOptions,\n            vuelidate,\n\n            displayIntervalForDayOfWeek,\n            displayIntervalForDayOfMonth,\n            displayIntervalForDayOfYear,\n        };\n    },\n});\n</script>\n<template>\n    <div>\n        <IVuelidate :validation=\"vuelidate.start\">\n            <template #default=\"props\">\n                <VCFormGroup\n                    :validation-messages=\"props.data\"\n                    :validation-severity=\"props.severity\"\n                >\n                    <template #label>\n                        Start\n                    </template>\n                    <VCFormInput\n                        v-model=\"vuelidate.start.$model\"\n                        placeholder=\"00:00:00\"\n                        @change=\"handleUpdated\"\n                    />\n                </VCFormGroup>\n            </template>\n        </IVuelidate>\n\n        <IVuelidate :validation=\"vuelidate.end\">\n            <template #default=\"props\">\n                <VCFormGroup\n                    :validation-messages=\"props.data\"\n                    :validation-severity=\"props.severity\"\n                >\n                    <template #label>\n                        End\n                    </template>\n                    <VCFormInput\n                        v-model=\"vuelidate.end.$model\"\n                        placeholder=\"00:00:00\"\n                        @change=\"handleUpdated\"\n                    />\n                </VCFormGroup>\n            </template>\n        </IVuelidate>\n        <IVuelidate :validation=\"vuelidate.interval\">\n            <template #default=\"props\">\n                <VCFormGroup\n                    :validation-messages=\"props.data\"\n                    :validation-severity=\"props.severity\"\n                >\n                    <template #label>\n                        Interval\n                    </template>\n                    <VCFormSelect\n                        v-model=\"vuelidate.interval.$model\"\n                        :options=\"intervalOptions\"\n                        @change=\"handleIntervalUpdated\"\n                    />\n                </VCFormGroup>\n            </template>\n        </IVuelidate>\n\n        <div class=\"row\">\n            <div\n                v-if=\"displayIntervalForDayOfWeek\"\n                class=\"col\"\n            >\n                <IVuelidate :validation=\"vuelidate.day_of_week\">\n                    <template #default=\"props\">\n                        <VCFormGroup\n                            :validation-messages=\"props.data\"\n                            :validation-severity=\"props.severity\"\n                        >\n                            <template #label>\n                                Day of Week\n                            </template>\n                            <VCFormInput\n                                v-model=\"vuelidate.day_of_week.$model\"\n                                placeholder=\"0-6\"\n                                type=\"number\"\n                                @change=\"handleUpdated\"\n                            />\n                        </VCFormGroup>\n                    </template>\n                </IVuelidate>\n            </div>\n            <div\n                v-if=\"displayIntervalForDayOfMonth\"\n                class=\"col\"\n            >\n                <IVuelidate :validation=\"vuelidate.day_of_month\">\n                    <template #default=\"props\">\n                        <VCFormGroup\n                            :validation-messages=\"props.data\"\n                            :validation-severity=\"props.severity\"\n                        >\n                            <template #label>\n                                Day of Month\n                            </template>\n                            <VCFormInput\n                                v-model=\"vuelidate.day_of_month.$model\"\n                                placeholder=\"1-31\"\n                                type=\"number\"\n                                @change=\"handleUpdated\"\n                            />\n                        </VCFormGroup>\n                    </template>\n                </IVuelidate>\n            </div>\n            <div\n                v-if=\"displayIntervalForDayOfYear\"\n                class=\"col\"\n            >\n                <IVuelidate :validation=\"vuelidate.day_of_year\">\n                    <template #default=\"props\">\n                        <VCFormGroup\n                            :validation-messages=\"props.data\"\n                            :validation-severity=\"props.severity\"\n                        >\n                            <template #label>\n                                Day of Year\n                            </template>\n                            <VCFormInput\n                                v-model=\"vuelidate.day_of_year.$model\"\n                                type=\"number\"\n                                placeholder=\"1-365\"\n                                @change=\"handleUpdated\"\n                            />\n                        </VCFormGroup>\n                    </template>\n                </IVuelidate>\n            </div>\n        </div>\n    </div>\n</template>\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { Policy } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { EntityVSlots } from '../../utility';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n    defineEntityVProps,\n} from '../../utility';\n\nexport const APolicy = defineComponent({\n    props: defineEntityVProps<Policy>(),\n    emits: defineEntityVEmitOptions<Policy>(),\n    slots: Object as SlotsType<EntityVSlots<Policy>>,\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.POLICY}`,\n            setup,\n            props,\n        });\n\n        try {\n            await manager.resolveOrFail();\n\n            return () => manager.render();\n        } catch (e) {\n            return () => manager.renderError(e);\n        }\n    },\n});\n","<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { computed, defineComponent, ref } from 'vue';\nimport type { FormSelectOption } from '@vuecs/form-controls';\nimport { BuiltInPolicyType } from '@authup/access';\n\nexport default defineComponent({\n    props: {\n        type: { type: String },\n        types: { type: Array as PropType<(FormSelectOption | string)[]> },\n    },\n    emits: ['pick'],\n    setup(props, setup) {\n        const option = ref<string | null>(null);\n        const options = computed<FormSelectOption[]>(() => {\n            if (props.types) {\n                return props.types.map((type) => {\n                    if (typeof type === 'string') {\n                        return {\n                            id: type,\n                            value: type, \n                        } satisfies FormSelectOption;\n                    }\n\n                    return type;\n                });\n            }\n\n            return Object.values(BuiltInPolicyType)\n                .map((type: string) => ({\n                    id: type,\n                    value: type,\n                } satisfies FormSelectOption));\n        });\n\n        if (props.type) {\n            option.value = props.type;\n        }\n\n        const pick = (val: string) => {\n            option.value = val;\n            setup.emit('pick', val);\n        };\n\n        return {\n            option,\n            options,\n            pick,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"d-flex flex-column gap-2\">\n        <div>\n            <h6>Type</h6>\n\n            <div class=\"d-flex flex-row gap-2 flex-wrap\">\n                <template\n                    v-for=\"(item, key) in options\"\n                    :key=\"key\"\n                >\n                    <div\n                        :class=\"{'active': item.id === option}\"\n                        class=\"d-flex flex-column gap-1 text-center a-picker-item\"\n                        @click.prevent=\"pick(`${item.id}`)\"\n                    >\n                        <div>\n                            {{ item.value }}\n                        </div>\n                    </div>\n                </template>\n            </div>\n        </div>\n    </div>\n</template>\n<style scoped>\n.a-picker-item {\n    cursor: pointer;\n    border-radius: 4px;\n    min-width: 120px;\n    color: #5b646c;\n    background-color: #ececec;\n    padding: 0.5rem;\n}\n\n.a-picker-item.active,\n.a-picker-item:hover,\n.a-picker-item:active {\n    background-color: #6d7fcc;\n    color: #fff;\n}\n</style>\n","<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { computed, defineComponent, ref } from 'vue';\nimport type { FormSelectOption } from '@vuecs/form-controls';\nimport { BuiltInPolicyType } from '@authup/access';\n\nexport default defineComponent({\n    props: {\n        type: { type: String },\n        types: { type: Array as PropType<(FormSelectOption | string)[]> },\n    },\n    emits: ['pick'],\n    setup(props, setup) {\n        const option = ref<string | null>(null);\n        const options = computed<FormSelectOption[]>(() => {\n            if (props.types) {\n                return props.types.map((type) => {\n                    if (typeof type === 'string') {\n                        return {\n                            id: type,\n                            value: type, \n                        } satisfies FormSelectOption;\n                    }\n\n                    return type;\n                });\n            }\n\n            return Object.values(BuiltInPolicyType)\n                .map((type: string) => ({\n                    id: type,\n                    value: type,\n                } satisfies FormSelectOption));\n        });\n\n        if (props.type) {\n            option.value = props.type;\n        }\n\n        const pick = (val: string) => {\n            option.value = val;\n            setup.emit('pick', val);\n        };\n\n        return {\n            option,\n            options,\n            pick,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"d-flex flex-column gap-2\">\n        <div>\n            <h6>Type</h6>\n\n            <div class=\"d-flex flex-row gap-2 flex-wrap\">\n                <template\n                    v-for=\"(item, key) in options\"\n                    :key=\"key\"\n                >\n                    <div\n                        :class=\"{'active': item.id === option}\"\n                        class=\"d-flex flex-column gap-1 text-center a-picker-item\"\n                        @click.prevent=\"pick(`${item.id}`)\"\n                    >\n                        <div>\n                            {{ item.value }}\n                        </div>\n                    </div>\n                </template>\n            </div>\n        </div>\n    </div>\n</template>\n<style scoped>\n.a-picker-item {\n    cursor: pointer;\n    border-radius: 4px;\n    min-width: 120px;\n    color: #5b646c;\n    background-color: #ececec;\n    padding: 0.5rem;\n}\n\n.a-picker-item.active,\n.a-picker-item:hover,\n.a-picker-item:active {\n    background-color: #6d7fcc;\n    color: #fff;\n}\n</style>\n","<script lang=\"ts\">\nimport {\n    type PropType, \n    computed, \n    defineComponent, \n    reactive, \n    toRef,\n} from 'vue';\nimport useVuelidate from '@vuelidate/core';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport type { Policy } from '@authup/core-kit';\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport type { FormSelectOption } from '@vuecs/form-controls';\nimport { VCFormGroup, VCFormInput, VCFormInputCheckbox } from '@vuecs/form-controls';\nimport { BuiltInPolicyType } from '@authup/access';\nimport { assignFormProperties, injectStore, storeToRefs } from '../../../core';\nimport { onChange, useIsEditing, useUpdatedAt } from '../../../composables';\nimport { ARealmPicker } from '../realm';\n\nexport default defineComponent({\n    components: {\n        ARealmPicker,\n        VCFormInput,\n        VCFormInputCheckbox,\n        VCFormGroup,\n        IVuelidate,\n    },\n    props: { entity: { type: Object as PropType<Policy> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const entity = toRef(props, 'entity');\n        const form = reactive({\n            name: '',\n            invert: false,\n            display_name: '',\n            description: '',\n            realm_id: '',\n        });\n\n        const store = injectStore();\n        const storeRefs = storeToRefs(store);\n\n        const isEditing = useIsEditing(entity);\n        const realmId = computed(() => {\n            if (!storeRefs.realmIsRoot) {\n                return storeRefs.realmId.value;\n            }\n\n            return entity.value ?\n                entity.value.realm_id :\n                null;\n        });\n\n        const typeOptions : FormSelectOption[] = [\n            ...Object.values(BuiltInPolicyType).map((type) => ({\n                id: type,\n                value: type, \n            })),\n        ];\n\n        const vuelidate = useVuelidate({\n            name: {\n                required,\n                minLength: minLength(3),\n                maxLength: maxLength(128),\n            },\n            invert: {},\n            display_name: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            description: {\n                minLength: minLength(5),\n                maxLength: maxLength(4096),\n            },\n            realm_id: {},\n        }, form, { $registerAs: 'basic' });\n\n        function assign(data: Partial<Policy> = {}) {\n            assignFormProperties(form, data);\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as Policy);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const handleUpdated = () => {\n            setup.emit('updated', {\n                data: form,\n                valid: !vuelidate.value.$invalid,\n            });\n        };\n\n        return {\n            isEditing,\n            realmId,\n\n            handleUpdated,\n            typeOptions,\n            vuelidate,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"row\">\n        <div class=\"col\">\n            <IVuelidate :validation=\"vuelidate.name\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            Name\n                        </template>\n                        <VCFormInput\n                            v-model=\"vuelidate.name.$model\"\n                            @change=\"handleUpdated\"\n                        />\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n            <IVuelidate :validation=\"vuelidate.display_name\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            Display Name\n                        </template>\n                        <VCFormInput\n                            v-model=\"vuelidate.display_name.$model\"\n                            @change=\"handleUpdated\"\n                        />\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n            <IVuelidate :validation=\"vuelidate.description\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            Description\n                        </template>\n                        <VCFormTextarea\n                            v-model=\"vuelidate.description.$model\"\n                            rows=\"4\"\n                            @change=\"handleUpdated\"\n                        />\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n            <IVuelidate :validation=\"vuelidate.invert\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <VCFormInputCheckbox\n                            v-model=\"vuelidate.invert.$model\"\n                            :group-class=\"'form-switch'\"\n                            :label=\"true\"\n                            @change=\"handleUpdated\"\n                        >\n                            <template #label=\"iProps\">\n                                <label :for=\"iProps.id\">\n                                    Invert?\n                                </label>\n                            </template>\n                        </VCFormInputCheckbox>\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n        </div>\n        <div\n            v-if=\"!realmId && !isEditing\"\n            class=\"col\"\n        >\n            <IVuelidate :validation=\"vuelidate.invert\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            Realm\n                        </template>\n                        <ARealmPicker\n                            :value=\"vuelidate.realm_id.$model\"\n                            @change=\"(value: string[]) => { vuelidate.realm_id.$model = value.length > 0 ? value[0] ?? '' : ''; }\"\n                        />\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n        </div>\n    </div>\n</template>\n","<script lang=\"ts\">\nimport {\n    type PropType, \n    computed, \n    defineComponent, \n    reactive, \n    toRef,\n} from 'vue';\nimport useVuelidate from '@vuelidate/core';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport type { Policy } from '@authup/core-kit';\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport type { FormSelectOption } from '@vuecs/form-controls';\nimport { VCFormGroup, VCFormInput, VCFormInputCheckbox } from '@vuecs/form-controls';\nimport { BuiltInPolicyType } from '@authup/access';\nimport { assignFormProperties, injectStore, storeToRefs } from '../../../core';\nimport { onChange, useIsEditing, useUpdatedAt } from '../../../composables';\nimport { ARealmPicker } from '../realm';\n\nexport default defineComponent({\n    components: {\n        ARealmPicker,\n        VCFormInput,\n        VCFormInputCheckbox,\n        VCFormGroup,\n        IVuelidate,\n    },\n    props: { entity: { type: Object as PropType<Policy> } },\n    emits: ['updated'],\n    setup(props, setup) {\n        const entity = toRef(props, 'entity');\n        const form = reactive({\n            name: '',\n            invert: false,\n            display_name: '',\n            description: '',\n            realm_id: '',\n        });\n\n        const store = injectStore();\n        const storeRefs = storeToRefs(store);\n\n        const isEditing = useIsEditing(entity);\n        const realmId = computed(() => {\n            if (!storeRefs.realmIsRoot) {\n                return storeRefs.realmId.value;\n            }\n\n            return entity.value ?\n                entity.value.realm_id :\n                null;\n        });\n\n        const typeOptions : FormSelectOption[] = [\n            ...Object.values(BuiltInPolicyType).map((type) => ({\n                id: type,\n                value: type, \n            })),\n        ];\n\n        const vuelidate = useVuelidate({\n            name: {\n                required,\n                minLength: minLength(3),\n                maxLength: maxLength(128),\n            },\n            invert: {},\n            display_name: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            description: {\n                minLength: minLength(5),\n                maxLength: maxLength(4096),\n            },\n            realm_id: {},\n        }, form, { $registerAs: 'basic' });\n\n        function assign(data: Partial<Policy> = {}) {\n            assignFormProperties(form, data);\n        }\n\n        setup.expose({ assign });\n\n        const updatedAt = useUpdatedAt(props.entity as Policy);\n        onChange(updatedAt, () => assign(props.entity));\n\n        assign(props.entity);\n\n        const handleUpdated = () => {\n            setup.emit('updated', {\n                data: form,\n                valid: !vuelidate.value.$invalid,\n            });\n        };\n\n        return {\n            isEditing,\n            realmId,\n\n            handleUpdated,\n            typeOptions,\n            vuelidate,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"row\">\n        <div class=\"col\">\n            <IVuelidate :validation=\"vuelidate.name\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            Name\n                        </template>\n                        <VCFormInput\n                            v-model=\"vuelidate.name.$model\"\n                            @change=\"handleUpdated\"\n                        />\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n            <IVuelidate :validation=\"vuelidate.display_name\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            Display Name\n                        </template>\n                        <VCFormInput\n                            v-model=\"vuelidate.display_name.$model\"\n                            @change=\"handleUpdated\"\n                        />\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n            <IVuelidate :validation=\"vuelidate.description\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            Description\n                        </template>\n                        <VCFormTextarea\n                            v-model=\"vuelidate.description.$model\"\n                            rows=\"4\"\n                            @change=\"handleUpdated\"\n                        />\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n            <IVuelidate :validation=\"vuelidate.invert\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <VCFormInputCheckbox\n                            v-model=\"vuelidate.invert.$model\"\n                            :group-class=\"'form-switch'\"\n                            :label=\"true\"\n                            @change=\"handleUpdated\"\n                        >\n                            <template #label=\"iProps\">\n                                <label :for=\"iProps.id\">\n                                    Invert?\n                                </label>\n                            </template>\n                        </VCFormInputCheckbox>\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n        </div>\n        <div\n            v-if=\"!realmId && !isEditing\"\n            class=\"col\"\n        >\n            <IVuelidate :validation=\"vuelidate.invert\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            Realm\n                        </template>\n                        <ARealmPicker\n                            :value=\"vuelidate.realm_id.$model\"\n                            @change=\"(value: string[]) => { vuelidate.realm_id.$model = value.length > 0 ? value[0] ?? '' : ''; }\"\n                        />\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n        </div>\n    </div>\n</template>\n","<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { computed, defineComponent } from 'vue';\nimport type { Policy } from '@authup/core-kit';\nimport { EntityType } from '@authup/core-kit';\nimport useVuelidate from '@vuelidate/core';\nimport { BuiltInPolicyType } from '@authup/access';\nimport { useIsEditing } from '../../../composables';\nimport { extractVuelidateResultsFromChild, injectHTTPClient } from '../../../core';\nimport { AFormSubmit, defineEntityManager } from '../../utility';\nimport APolicyBasicForm from './APolicyBasicForm.vue';\nimport APolicyTypePicker from './APolicyTypePicker.vue';\nimport AAttributeNamesPolicyForm from './attribute-names/AAttributeNamesPolicyForm.vue';\nimport ACompositePolicyForm from './composite/ACompositePolicyForm.vue';\nimport ADatePolicyForm from './date/ADatePolicyForm.vue';\nimport ARealmMatchPolicyForm from './realm-match/ARealmMatchPolicyForm.vue';\nimport ATimePolicyForm from './time/ATimePolicyForm.vue';\nimport AIdentityPolicyForm from './identity/AIdentityPolicyForm.vue';\n\nexport default defineComponent({\n    components: {\n        AFormSubmit,\n        APolicyTypePicker,\n        APolicyBasicForm, \n    },\n    props: {\n        entity: { type: Object as PropType<Policy> },\n        type: { type: String as PropType<string> },\n    },\n    setup(props, ctx) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const typeComponents : Record<string, any> = {\n            [BuiltInPolicyType.IDENTITY]: AIdentityPolicyForm,\n            [BuiltInPolicyType.REALM_MATCH]: ARealmMatchPolicyForm,\n            [BuiltInPolicyType.COMPOSITE]: ACompositePolicyForm,\n            [BuiltInPolicyType.DATE]: ADatePolicyForm,\n            [BuiltInPolicyType.TIME]: ATimePolicyForm,\n            [BuiltInPolicyType.ATTRIBUTE_NAMES]: AAttributeNamesPolicyForm,\n        };\n\n        const httpClient = injectHTTPClient();\n        const manager = defineEntityManager({\n            type: `${EntityType.POLICY}`,\n            setup: ctx,\n            props,\n        });\n\n        const isEditing = useIsEditing(manager.data);\n\n        const typeComputed = computed<string | null>(() => {\n            if (manager.data.value) {\n                return manager.data.value.type;\n            }\n\n            if (props.type) {\n                return props.type;\n            }\n\n            return null;\n        });\n\n        const vuelidate = useVuelidate({ $stopPropagation: true });\n\n        const submit = async () => {\n            if (vuelidate.value.$invalid) {\n                return;\n            }\n\n            const {\n                items = [], \n                ...data \n            } = {\n                ...extractVuelidateResultsFromChild(vuelidate, 'basic'),\n                ...extractVuelidateResultsFromChild(vuelidate, 'type'),\n            } as Partial<Omit<Policy, 'children'>> & { items: string[] };\n\n            if (typeComputed.value) {\n                data.type = typeComputed.value;\n            }\n\n            await manager.createOrUpdate(data);\n\n            if (manager.data.value) {\n                if (items.length > 0) {\n                    for (const item of items) {\n                        await httpClient.policy.update(item, { parent_id: manager.data.value.id });\n                    }\n                }\n            }\n        };\n\n        return {\n            typeComputed,\n            typeComponents,\n            data: manager.data,\n            busy: manager.busy,\n            isEditing,\n            submit,\n            vuelidate,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"d-flex flex-column\">\n        <h6>General</h6>\n        <APolicyBasicForm :entity=\"data\" />\n\n        <template v-if=\"typeComputed\">\n            <slot\n                name=\"default\"\n                :entity=\"entity\"\n            >\n                <template v-if=\"typeComputed in typeComponents\">\n                    <component\n                        :is=\"typeComponents[typeComputed]\"\n                        :entity=\"entity\"\n                    />\n                </template>\n            </slot>\n        </template>\n\n        <div>\n            <AFormSubmit\n                :is-invalid=\"vuelidate.$invalid || !typeComputed\"\n                :is-busy=\"busy\"\n                :is-editing=\"isEditing\"\n                @submit=\"submit\"\n            />\n        </div>\n    </div>\n</template>\n","<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { computed, defineComponent } from 'vue';\nimport type { Policy } from '@authup/core-kit';\nimport { EntityType } from '@authup/core-kit';\nimport useVuelidate from '@vuelidate/core';\nimport { BuiltInPolicyType } from '@authup/access';\nimport { useIsEditing } from '../../../composables';\nimport { extractVuelidateResultsFromChild, injectHTTPClient } from '../../../core';\nimport { AFormSubmit, defineEntityManager } from '../../utility';\nimport APolicyBasicForm from './APolicyBasicForm.vue';\nimport APolicyTypePicker from './APolicyTypePicker.vue';\nimport AAttributeNamesPolicyForm from './attribute-names/AAttributeNamesPolicyForm.vue';\nimport ACompositePolicyForm from './composite/ACompositePolicyForm.vue';\nimport ADatePolicyForm from './date/ADatePolicyForm.vue';\nimport ARealmMatchPolicyForm from './realm-match/ARealmMatchPolicyForm.vue';\nimport ATimePolicyForm from './time/ATimePolicyForm.vue';\nimport AIdentityPolicyForm from './identity/AIdentityPolicyForm.vue';\n\nexport default defineComponent({\n    components: {\n        AFormSubmit,\n        APolicyTypePicker,\n        APolicyBasicForm, \n    },\n    props: {\n        entity: { type: Object as PropType<Policy> },\n        type: { type: String as PropType<string> },\n    },\n    setup(props, ctx) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const typeComponents : Record<string, any> = {\n            [BuiltInPolicyType.IDENTITY]: AIdentityPolicyForm,\n            [BuiltInPolicyType.REALM_MATCH]: ARealmMatchPolicyForm,\n            [BuiltInPolicyType.COMPOSITE]: ACompositePolicyForm,\n            [BuiltInPolicyType.DATE]: ADatePolicyForm,\n            [BuiltInPolicyType.TIME]: ATimePolicyForm,\n            [BuiltInPolicyType.ATTRIBUTE_NAMES]: AAttributeNamesPolicyForm,\n        };\n\n        const httpClient = injectHTTPClient();\n        const manager = defineEntityManager({\n            type: `${EntityType.POLICY}`,\n            setup: ctx,\n            props,\n        });\n\n        const isEditing = useIsEditing(manager.data);\n\n        const typeComputed = computed<string | null>(() => {\n            if (manager.data.value) {\n                return manager.data.value.type;\n            }\n\n            if (props.type) {\n                return props.type;\n            }\n\n            return null;\n        });\n\n        const vuelidate = useVuelidate({ $stopPropagation: true });\n\n        const submit = async () => {\n            if (vuelidate.value.$invalid) {\n                return;\n            }\n\n            const {\n                items = [], \n                ...data \n            } = {\n                ...extractVuelidateResultsFromChild(vuelidate, 'basic'),\n                ...extractVuelidateResultsFromChild(vuelidate, 'type'),\n            } as Partial<Omit<Policy, 'children'>> & { items: string[] };\n\n            if (typeComputed.value) {\n                data.type = typeComputed.value;\n            }\n\n            await manager.createOrUpdate(data);\n\n            if (manager.data.value) {\n                if (items.length > 0) {\n                    for (const item of items) {\n                        await httpClient.policy.update(item, { parent_id: manager.data.value.id });\n                    }\n                }\n            }\n        };\n\n        return {\n            typeComputed,\n            typeComponents,\n            data: manager.data,\n            busy: manager.busy,\n            isEditing,\n            submit,\n            vuelidate,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"d-flex flex-column\">\n        <h6>General</h6>\n        <APolicyBasicForm :entity=\"data\" />\n\n        <template v-if=\"typeComputed\">\n            <slot\n                name=\"default\"\n                :entity=\"entity\"\n            >\n                <template v-if=\"typeComputed in typeComponents\">\n                    <component\n                        :is=\"typeComponents[typeComputed]\"\n                        :entity=\"entity\"\n                    />\n                </template>\n            </slot>\n        </template>\n\n        <div>\n            <AFormSubmit\n                :is-invalid=\"vuelidate.$invalid || !typeComputed\"\n                :is-busy=\"busy\"\n                :is-editing=\"isEditing\"\n                @submit=\"submit\"\n            />\n        </div>\n    </div>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { AClients } from '../client';\nimport { AClientPermissionAssignment } from '../client-permission';\n\nexport default defineComponent({\n    components: { AClients, AClientPermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <AClients>\n        <template #itemActions=\"{ data }\">\n            <AClientPermissionAssignment\n                :key=\"data.id\"\n                :permission-id=\"entityId\"\n                :client-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </AClients>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { AClients } from '../client';\nimport { AClientPermissionAssignment } from '../client-permission';\n\nexport default defineComponent({\n    components: { AClients, AClientPermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <AClients>\n        <template #itemActions=\"{ data }\">\n            <AClientPermissionAssignment\n                :key=\"data.id\"\n                :permission-id=\"entityId\"\n                :client-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </AClients>\n</template>\n","<!--\n  Copyright (c) 2026.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { PermissionPolicy } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\n\nexport default defineComponent({\n    components: { AToggleButton },\n    props: {\n        permissionId: {\n            type: String,\n            required: true,\n        },\n        policyId: {\n            type: String,\n            required: true,\n        },\n    },\n    emits: defineEntityVEmitOptions<PermissionPolicy>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.PERMISSION_POLICY}`,\n            setup,\n            query: () => ({\n                filters: {\n                    permission_id: props.permissionId,\n                    policy_id: props.policyId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.permission_id === props.permissionId &&\n                        event.data.policy_id === props.policyId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    permission_id: props.permissionId,\n                    policy_id: props.policyId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    permission_id: props.permissionId,\n                    policy_id: props.policyId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        return {\n            manager,\n            handleChanged,\n        };\n    },\n});\n</script>\n<template>\n    <AToggleButton\n        :value=\"!!manager.data.value\"\n        :is-busy=\"manager.busy.value\"\n        @changed=\"handleChanged\"\n    />\n</template>\n","<!--\n  Copyright (c) 2026.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { PermissionPolicy } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\n\nexport default defineComponent({\n    components: { AToggleButton },\n    props: {\n        permissionId: {\n            type: String,\n            required: true,\n        },\n        policyId: {\n            type: String,\n            required: true,\n        },\n    },\n    emits: defineEntityVEmitOptions<PermissionPolicy>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.PERMISSION_POLICY}`,\n            setup,\n            query: () => ({\n                filters: {\n                    permission_id: props.permissionId,\n                    policy_id: props.policyId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.permission_id === props.permissionId &&\n                        event.data.policy_id === props.policyId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    permission_id: props.permissionId,\n                    policy_id: props.policyId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    permission_id: props.permissionId,\n                    policy_id: props.policyId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        return {\n            manager,\n            handleChanged,\n        };\n    },\n});\n</script>\n<template>\n    <AToggleButton\n        :value=\"!!manager.data.value\"\n        :is-busy=\"manager.busy.value\"\n        @changed=\"handleChanged\"\n    />\n</template>\n","<!--\n  Copyright (c) 2026.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\n/* global document, KeyboardEvent */\nimport type { Policy } from '@authup/core-kit';\nimport {\n    computed,\n    defineComponent,\n    onMounted,\n    onUnmounted,\n    ref,\n} from 'vue';\nimport APermissionPolicyAssignment from './APermissionPolicyAssignment.vue';\nimport { APolicies } from '../policy';\nimport APolicyInlineInfo from '../policy/APolicyInlineInfo.vue';\nimport APolicySummary from '../policy/APolicySummary.vue';\n\nexport default defineComponent({\n    components: {\n        APolicies, \n        APermissionPolicyAssignment, \n        APolicyInlineInfo, \n        APolicySummary, \n    },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const detailPolicy = ref<Policy | null>(null);\n\n        const handleKeydown = (e: KeyboardEvent) => {\n            if (e.key === 'Escape' && detailPolicy.value) {\n                detailPolicy.value = null;\n            }\n        };\n\n        onMounted(() => {\n            document.addEventListener('keydown', handleKeydown);\n        });\n\n        onUnmounted(() => {\n            document.removeEventListener('keydown', handleKeydown);\n        });\n\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'item')));\n\n        return { detailPolicy, forwardedSlots };\n    },\n});\n</script>\n<template>\n    <div>\n        <APolicies :query=\"{ filters: { parent_id: null } }\">\n            <template #item=\"{ data }\">\n                <div>{{ data.name }}</div>\n                <APolicyInlineInfo\n                    :entity=\"data\"\n                    @detail=\"detailPolicy = $event\"\n                />\n                <div class=\"ms-auto\">\n                    <APermissionPolicyAssignment\n                        :key=\"data.id\"\n                        :permission-id=\"entityId\"\n                        :policy-id=\"data.id\"\n                    />\n                </div>\n            </template>\n            <template\n                v-for=\"(_, name) in forwardedSlots\"\n                :key=\"name\"\n                #[name]=\"slotData\"\n            >\n                <slot\n                    :name=\"name\"\n                    v-bind=\"slotData ?? {}\"\n                />\n            </template>\n        </APolicies>\n\n        <Teleport\n            v-if=\"detailPolicy\"\n            to=\"body\"\n        >\n            <div\n                class=\"modal-backdrop fade show\"\n                @click=\"detailPolicy = null\"\n            />\n            <div\n                class=\"modal fade show d-block\"\n                tabindex=\"-1\"\n                role=\"dialog\"\n                aria-modal=\"true\"\n                :aria-labelledby=\"`policy-detail-modal-${detailPolicy.id}`\"\n            >\n                <div\n                    class=\"modal-dialog\"\n                    role=\"document\"\n                    @click.stop\n                >\n                    <div class=\"modal-content\">\n                        <div class=\"modal-header\">\n                            <h5\n                                :id=\"`policy-detail-modal-${detailPolicy.id}`\"\n                                class=\"modal-title\"\n                            >\n                                {{ detailPolicy.name }}\n                            </h5>\n                            <button\n                                type=\"button\"\n                                class=\"btn-close\"\n                                aria-label=\"Close\"\n                                @click=\"detailPolicy = null\"\n                            />\n                        </div>\n                        <div class=\"modal-body\">\n                            <APolicySummary :entity=\"detailPolicy\" />\n                        </div>\n                        <div class=\"modal-footer\">\n                            <button\n                                type=\"button\"\n                                class=\"btn btn-secondary btn-xs\"\n                                @click=\"detailPolicy = null\"\n                            >\n                                Close\n                            </button>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </Teleport>\n    </div>\n</template>\n","<!--\n  Copyright (c) 2026.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\n/* global document, KeyboardEvent */\nimport type { Policy } from '@authup/core-kit';\nimport {\n    computed,\n    defineComponent,\n    onMounted,\n    onUnmounted,\n    ref,\n} from 'vue';\nimport APermissionPolicyAssignment from './APermissionPolicyAssignment.vue';\nimport { APolicies } from '../policy';\nimport APolicyInlineInfo from '../policy/APolicyInlineInfo.vue';\nimport APolicySummary from '../policy/APolicySummary.vue';\n\nexport default defineComponent({\n    components: {\n        APolicies, \n        APermissionPolicyAssignment, \n        APolicyInlineInfo, \n        APolicySummary, \n    },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const detailPolicy = ref<Policy | null>(null);\n\n        const handleKeydown = (e: KeyboardEvent) => {\n            if (e.key === 'Escape' && detailPolicy.value) {\n                detailPolicy.value = null;\n            }\n        };\n\n        onMounted(() => {\n            document.addEventListener('keydown', handleKeydown);\n        });\n\n        onUnmounted(() => {\n            document.removeEventListener('keydown', handleKeydown);\n        });\n\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'item')));\n\n        return { detailPolicy, forwardedSlots };\n    },\n});\n</script>\n<template>\n    <div>\n        <APolicies :query=\"{ filters: { parent_id: null } }\">\n            <template #item=\"{ data }\">\n                <div>{{ data.name }}</div>\n                <APolicyInlineInfo\n                    :entity=\"data\"\n                    @detail=\"detailPolicy = $event\"\n                />\n                <div class=\"ms-auto\">\n                    <APermissionPolicyAssignment\n                        :key=\"data.id\"\n                        :permission-id=\"entityId\"\n                        :policy-id=\"data.id\"\n                    />\n                </div>\n            </template>\n            <template\n                v-for=\"(_, name) in forwardedSlots\"\n                :key=\"name\"\n                #[name]=\"slotData\"\n            >\n                <slot\n                    :name=\"name\"\n                    v-bind=\"slotData ?? {}\"\n                />\n            </template>\n        </APolicies>\n\n        <Teleport\n            v-if=\"detailPolicy\"\n            to=\"body\"\n        >\n            <div\n                class=\"modal-backdrop fade show\"\n                @click=\"detailPolicy = null\"\n            />\n            <div\n                class=\"modal fade show d-block\"\n                tabindex=\"-1\"\n                role=\"dialog\"\n                aria-modal=\"true\"\n                :aria-labelledby=\"`policy-detail-modal-${detailPolicy.id}`\"\n            >\n                <div\n                    class=\"modal-dialog\"\n                    role=\"document\"\n                    @click.stop\n                >\n                    <div class=\"modal-content\">\n                        <div class=\"modal-header\">\n                            <h5\n                                :id=\"`policy-detail-modal-${detailPolicy.id}`\"\n                                class=\"modal-title\"\n                            >\n                                {{ detailPolicy.name }}\n                            </h5>\n                            <button\n                                type=\"button\"\n                                class=\"btn-close\"\n                                aria-label=\"Close\"\n                                @click=\"detailPolicy = null\"\n                            />\n                        </div>\n                        <div class=\"modal-body\">\n                            <APolicySummary :entity=\"detailPolicy\" />\n                        </div>\n                        <div class=\"modal-footer\">\n                            <button\n                                type=\"button\"\n                                class=\"btn btn-secondary btn-xs\"\n                                @click=\"detailPolicy = null\"\n                            >\n                                Close\n                            </button>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </Teleport>\n    </div>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { RobotPermission } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\nimport { APermissionPolicyBindingButton } from '../permission-policy-binding';\n\nexport default defineComponent({\n    components: { AToggleButton, APermissionPolicyBindingButton },\n    props: {\n        robotId: { type: String, required: true },\n        permissionId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<RobotPermission>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.ROBOT_PERMISSION}`,\n            setup,\n            query: () => ({\n                filters: {\n                    robot_id: props.robotId,\n                    permission_id: props.permissionId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.permission_id === props.permissionId &&\n                        event.data.robot_id === props.robotId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    robot_id: props.robotId,\n                    permission_id: props.permissionId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    robot_id: props.robotId,\n                    permission_id: props.permissionId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        const handleUpdated = (entity: RobotPermission) => {\n            manager.updated(entity);\n        };\n\n        return {\n            manager,\n            handleChanged,\n            handleUpdated,\n            EntityType,\n        };\n    },\n});\n</script>\n<template>\n    <span class=\"d-flex gap-1\">\n        <AToggleButton\n            :value=\"!!manager.data.value\"\n            :is-busy=\"manager.busy.value\"\n            @changed=\"handleChanged\"\n        />\n        <APermissionPolicyBindingButton\n            v-if=\"manager.data.value\"\n            :key=\"manager.data.value.id\"\n            :entity-type=\"EntityType.ROBOT_PERMISSION\"\n            :entity=\"manager.data.value\"\n            @updated=\"handleUpdated\"\n        />\n    </span>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { RobotPermission } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\nimport { APermissionPolicyBindingButton } from '../permission-policy-binding';\n\nexport default defineComponent({\n    components: { AToggleButton, APermissionPolicyBindingButton },\n    props: {\n        robotId: { type: String, required: true },\n        permissionId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<RobotPermission>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.ROBOT_PERMISSION}`,\n            setup,\n            query: () => ({\n                filters: {\n                    robot_id: props.robotId,\n                    permission_id: props.permissionId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.permission_id === props.permissionId &&\n                        event.data.robot_id === props.robotId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    robot_id: props.robotId,\n                    permission_id: props.permissionId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    robot_id: props.robotId,\n                    permission_id: props.permissionId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        const handleUpdated = (entity: RobotPermission) => {\n            manager.updated(entity);\n        };\n\n        return {\n            manager,\n            handleChanged,\n            handleUpdated,\n            EntityType,\n        };\n    },\n});\n</script>\n<template>\n    <span class=\"d-flex gap-1\">\n        <AToggleButton\n            :value=\"!!manager.data.value\"\n            :is-busy=\"manager.busy.value\"\n            @changed=\"handleChanged\"\n        />\n        <APermissionPolicyBindingButton\n            v-if=\"manager.data.value\"\n            :key=\"manager.data.value.id\"\n            :entity-type=\"EntityType.ROBOT_PERMISSION\"\n            :entity=\"manager.data.value\"\n            @updated=\"handleUpdated\"\n        />\n    </span>\n</template>\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { Robot } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { EntityVSlots } from '../../utility';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n    defineEntityVProps,\n} from '../../utility';\n\nexport const ARobot = defineComponent({\n    props: defineEntityVProps<Robot>(),\n    emits: defineEntityVEmitOptions<Robot>(),\n    slots: Object as SlotsType<EntityVSlots<Robot>>,\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.ROBOT}`,\n            props,\n            setup,\n        });\n\n        try {\n            await manager.resolveOrFail();\n\n            return () => manager.render();\n        } catch (e) {\n            return () => manager.renderError(e);\n        }\n    },\n});\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createNanoID } from '@authup/kit';\nimport useVuelidate from '@vuelidate/core';\nimport type {\n    PropType,\n    VNodeArrayChildren,\n} from 'vue';\nimport {\n    computed,\n    defineComponent,\n    h,\n    reactive,\n    ref,\n    watch,\n} from 'vue';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport type { Realm, Robot } from '@authup/core-kit';\nimport { EntityType } from '@authup/core-kit';\nimport {\n    buildFormGroup,\n    buildFormInput,\n} from '@vuecs/form-controls';\nimport { SlotName } from '@vuecs/list-controls';\nimport { useIsEditing, useUpdatedAt } from '../../../composables';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    VuelidateCustomRule,\n    VuelidateCustomRuleKey,\n    assignFormProperties,\n    buildFormSubmitWithTranslations,\n    createFormSubmitTranslations,\n    getVuelidateSeverity,\n    useTranslationsForGroup,\n    useTranslationsForNestedValidation,\n} from '../../../core';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n    renderToggleButton,\n} from '../../utility';\n\nimport { ARealms } from '../realm';\n\nexport const ARobotForm = defineComponent({\n    props: {\n        name: {\n            type: String,\n            default: undefined,\n        },\n        entity: {\n            type: Object as PropType<Robot>,\n            default: undefined,\n        },\n        realmId: {\n            type: String,\n            default: undefined,\n        },\n    },\n    emits: defineEntityVEmitOptions<Robot>(),\n    setup(props, ctx) {\n        const busy = ref(false);\n        const form = reactive({\n            name: '',\n            display_name: '',\n            realm_id: '',\n            secret: '',\n        });\n\n        const $v = useVuelidate({\n            name: {\n                [\n                VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT\n                ]: VuelidateCustomRule[VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT],\n                minLength: minLength(3),\n                maxLength: maxLength(128),\n            },\n            display_name: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            realm_id: { required },\n            secret: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n        }, form);\n\n        const manager = defineEntityManager({\n            type: `${EntityType.ROBOT}`,\n            setup: ctx,\n            props,\n        });\n\n        const isEditing = useIsEditing(manager.data);\n        const updatedAt = useUpdatedAt(props.entity);\n\n        const isNameFixed = computed(() => !!props.name && props.name.length > 0);\n        const isRealmLocked = computed(() => !!props.realmId);\n        const isSecretHashed = computed(\n            () => manager.data.value && manager.data.value.secret === form.secret && form.secret.startsWith('$'),\n        );\n\n        const generateSecret = () => {\n            form.secret = createNanoID(64);\n        };\n\n        function initForm() {\n            if (props.name) {\n                form.name = props.name;\n            }\n\n            if (props.realmId) {\n                form.realm_id = props.realmId;\n            }\n\n            assignFormProperties(form, manager.data.value);\n\n            if (form.secret.length === 0) {\n                generateSecret();\n            }\n        }\n\n        watch(updatedAt, (val, oldVal) => {\n            if (val && val !== oldVal) {\n                manager.data.value = props.entity;\n\n                initForm();\n            }\n        });\n\n        initForm();\n\n        const submit = async () => {\n            if ($v.value.$invalid) {\n                return;\n            }\n\n            await manager.createOrUpdate({\n                ...form,\n                secret: isSecretHashed.value ? '' : form.secret,\n            });\n        };\n\n        const translationsValidation = useTranslationsForNestedValidation($v.value);\n        const translationsSubmit = createFormSubmitTranslations();\n\n        const translationsDefault = useTranslationsForGroup(\n            TranslatorTranslationGroup.DEFAULT,\n            [\n                { key: TranslatorTranslationDefaultKey.GENERATE },\n                { key: TranslatorTranslationDefaultKey.HASHED },\n                { key: TranslatorTranslationDefaultKey.NAME },\n                { key: TranslatorTranslationDefaultKey.DISPLAY_NAME },\n                { key: TranslatorTranslationDefaultKey.DESCRIPTION },\n                { key: TranslatorTranslationDefaultKey.SECRET },\n            ],\n        );\n\n        const render = () => {\n            const name = buildFormGroup({\n                validationMessages: translationsValidation.name.value,\n                validationSeverity: getVuelidateSeverity($v.value.name),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.NAME].value,\n                content: buildFormInput({\n                    value: $v.value.name.$model,\n                    onChange(input) {\n                        $v.value.name.$model = input;\n                    },\n                    props: { disabled: isNameFixed.value },\n                }),\n            });\n\n            const displayName = buildFormGroup({\n                validationMessages: translationsValidation.display_name.value,\n                validationSeverity: getVuelidateSeverity($v.value.display_name),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.DISPLAY_NAME].value,\n                content: buildFormInput({\n                    value: $v.value.display_name.$model,\n                    onChange(input) {\n                        $v.value.display_name.$model = input;\n                    },\n                }),\n            });\n\n            let id : VNodeArrayChildren = [];\n\n            if (manager.data.value) {\n                id = [\n                    buildFormGroup({\n                        label: true,\n                        labelContent: 'ID',\n                        content: buildFormInput({\n                            value: manager.data.value.id,\n                            props: { disabled: true },\n                        }),\n                    }),\n                ];\n            }\n\n            const secret = buildFormGroup({\n                validationMessages: translationsValidation.secret.value,\n                validationSeverity: getVuelidateSeverity($v.value.secret),\n                label: true,\n                labelContent: [\n                    translationsDefault[TranslatorTranslationDefaultKey.SECRET].value,\n                    isSecretHashed.value ? h('span', { class: 'text-danger font-weight-bold ps-1' }, [\n                        translationsDefault[TranslatorTranslationDefaultKey.HASHED].value,\n                        ' ',\n                        h('i', { class: 'fa fa-exclamation-triangle ps-1' }),\n                    ]) : '',\n                ],\n                content: buildFormInput({\n                    value: $v.value.secret.$model,\n                    onChange(input) {\n                        $v.value.secret.$model = input;\n                    },\n                }),\n            });\n\n            const secretInfo = h('div', [\n                h('button', {\n                    class: 'btn btn-dark btn-xs',\n                    onClick($event: any) {\n                        $event.preventDefault();\n\n                        generateSecret.call(null);\n                    },\n                }, [\n                    h('i', { class: 'fa fa-wrench' }),\n                    ' ',\n                    translationsDefault[TranslatorTranslationDefaultKey.GENERATE].value,\n                ]),\n            ]);\n\n            const submitForm = buildFormSubmitWithTranslations({\n                busy: busy.value,\n                submit,\n                isEditing: isEditing.value,\n                invalid: $v.value.$invalid,\n            }, translationsSubmit);\n\n            const leftColumn = h('div', { class: 'col' }, [\n                id,\n                name,\n                displayName,\n                secret,\n                secretInfo,\n                h('hr'),\n                submitForm,\n            ]);\n\n            let rightColumn : VNodeArrayChildren = [];\n\n            if (\n                !isRealmLocked.value\n            ) {\n                const realm = h(ARealms, {}, {\n                    [SlotName.ITEM_ACTIONS]: (\n                        props: {\n                            data: Realm,\n                            busy: boolean \n                        },\n                    ) => renderToggleButton({\n                        value: form.realm_id === props.data.id,\n                        isBusy: props.busy,\n                        changed(value) {\n                            if (value) {\n                                form.realm_id = props.data.id;\n                            } else {\n                                form.realm_id = '';\n                            }\n                        },\n                    }),\n                });\n\n                rightColumn = [\n                    h('div', { class: 'col' }, [\n                        realm,\n                    ]),\n                ];\n            }\n\n            return h('form', {\n                onSubmit($event: any) {\n                    $event.preventDefault();\n\n                    return submit.apply(null);\n                },\n            }, [\n                h('div', { class: 'row' }, [\n                    leftColumn,\n                    rightColumn,\n                ]),\n            ]);\n        };\n\n        return () => render();\n    },\n});\n\nexport default ARobotForm;\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { Robot } from '@authup/core-kit';\nimport type { EntityCollectionVSlots } from '../../utility';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup, \n    TranslatorTranslationVuecsKey, \n    useTranslation,\n} from '../../../core';\nimport {\n    defineEntityCollectionManager,\n    defineEntityCollectionVEmitOptions,\n    defineEntityCollectionVProps,\n} from '../../utility';\n\nexport const ARobots = defineComponent({\n    props: defineEntityCollectionVProps<Robot>(),\n    emits: defineEntityCollectionVEmitOptions<Robot>(),\n    slots: Object as SlotsType<EntityCollectionVSlots<Robot>>,\n    setup(props, ctx) {\n        const { render } = defineEntityCollectionManager({\n            type: `${EntityType.ROBOT}`,\n            props,\n            setup: ctx,\n        });\n\n        const translationName = useTranslation({\n            group: TranslatorTranslationGroup.VUECS,\n            key: TranslatorTranslationDefaultKey.ROBOTS,\n        });\n\n        const translation = useTranslation({\n            group: TranslatorTranslationGroup.VUECS,\n            key: TranslatorTranslationVuecsKey.NO_MORE,\n            data: { name: translationName },\n        });\n\n        return () => render({ noMore: { content: translation.value } });\n    },\n});\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport ARobotPermissionAssignment from '../robot-permission/ARobotPermissionAssignment.vue';\nimport { ARobots } from '../robot';\n\nexport default defineComponent({\n    components: { ARobots, ARobotPermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <ARobots>\n        <template #itemActions=\"{ data }\">\n            <ARobotPermissionAssignment\n                :key=\"data.id\"\n                :permission-id=\"entityId\"\n                :robot-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </ARobots>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport ARobotPermissionAssignment from '../robot-permission/ARobotPermissionAssignment.vue';\nimport { ARobots } from '../robot';\n\nexport default defineComponent({\n    components: { ARobots, ARobotPermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <ARobots>\n        <template #itemActions=\"{ data }\">\n            <ARobotPermissionAssignment\n                :key=\"data.id\"\n                :permission-id=\"entityId\"\n                :robot-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </ARobots>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { RolePermission } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\nimport { APermissionPolicyBindingButton } from '../permission-policy-binding';\n\nexport default defineComponent({\n    components: { AToggleButton, APermissionPolicyBindingButton },\n    props: {\n        roleId: { type: String, required: true },\n        permissionId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<RolePermission>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.ROLE_PERMISSION}`,\n            setup,\n            query: () => ({\n                filters: {\n                    role_id: props.roleId,\n                    permission_id: props.permissionId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.role_id === props.roleId &&\n                        event.data.permission_id === props.permissionId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    role_id: props.roleId,\n                    permission_id: props.permissionId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    role_id: props.roleId,\n                    permission_id: props.permissionId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        const handleUpdated = (entity: RolePermission) => {\n            manager.updated(entity);\n        };\n\n        return {\n            manager,\n            handleChanged,\n            handleUpdated,\n            EntityType,\n        };\n    },\n});\n</script>\n<template>\n    <span class=\"d-flex gap-1\">\n        <AToggleButton\n            :value=\"!!manager.data.value\"\n            :is-busy=\"manager.busy.value\"\n            @changed=\"handleChanged\"\n        />\n        <APermissionPolicyBindingButton\n            v-if=\"manager.data.value\"\n            :key=\"manager.data.value.id\"\n            :entity-type=\"EntityType.ROLE_PERMISSION\"\n            :entity=\"manager.data.value\"\n            @updated=\"handleUpdated\"\n        />\n    </span>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { RolePermission } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\nimport { APermissionPolicyBindingButton } from '../permission-policy-binding';\n\nexport default defineComponent({\n    components: { AToggleButton, APermissionPolicyBindingButton },\n    props: {\n        roleId: { type: String, required: true },\n        permissionId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<RolePermission>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.ROLE_PERMISSION}`,\n            setup,\n            query: () => ({\n                filters: {\n                    role_id: props.roleId,\n                    permission_id: props.permissionId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.role_id === props.roleId &&\n                        event.data.permission_id === props.permissionId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    role_id: props.roleId,\n                    permission_id: props.permissionId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    role_id: props.roleId,\n                    permission_id: props.permissionId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        const handleUpdated = (entity: RolePermission) => {\n            manager.updated(entity);\n        };\n\n        return {\n            manager,\n            handleChanged,\n            handleUpdated,\n            EntityType,\n        };\n    },\n});\n</script>\n<template>\n    <span class=\"d-flex gap-1\">\n        <AToggleButton\n            :value=\"!!manager.data.value\"\n            :is-busy=\"manager.busy.value\"\n            @changed=\"handleChanged\"\n        />\n        <APermissionPolicyBindingButton\n            v-if=\"manager.data.value\"\n            :key=\"manager.data.value.id\"\n            :entity-type=\"EntityType.ROLE_PERMISSION\"\n            :entity=\"manager.data.value\"\n            @updated=\"handleUpdated\"\n        />\n    </span>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { APermissions } from '../permission';\nimport ARolePermissionAssignment from './ARolePermissionAssignment.vue';\n\nexport default defineComponent({\n    components: { APermissions, ARolePermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <APermissions>\n        <template #itemActions=\"{ data }\">\n            <ARolePermissionAssignment\n                :key=\"data.id\"\n                :role-id=\"entityId\"\n                :permission-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </APermissions>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { APermissions } from '../permission';\nimport ARolePermissionAssignment from './ARolePermissionAssignment.vue';\n\nexport default defineComponent({\n    components: { APermissions, ARolePermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <APermissions>\n        <template #itemActions=\"{ data }\">\n            <ARolePermissionAssignment\n                :key=\"data.id\"\n                :role-id=\"entityId\"\n                :permission-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </APermissions>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { ARolePermissionAssignment } from '../role-permission';\nimport { ARoles } from '../role';\n\nexport default defineComponent({\n    components: { ARoles, ARolePermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <ARoles>\n        <template #itemActions=\"{ data }\">\n            <ARolePermissionAssignment\n                :key=\"data.id\"\n                :permission-id=\"entityId\"\n                :role-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </ARoles>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { ARolePermissionAssignment } from '../role-permission';\nimport { ARoles } from '../role';\n\nexport default defineComponent({\n    components: { ARoles, ARolePermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <ARoles>\n        <template #itemActions=\"{ data }\">\n            <ARolePermissionAssignment\n                :key=\"data.id\"\n                :permission-id=\"entityId\"\n                :role-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </ARoles>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { UserPermission } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\nimport { APermissionPolicyBindingButton } from '../permission-policy-binding';\n\nexport default defineComponent({\n    components: { AToggleButton, APermissionPolicyBindingButton },\n    props: {\n        userId: { type: String, required: true },\n        permissionId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<UserPermission>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.USER_PERMISSION}`,\n            setup,\n            query: () => ({\n                filters: {\n                    user_id: props.userId,\n                    permission_id: props.permissionId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.permission_id === props.permissionId &&\n                        event.data.user_id === props.userId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    user_id: props.userId,\n                    permission_id: props.permissionId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    user_id: props.userId,\n                    permission_id: props.permissionId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        const handleUpdated = (entity: UserPermission) => {\n            manager.updated(entity);\n        };\n\n        return {\n            manager,\n            handleChanged,\n            handleUpdated,\n            EntityType,\n        };\n    },\n});\n</script>\n<template>\n    <span class=\"d-flex gap-1\">\n        <AToggleButton\n            :value=\"!!manager.data.value\"\n            :is-busy=\"manager.busy.value\"\n            @changed=\"handleChanged\"\n        />\n        <APermissionPolicyBindingButton\n            v-if=\"manager.data.value\"\n            :key=\"manager.data.value.id\"\n            :entity-type=\"EntityType.USER_PERMISSION\"\n            :entity=\"manager.data.value\"\n            @updated=\"handleUpdated\"\n        />\n    </span>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { UserPermission } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\nimport { APermissionPolicyBindingButton } from '../permission-policy-binding';\n\nexport default defineComponent({\n    components: { AToggleButton, APermissionPolicyBindingButton },\n    props: {\n        userId: { type: String, required: true },\n        permissionId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<UserPermission>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.USER_PERMISSION}`,\n            setup,\n            query: () => ({\n                filters: {\n                    user_id: props.userId,\n                    permission_id: props.permissionId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.permission_id === props.permissionId &&\n                        event.data.user_id === props.userId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    user_id: props.userId,\n                    permission_id: props.permissionId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    user_id: props.userId,\n                    permission_id: props.permissionId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        const handleUpdated = (entity: UserPermission) => {\n            manager.updated(entity);\n        };\n\n        return {\n            manager,\n            handleChanged,\n            handleUpdated,\n            EntityType,\n        };\n    },\n});\n</script>\n<template>\n    <span class=\"d-flex gap-1\">\n        <AToggleButton\n            :value=\"!!manager.data.value\"\n            :is-busy=\"manager.busy.value\"\n            @changed=\"handleChanged\"\n        />\n        <APermissionPolicyBindingButton\n            v-if=\"manager.data.value\"\n            :key=\"manager.data.value.id\"\n            :entity-type=\"EntityType.USER_PERMISSION\"\n            :entity=\"manager.data.value\"\n            @updated=\"handleUpdated\"\n        />\n    </span>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { APermissions } from '../permission';\nimport AUserPermissionAssignment from './AUserPermissionAssignment.vue';\n\nexport default defineComponent({\n    components: { APermissions, AUserPermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <APermissions>\n        <template #itemActions=\"{ data }\">\n            <AUserPermissionAssignment\n                :key=\"data.id\"\n                :user-id=\"entityId\"\n                :permission-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </APermissions>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { APermissions } from '../permission';\nimport AUserPermissionAssignment from './AUserPermissionAssignment.vue';\n\nexport default defineComponent({\n    components: { APermissions, AUserPermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <APermissions>\n        <template #itemActions=\"{ data }\">\n            <AUserPermissionAssignment\n                :key=\"data.id\"\n                :user-id=\"entityId\"\n                :permission-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </APermissions>\n</template>\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { User } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { EntityVSlots } from '../../utility';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n    defineEntityVProps,\n} from '../../utility';\n\nexport const AUser = defineComponent({\n    props: defineEntityVProps<User>(),\n    emits: defineEntityVEmitOptions<User>(),\n    slots: Object as SlotsType<EntityVSlots<User>>,\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.USER}`,\n            props,\n            setup,\n        });\n\n        try {\n            await manager.resolveOrFail();\n\n            return () => manager.render();\n        } catch (e) {\n            return () => manager.renderError(e);\n        }\n    },\n});\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, User } from '@authup/core-kit';\nimport { EntityType, buildUserFakeEmail, isUserFakeEmail } from '@authup/core-kit';\nimport { buildFormGroup, buildFormInput, buildFormInputCheckbox } from '@vuecs/form-controls';\nimport { SlotName } from '@vuecs/list-controls';\nimport useVuelidate from '@vuelidate/core';\nimport {\n    email, \n    maxLength, \n    minLength, \n    required,\n} from '@vuelidate/validators';\nimport type { PropType, VNodeArrayChildren } from 'vue';\nimport {\n    computed, \n    defineComponent, \n    h, \n    reactive, \n    ref, \n    watch,\n} from 'vue';\nimport { useIsEditing, useUpdatedAt } from '../../../composables';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup, \n    VuelidateCustomRule,\n    VuelidateCustomRuleKey,\n    assignFormProperties,\n    buildFormSubmitWithTranslations, \n    createFormSubmitTranslations, \n    getVuelidateSeverity, \n    useTranslationsForGroup, \n    useTranslationsForNestedValidation,\n} from '../../../core';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n    renderToggleButton,\n} from '../../utility';\nimport { ARealms } from '../realm';\n\nexport const AUserForm = defineComponent({\n    props: {\n        entity: {\n            type: Object as PropType<User | null>,\n            default: undefined,\n        },\n        realmId: {\n            type: String as PropType<string | null>,\n            default: undefined,\n        },\n        canManage: {\n            type: Boolean,\n            default: true,\n        },\n    },\n    emits: defineEntityVEmitOptions<User>(),\n    async setup(props, ctx) {\n        const busy = ref(false);\n        const form = reactive({\n            active: true,\n            name: '',\n            name_locked: false,\n            display_name: '',\n            email: '',\n            realm_id: '',\n        });\n\n        const $v = useVuelidate({\n            active: {},\n            name: {\n                [\n                VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT\n                ]: VuelidateCustomRule[VuelidateCustomRuleKey.ALPHA_UPPER_NUM_HYPHEN_UNDERSCORE_DOT],\n                required,\n                minLength: minLength(3),\n                maxLength: maxLength(128),\n            },\n            name_locked: {},\n            display_name: {\n                minLength: minLength(3),\n                maxLength: maxLength(256),\n            },\n            email: {\n                minLength: minLength(5),\n                maxLength: maxLength(255),\n                email,\n                required,\n            },\n            realm_id: { required },\n        }, form);\n\n        const manager = defineEntityManager({\n            type: `${EntityType.USER}`,\n            setup: ctx,\n            props,\n        });\n\n        const isEditing = useIsEditing(manager.data);\n        const updatedAt = useUpdatedAt(props.entity);\n\n        const isRealmLocked = computed(() => !!props.realmId);\n\n        function initForm() {\n            if (props.realmId) {\n                form.realm_id = props.realmId;\n            }\n\n            if (\n                !!manager.data.value &&\n                typeof manager.data.value.name_locked !== 'undefined'\n            ) {\n                form.name_locked = manager.data.value.name_locked;\n            }\n\n            assignFormProperties(form, manager.data.value);\n        }\n\n        watch(updatedAt, (val, oldVal) => {\n            if (val && val !== oldVal) {\n                manager.data.value = props.entity ?? undefined;\n                initForm();\n            }\n        });\n\n        initForm();\n\n        const submit = async () => {\n            if ($v.value.$invalid) {\n                return;\n            }\n\n            await manager.createOrUpdate(form);\n        };\n\n        const translationsValidation = useTranslationsForNestedValidation($v.value);\n        const translationsSubmit = createFormSubmitTranslations();\n\n        const translationsDefault = useTranslationsForGroup(\n            TranslatorTranslationGroup.DEFAULT,\n            [\n                { key: TranslatorTranslationDefaultKey.ACTIVE },\n                { key: TranslatorTranslationDefaultKey.INACTIVE },\n                { key: TranslatorTranslationDefaultKey.DISPLAY_NAME },\n                { key: TranslatorTranslationDefaultKey.EMAIL },\n                { key: TranslatorTranslationDefaultKey.LOCKED },\n                { key: TranslatorTranslationDefaultKey.NOT_LOCKED },\n                { key: TranslatorTranslationDefaultKey.NAME },\n                { key: TranslatorTranslationDefaultKey.DESCRIPTION },\n            ],\n        );\n\n        const render = () => {\n            const name = buildFormGroup({\n                validationMessages: translationsValidation.name.value,\n                validationSeverity: getVuelidateSeverity($v.value.name),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.NAME].value,\n                content: buildFormInput({\n                    value: $v.value.name.$model,\n                    onChange(input) {\n                        $v.value.name.$model = input;\n\n                        if (!$v.value.email.$model || isUserFakeEmail($v.value.email.$model)) {\n                            $v.value.email.$model = buildUserFakeEmail(input);\n                        }\n                    },\n                    props: { disabled: form.name_locked },\n                }),\n            });\n\n            const displayName = buildFormGroup({\n                validationMessages: translationsValidation.display_name.value,\n                validationSeverity: getVuelidateSeverity($v.value.display_name),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.DISPLAY_NAME].value,\n                content: buildFormInput({\n                    value: $v.value.display_name.$model,\n                    onChange(input) {\n                        $v.value.display_name.$model = input;\n                    },\n                }),\n            });\n\n            const email = buildFormGroup({\n                validationMessages: translationsValidation.email.value,\n                validationSeverity: getVuelidateSeverity($v.value.email),\n                label: true,\n                labelContent: translationsDefault[TranslatorTranslationDefaultKey.EMAIL].value,\n                content: buildFormInput({\n                    value: $v.value.email.$model,\n                    props: {\n                        type: 'email',\n                        placeholder: '...@...',\n                    },\n                    onChange(value) {\n                        $v.value.email.$model = value;\n                    },\n                }),\n            });\n\n            let checks : VNodeArrayChildren = [];\n\n            if (props.canManage) {\n                let nameLock : VNodeArrayChildren = [];\n                if (props.entity) {\n                    nameLock = [\n                        buildFormInputCheckbox({\n                            groupClass: 'form-switch mt-3',\n                            labelContent: h('span', {\n                                class: {\n                                    'text-warning': !form.name_locked,\n                                    'text-success': form.name_locked,\n                                },\n                            }, [form.name_locked ?\n                                translationsDefault[TranslatorTranslationDefaultKey.LOCKED].value :\n                                translationsDefault[TranslatorTranslationDefaultKey.NOT_LOCKED].value]), // todo: add translation\n                            value: form.name_locked,\n                            onChange(input) {\n                                form.name_locked = input;\n                            },\n                        }),\n                    ];\n                }\n\n                checks = [\n                    h('div', { class: 'row' }, [\n                        h('div', { class: 'col' }, [\n                            buildFormInputCheckbox({\n                                groupClass: 'form-switch mt-3',\n                                labelContent: h('span', {\n                                    class: {\n                                        'text-danger': !form.active,\n                                        'text-success': form.active,\n                                    },\n                                }, [form.active ?\n                                    translationsDefault[TranslatorTranslationDefaultKey.ACTIVE].value :\n                                    translationsDefault[TranslatorTranslationDefaultKey.INACTIVE].value]),\n                                value: form.active,\n                                onChange(input) {\n                                    form.active = input;\n                                },\n                            }),\n                        ]),\n                        h('div', { class: 'col' }, [\n                            nameLock,\n                        ]),\n                    ]),\n\n                ];\n            }\n\n            const submitForm = buildFormSubmitWithTranslations({\n                submit,\n                busy: busy.value,\n                isEditing: isEditing.value,\n                invalid: $v.value.$invalid,\n            }, translationsSubmit);\n\n            const leftColumn = h('div', { class: 'col' }, [\n                name,\n                displayName,\n                email,\n                checks,\n                h('hr'),\n                submitForm,\n            ]);\n\n            let rightColumn : VNodeArrayChildren = [];\n\n            if (\n                props.canManage &&\n                !isRealmLocked.value\n            ) {\n                const realm = h(ARealms, {}, {\n                    [SlotName.ITEM_ACTIONS]: (props: {\n                        data: Realm,\n                        busy: boolean \n                    }) => renderToggleButton({\n                        value: form.realm_id === props.data.id,\n                        isBusy: props.busy,\n                        changed(value) {\n                            if (value) {\n                                form.realm_id = props.data.id;\n                            } else {\n                                form.realm_id = '';\n                            }\n                        },\n                    }),\n                });\n\n                rightColumn = [\n                    h('div', { class: 'col' }, [\n                        realm,\n                    ]),\n                ];\n            }\n\n            return h('form', {\n                onSubmit($event: any) {\n                    $event.preventDefault();\n\n                    return submit.apply(null);\n                },\n            }, [\n                h('div', { class: 'row' }, [\n                    leftColumn,\n                    rightColumn,\n                ]),\n            ]);\n        };\n\n        return () => render();\n    },\n});\n\nexport default AUserForm;\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { EntityType } from '@authup/core-kit';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport type { User } from '@authup/core-kit';\nimport type { EntityCollectionVSlots } from '../../utility';\nimport {\n    TranslatorTranslationDefaultKey,\n    TranslatorTranslationGroup,\n    TranslatorTranslationVuecsKey,\n    useTranslation,\n} from '../../../core';\nimport {\n    defineEntityCollectionManager,\n    defineEntityCollectionVEmitOptions,\n    defineEntityCollectionVProps,\n} from '../../utility';\n\nexport const AUsers = defineComponent({\n    props: defineEntityCollectionVProps<User>(),\n    emits: defineEntityCollectionVEmitOptions<User>(),\n    slots: Object as SlotsType<EntityCollectionVSlots<User>>,\n    setup(props, ctx) {\n        const { render } = defineEntityCollectionManager({\n            type: `${EntityType.USER}`,\n            props,\n            setup: ctx,\n        });\n\n        const translationName = useTranslation({\n            group: TranslatorTranslationGroup.DEFAULT,\n            key: TranslatorTranslationDefaultKey.USERS,\n        });\n\n        const translation = useTranslation({\n            group: TranslatorTranslationGroup.VUECS,\n            key: TranslatorTranslationVuecsKey.NO_MORE,\n            data: { name: translationName },\n        });\n\n        return () => render({ noMore: { content: translation.value } });\n    },\n});\n\nexport default AUsers;\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport useVuelidate from '@vuelidate/core';\nimport {\n    maxLength, \n    minLength, \n    required, \n    sameAs,\n} from '@vuelidate/validators';\nimport type { PropType } from 'vue';\nimport {\n    defineComponent, \n    h, \n    reactive, \n    ref, \n    toRef,\n} from 'vue';\nimport { buildFormGroup, buildFormInput, buildFormInputCheckbox } from '@vuecs/form-controls';\nimport {\n    buildFormSubmitWithTranslations,\n    createFormSubmitTranslations, \n    getVuelidateSeverity,\n    injectHTTPClient,\n    useTranslationsForNestedValidation,\n    wrapFnWithBusyState,\n} from '../../../core';\n\nexport const AUserPasswordForm = defineComponent({\n    props: {\n        id: {\n            type: String as PropType<string | null>,\n            default: undefined,\n        },\n    },\n    emits: ['created', 'deleted', 'updated', 'failed'],\n    setup(props, ctx) {\n        const apiClient = injectHTTPClient();\n        const busy = ref(false);\n        const form = reactive({\n            password: '',\n            password_repeat: '',\n        });\n\n        const passwordShow = ref(false);\n        const passwordRef = toRef(form, 'password');\n\n        const $v = useVuelidate({\n            password: {\n                required,\n                minLength: minLength(5),\n                maxLength: maxLength(100),\n            },\n            password_repeat: {\n                minLength: minLength(5),\n                maxLength: maxLength(100),\n                sameAs: sameAs(passwordRef),\n            },\n        }, form);\n\n        const submit = wrapFnWithBusyState(busy, async () => {\n            if (!props.id) {\n                return;\n            }\n\n            try {\n                const user = await apiClient.user.update(props.id, {\n                    password: form.password,\n                    password_repeat: form.password_repeat,\n                });\n\n                ctx.emit('updated', user);\n            } catch (e) {\n                if (e instanceof Error) {\n                    ctx.emit('failed', e);\n                }\n            }\n        });\n\n        const validationMessages = useTranslationsForNestedValidation($v.value);\n        const submitTranslations = createFormSubmitTranslations();\n\n        const render = () => {\n            const password = buildFormGroup({\n                validationMessages: validationMessages.password.value,\n                validationSeverity: getVuelidateSeverity($v.value.password),\n                label: true,\n                labelContent: 'Password',\n                content: buildFormInput({\n                    value: $v.value.password.$model,\n                    onChange(input) {\n                        $v.value.password.$model = input;\n                    },\n                    props: {\n                        type: passwordShow.value ? 'text' : 'password',\n                        autocomplete: 'new-password',\n                    },\n                }),\n            });\n\n            const passwordRepeat = buildFormGroup({\n                validationMessages: validationMessages.password_repeat.value,\n                validationSeverity: getVuelidateSeverity($v.value.password_repeat),\n                label: true,\n                labelContent: 'Password repeat',\n                content: buildFormInput({\n                    value: $v.value.password_repeat.$model,\n                    onChange(input) {\n                        $v.value.password_repeat.$model = input;\n                    },\n                    props: {\n                        type: passwordShow.value ? 'text' : 'password',\n                        autocomplete: 'new-password',\n                    },\n                }),\n            });\n\n            const showPassword = buildFormInputCheckbox({\n                groupClass: 'mt-3',\n                labelContent: [\n                    'Password ',\n                    (passwordShow.value ? 'hide' : 'show'),\n                ],\n                value: passwordShow.value,\n                onChange(input) {\n                    passwordShow.value = input;\n                },\n            });\n\n            const submitButton = buildFormSubmitWithTranslations({\n                submit,\n                isEditing: true,\n                invalid: $v.value.$invalid,\n            }, submitTranslations);\n\n            return h('form', {\n                onSubmit($event: any) {\n                    $event.preventDefault();\n\n                    return submit.apply(null);\n                },\n            }, [\n                password,\n                passwordRepeat,\n                showPassword,\n                submitButton,\n            ]);\n        };\n\n        return () => render();\n    },\n});\n\nexport default AUserPasswordForm;\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { AUserPermissionAssignment } from '../user-permission';\nimport { AUsers } from '../user';\n\nexport default defineComponent({\n    components: { AUsers, AUserPermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <AUsers>\n        <template #itemActions=\"{ data }\">\n            <AUserPermissionAssignment\n                :key=\"data.id\"\n                :permission-id=\"entityId\"\n                :user-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </AUsers>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { AUserPermissionAssignment } from '../user-permission';\nimport { AUsers } from '../user';\n\nexport default defineComponent({\n    components: { AUsers, AUserPermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <AUsers>\n        <template #itemActions=\"{ data }\">\n            <AUserPermissionAssignment\n                :key=\"data.id\"\n                :permission-id=\"entityId\"\n                :user-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </AUsers>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { APermissions } from '../permission';\nimport ARobotPermissionAssignment from './ARobotPermissionAssignment.vue';\n\nexport default defineComponent({\n    components: { APermissions, ARobotPermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <APermissions>\n        <template #itemActions=\"{ data }\">\n            <ARobotPermissionAssignment\n                :key=\"data.id\"\n                :robot-id=\"entityId\"\n                :permission-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </APermissions>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { APermissions } from '../permission';\nimport ARobotPermissionAssignment from './ARobotPermissionAssignment.vue';\n\nexport default defineComponent({\n    components: { APermissions, ARobotPermissionAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <APermissions>\n        <template #itemActions=\"{ data }\">\n            <ARobotPermissionAssignment\n                :key=\"data.id\"\n                :robot-id=\"entityId\"\n                :permission-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </APermissions>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { RobotRole } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\n\nexport default defineComponent({\n    components: { AToggleButton },\n    props: {\n        roleId: { type: String, required: true },\n        robotId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<RobotRole>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.ROBOT_ROLE}`,\n            setup,\n            query: () => ({\n                filters: {\n                    robot_id: props.robotId,\n                    role_id: props.roleId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.robot_id === props.robotId &&\n                        event.data.role_id === props.roleId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    robot_id: props.robotId,\n                    role_id: props.roleId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    robot_id: props.robotId,\n                    role_id: props.roleId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        return {\n            manager,\n            handleChanged,\n        };\n    },\n});\n</script>\n<template>\n    <AToggleButton\n        :value=\"!!manager.data.value\"\n        :is-busy=\"manager.busy.value\"\n        @changed=\"handleChanged\"\n    />\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { RobotRole } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\n\nexport default defineComponent({\n    components: { AToggleButton },\n    props: {\n        roleId: { type: String, required: true },\n        robotId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<RobotRole>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.ROBOT_ROLE}`,\n            setup,\n            query: () => ({\n                filters: {\n                    robot_id: props.robotId,\n                    role_id: props.roleId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.robot_id === props.robotId &&\n                        event.data.role_id === props.roleId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    robot_id: props.robotId,\n                    role_id: props.roleId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    robot_id: props.robotId,\n                    role_id: props.roleId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        return {\n            manager,\n            handleChanged,\n        };\n    },\n});\n</script>\n<template>\n    <AToggleButton\n        :value=\"!!manager.data.value\"\n        :is-busy=\"manager.busy.value\"\n        @changed=\"handleChanged\"\n    />\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { ARoles } from '../role';\nimport ARobotRoleAssignment from './ARobotRoleAssignment.vue';\n\nexport default defineComponent({\n    components: { ARoles, ARobotRoleAssignment },\n    props: { entityId: { type: String, required: true } },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <ARoles>\n        <template #itemActions=\"{ data }\">\n            <ARobotRoleAssignment\n                :key=\"data.id\"\n                :robot-id=\"entityId\"\n                :role-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </ARoles>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { ARoles } from '../role';\nimport ARobotRoleAssignment from './ARobotRoleAssignment.vue';\n\nexport default defineComponent({\n    components: { ARoles, ARobotRoleAssignment },\n    props: { entityId: { type: String, required: true } },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <ARoles>\n        <template #itemActions=\"{ data }\">\n            <ARobotRoleAssignment\n                :key=\"data.id\"\n                :robot-id=\"entityId\"\n                :role-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </ARoles>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { AClients } from '../client';\nimport { AClientRoleAssignment } from '../client-role';\n\nexport default defineComponent({\n    components: { AClients, AClientRoleAssignment },\n    props: { entityId: { type: String, required: true } },\n});\n</script>\n<template>\n    <AClients>\n        <template #itemActions=\"{ data }\">\n            <AClientRoleAssignment\n                :key=\"data.id\"\n                :role-id=\"entityId\"\n                :client-id=\"data.id\"\n            />\n        </template>\n    </AClients>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { AClients } from '../client';\nimport { AClientRoleAssignment } from '../client-role';\n\nexport default defineComponent({\n    components: { AClients, AClientRoleAssignment },\n    props: { entityId: { type: String, required: true } },\n});\n</script>\n<template>\n    <AClients>\n        <template #itemActions=\"{ data }\">\n            <AClientRoleAssignment\n                :key=\"data.id\"\n                :role-id=\"entityId\"\n                :client-id=\"data.id\"\n            />\n        </template>\n    </AClients>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport ARobotRoleAssignment from '../robot-role/ARobotRoleAssignment.vue';\nimport { ARobots } from '../robot';\n\nexport default defineComponent({\n    components: { ARobots, ARobotRoleAssignment },\n    props: { entityId: { type: String, required: true } },\n});\n</script>\n<template>\n    <ARobots>\n        <template #itemActions=\"{ data }\">\n            <ARobotRoleAssignment\n                :key=\"data.id\"\n                :role-id=\"entityId\"\n                :robot-id=\"data.id\"\n            />\n        </template>\n    </ARobots>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport ARobotRoleAssignment from '../robot-role/ARobotRoleAssignment.vue';\nimport { ARobots } from '../robot';\n\nexport default defineComponent({\n    components: { ARobots, ARobotRoleAssignment },\n    props: { entityId: { type: String, required: true } },\n});\n</script>\n<template>\n    <ARobots>\n        <template #itemActions=\"{ data }\">\n            <ARobotRoleAssignment\n                :key=\"data.id\"\n                :role-id=\"entityId\"\n                :robot-id=\"data.id\"\n            />\n        </template>\n    </ARobots>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { UserRole } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\n\nexport default defineComponent({\n    components: { AToggleButton },\n    props: {\n        roleId: { type: String, required: true },\n        userId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<UserRole>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.USER_ROLE}`,\n            setup,\n            query: () => ({\n                filters: {\n                    user_id: props.userId,\n                    role_id: props.roleId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.role_id === props.roleId &&\n                        event.data.user_id === props.userId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    user_id: props.userId,\n                    role_id: props.roleId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    user_id: props.userId,\n                    role_id: props.roleId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        return {\n            manager,\n            handleChanged,\n        };\n    },\n});\n</script>\n<template>\n    <AToggleButton\n        :value=\"!!manager.data.value\"\n        :is-busy=\"manager.busy.value\"\n        @changed=\"handleChanged\"\n    />\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { EntityType } from '@authup/core-kit';\nimport type { UserRole } from '@authup/core-kit';\nimport { defineComponent } from 'vue';\nimport {\n    defineEntityManager,\n    defineEntityVEmitOptions,\n} from '../../utility';\nimport AToggleButton from '../../utility/toggle-button/AToggleButton.vue';\n\nexport default defineComponent({\n    components: { AToggleButton },\n    props: {\n        roleId: { type: String, required: true },\n        userId: { type: String, required: true },\n    },\n    emits: defineEntityVEmitOptions<UserRole>(),\n    async setup(props, setup) {\n        const manager = defineEntityManager({\n            type: `${EntityType.USER_ROLE}`,\n            setup,\n            query: () => ({\n                filters: {\n                    user_id: props.userId,\n                    role_id: props.roleId,\n                },\n            }),\n            socket: {\n                processEvent(event) {\n                    return event.data.role_id === props.roleId &&\n                        event.data.user_id === props.userId;\n                },\n            },\n        });\n\n        await manager.resolve({\n            query: {\n                filters: {\n                    user_id: props.userId,\n                    role_id: props.roleId,\n                },\n            },\n        });\n\n        const handleChanged = (value: boolean) => {\n            if (value) {\n                return manager.create({\n                    user_id: props.userId,\n                    role_id: props.roleId,\n                });\n            }\n\n            return manager.delete();\n        };\n\n        return {\n            manager,\n            handleChanged,\n        };\n    },\n});\n</script>\n<template>\n    <AToggleButton\n        :value=\"!!manager.data.value\"\n        :is-busy=\"manager.busy.value\"\n        @changed=\"handleChanged\"\n    />\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { ARoles } from '../role';\nimport AUserRoleAssignment from './AUserRoleAssignment.vue';\n\nexport default defineComponent({\n    components: { ARoles, AUserRoleAssignment },\n    props: { entityId: { type: String, required: true } },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <ARoles>\n        <template #itemActions=\"{ data }\">\n            <AUserRoleAssignment\n                :key=\"data.id\"\n                :user-id=\"entityId\"\n                :role-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </ARoles>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { ARoles } from '../role';\nimport AUserRoleAssignment from './AUserRoleAssignment.vue';\n\nexport default defineComponent({\n    components: { ARoles, AUserRoleAssignment },\n    props: { entityId: { type: String, required: true } },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <ARoles>\n        <template #itemActions=\"{ data }\">\n            <AUserRoleAssignment\n                :key=\"data.id\"\n                :user-id=\"entityId\"\n                :role-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </ARoles>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { AUserRoleAssignment } from '../user-role';\nimport { AUsers } from '../user/AUsers';\n\nexport default defineComponent({\n    components: { AUsers, AUserRoleAssignment },\n    props: { entityId: { type: String, required: true } },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <AUsers>\n        <template #itemActions=\"{ data }\">\n            <AUserRoleAssignment\n                :key=\"data.id\"\n                :role-id=\"entityId\"\n                :user-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </AUsers>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { AUserRoleAssignment } from '../user-role';\nimport { AUsers } from '../user/AUsers';\n\nexport default defineComponent({\n    components: { AUsers, AUserRoleAssignment },\n    props: { entityId: { type: String, required: true } },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <AUsers>\n        <template #itemActions=\"{ data }\">\n            <AUserRoleAssignment\n                :key=\"data.id\"\n                :role-id=\"entityId\"\n                :user-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </AUsers>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { AClients } from '../client';\nimport { AClientScopeAssignment } from '../client-scope';\n\nexport default defineComponent({\n    components: { AClients, AClientScopeAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <AClients>\n        <template #itemActions=\"{ data }\">\n            <AClientScopeAssignment\n                :key=\"data.id\"\n                :scope-id=\"entityId\"\n                :client-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </AClients>\n</template>\n","<!--\n  Copyright (c) 2022.\n  Author Peter Placzek (tada5hi)\n  For the full copyright and license information,\n  view the LICENSE file that was distributed with this source code.\n-->\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\nimport { AClients } from '../client';\nimport { AClientScopeAssignment } from '../client-scope';\n\nexport default defineComponent({\n    components: { AClients, AClientScopeAssignment },\n    props: {\n        entityId: {\n            type: String,\n            required: true,\n        },\n    },\n    setup(props, { slots }) {\n        const forwardedSlots = computed(() => Object.fromEntries(Object.entries(slots).filter(([name]) => name !== 'itemActions')));\n        return { forwardedSlots };\n    },\n});\n</script>\n<template>\n    <AClients>\n        <template #itemActions=\"{ data }\">\n            <AClientScopeAssignment\n                :key=\"data.id\"\n                :scope-id=\"entityId\"\n                :client-id=\"data.id\"\n            />\n        </template>\n        <template\n            v-for=\"(_, name) in forwardedSlots\"\n            :key=\"name\"\n            #[name]=\"slotData\"\n        >\n            <slot\n                :name=\"name\"\n                v-bind=\"slotData ?? {}\"\n            />\n        </template>\n    </AClients>\n</template>\n","/*\n * Copyright (c) 2022-2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport * from './client';\nexport * from './client-permission';\nexport * from './client-role';\nexport * from './client-scope';\nexport * from './identity-provider';\nexport * from './identity-provider-role';\nexport * from './policy';\nexport * from './permission';\nexport * from './permission-client';\nexport * from './permission-policy-binding';\nexport * from './permission-policy';\nexport * from './permission-robot';\nexport * from './permission-role';\nexport * from './permission-user';\nexport * from './realm';\nexport * from './robot';\nexport * from './robot-permission';\nexport * from './robot-role';\nexport * from './role';\nexport * from './role-client';\nexport * from './role-permission';\nexport * from './role-robot';\nexport * from './user-permission';\nexport * from './role-user';\nexport * from './scope';\nexport * from './scope-client';\nexport * from './user';\nexport * from './user-role';\n","/*\n * Copyright (c) 2024-2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport installFormControl from '@vuecs/form-controls';\nimport { installStoreManager } from '@vuecs/form-controls/core';\nimport installPagination from '@vuecs/pagination';\nimport type { App, Component } from 'vue';\nimport * as components from './components/entities';\nimport {\n    installHTTPClient, \n    installHTTPClientAuthenticationHook,\n    installSocketManager,\n    installStore,\n    installTranslator,\n} from './core';\nimport type { Options } from './types';\n\nexport function installComponents(app: App, input?: boolean | string[]) {\n    if (typeof input === 'undefined' || input === false) {\n        return;\n    }\n\n    if (typeof input === 'boolean') {\n        Object.entries(components)\n            .forEach(([componentName, component]) => {\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                app.component(componentName, component as Component);\n            });\n\n        return;\n    }\n\n    Object.entries(components)\n        .forEach(([componentName, component]) => {\n            if (input.includes(componentName)) {\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                app.component(componentName, component as Component);\n            }\n        });\n}\n\nexport function install(app: App, options: Options): void {\n    if (options.realtime) {\n        installSocketManager(app, {\n            pinia: options.pinia,\n            baseURL: options.realtimeURL || options.baseURL,\n        });\n    }\n\n    installStore(app, {\n        pinia: options.pinia,\n        baseURL: options.baseURL,\n        cookieSet: options.cookieSet,\n        cookieGet: options.cookieGet,\n        cookieUnset: options.cookieUnset,\n    });\n\n    installHTTPClientAuthenticationHook(app, {\n        pinia: options.pinia,\n        baseURL: options.baseURL,\n        isServer: options.isServer,\n    });\n\n    installHTTPClient(app, {\n        pinia: options.pinia,\n        baseURL: options.baseURL,\n        isServer: options.isServer,\n    });\n\n    installTranslator(app, { locale: options.translatorLocale });\n\n    installComponents(app, options.components);\n\n    installStoreManager(app);\n\n    app.use(installFormControl);\n    app.use(installPagination);\n}\n","<script lang=\"ts\">\nimport { base64URLEncode } from '@authup/kit';\nimport type { PropType, Ref } from 'vue';\nimport {\n\n    computed,\n    defineComponent,\n    nextTick,\n    reactive,\n    ref,\n} from 'vue';\nimport type { IdentityProvider, OAuth2AuthorizationCodeRequest } from '@authup/core-kit';\nimport { IdentityProviderProtocol } from '@authup/core-kit';\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport useVuelidate from '@vuelidate/core';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport type { BuildInput } from 'rapiq';\nimport { injectHTTPClient, injectStore } from '../../core';\nimport { AIdentityProviderIcon, AIdentityProviders, ARealmPicker } from '../entities';\nimport { APagination, ATitle } from '../utility';\n\nexport default defineComponent({\n\n    components: {\n\n        ARealmPicker,\n        APagination,\n        ATitle,\n        IVuelidate,\n        AIdentityProviders,\n        AIdentityProviderIcon,\n\n    },\n    props: { codeRequest: { type: Object as PropType<OAuth2AuthorizationCodeRequest> } },\n    emits: ['done', 'failed'],\n    setup(props, { emit }) {\n        const apiClient = injectHTTPClient();\n        const store = injectStore();\n\n        const form = reactive({\n            name: '',\n            password: '',\n            realm_id: '',\n\n        });\n\n        const vuelidate = useVuelidate({\n            name: {\n                required,\n                minLength: minLength(3),\n                maxLength: maxLength(255),\n\n            },\n            password: {\n                required,\n                minLength: minLength(3),\n                maxLength: maxLength(255),\n\n            },\n            realm_id: {},\n\n        }, form);\n\n        const busy = ref(false);\n\n        const realmId = computed(() => {\n            if (props.codeRequest && props.codeRequest.realm_id) {\n                return props.codeRequest.realm_id;\n            }\n\n            return form.realm_id;\n        });\n\n        const identityProviderQuery : Ref<BuildInput<IdentityProvider>> = ref({});\n        const resetIdentityProviderQuery = () => {\n            identityProviderQuery.value = {\n                filters: {\n                    realm_id: realmId.value || '',\n                    protocol: `!${IdentityProviderProtocol.LDAP}`,\n                    enabled: true,\n\n                },\n            };\n        };\n\n        resetIdentityProviderQuery();\n\n         \n        const identityProviderRef = ref<null | {\n            load:() => Promise<void>,\n            [key: string]: unknown\n        }>(null);\n        const updateIdentityProviderList = () => {\n            if (identityProviderRef.value) {\n                identityProviderRef.value.load();\n            }\n        };\n\n        const updateRealmId = (realmId: string | string[]) => {\n            form.realm_id = Array.isArray(realmId) ? realmId[0] ?? '' : realmId;\n\n            resetIdentityProviderQuery();\n\n            nextTick(() => {\n                updateIdentityProviderList();\n            });\n        };\n\n        const submit = async () => {\n            try {\n                await store.login({\n                    name: form.name,\n                    password: form.password,\n                    realmId: form.realm_id,\n\n                });\n\n                emit('done');\n            } catch (e: unknown) {\n                emit('failed', e instanceof Error ? e.message : 'The login operation failed');\n            }\n        };\n\n        const buildIdentityProviderURL = (id: string) => {\n            let authorizeURL = apiClient.identityProvider.getAuthorizeUri(\n                id,\n\n            );\n\n            if (props.codeRequest) {\n                const serialized = base64URLEncode(JSON.stringify(props.codeRequest));\n                authorizeURL += `?codeRequest=${serialized}`;\n            }\n\n            return authorizeURL;\n        };\n\n        return {\n\n            updateRealmId,\n\n            vuelidate,\n            form,\n            submit,\n            busy,\n\n            identityProviderQuery,\n            identityProviderRef,\n            buildIdentityProviderURL,\n\n        };\n    },\n});\n</script>\n<template>\n    <div>\n        <div class=\"text-center\">\n            <h1 class=\"fw-bold\">\n                Login\n            </h1>\n        </div>\n        <form @submit.prevent=\"submit\">\n            <IVuelidate :validation=\"vuelidate.name\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            Name\n                        </template>\n                        <template #default>\n                            <VCFormInput\n                                v-model=\"vuelidate.name.$model\"\n                            />\n                        </template>\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n\n            <IVuelidate :validation=\"vuelidate.password\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            Password\n                        </template>\n                        <template #default>\n                            <VCFormInput\n                                v-model=\"vuelidate.password.$model\"\n                                type=\"password\"\n                            />\n                        </template>\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n\n            <VCFormSubmit\n                v-model=\"busy\"\n                :invalid=\"vuelidate.$invalid\"\n                :create-text=\"'Submit'\"\n                :create-button-class=\"{value: 'btn btn-sm btn-dark btn-block', presets: { bootstrap: false }}\"\n                :create-icon-class=\"'fa-solid fa-right-to-bracket'\"\n                :submit=\"submit\"\n            />\n\n            <hr>\n\n            <template v-if=\"!codeRequest || !codeRequest.realm_id\">\n                <ARealmPicker\n                    :value=\"form.realm_id\"\n                    @change=\"updateRealmId\"\n                />\n            </template>\n\n            <AIdentityProviders\n                ref=\"identityProviderRef\"\n                :query=\"identityProviderQuery\"\n                :footer=\"false\"\n            >\n                <template #header>\n                    <ATitle :text=\"'Identity Providers'\" />\n                </template>\n                <template #footer=\"props\">\n                    <APagination\n                        :busy=\"props.busy\"\n                        :meta=\"props.meta\"\n                        :load=\"(data?: any) => props.load?.(data)\"\n                        :total=\"props.total\"\n                    />\n                </template>\n                <template #body=\"props\">\n                    <div class=\"d-flex flex-row\">\n                        <div\n                            v-for=\"(item, key) in props.data\"\n                            :key=\"key\"\n                        >\n                            <a\n                                :href=\"buildIdentityProviderURL(item.id)\"\n                                class=\"btn btn-dark btn-xs p-2 me-1 identity-provider-box bg-dark\"\n                            >\n                                <div class=\"d-flex flex-column\">\n                                    <div class=\"text-center mb-1\">\n                                        <AIdentityProviderIcon\n                                            class=\"fa-2x\"\n                                            :entity=\"item\"\n                                        />\n                                    </div>\n                                    <div>\n                                        {{ item.name }}\n                                    </div>\n                                </div>\n                            </a>\n                        </div>\n                    </div>\n                </template>\n            </AIdentityProviders>\n        </form>\n    </div>\n</template>\n<style scoped>\n.identity-provider-box {\n    min-width: 150px;\n}\n</style>\n","<script lang=\"ts\">\nimport { base64URLEncode } from '@authup/kit';\nimport type { PropType, Ref } from 'vue';\nimport {\n\n    computed,\n    defineComponent,\n    nextTick,\n    reactive,\n    ref,\n} from 'vue';\nimport type { IdentityProvider, OAuth2AuthorizationCodeRequest } from '@authup/core-kit';\nimport { IdentityProviderProtocol } from '@authup/core-kit';\nimport { IVuelidate } from '@ilingo/vuelidate';\nimport useVuelidate from '@vuelidate/core';\nimport { maxLength, minLength, required } from '@vuelidate/validators';\nimport type { BuildInput } from 'rapiq';\nimport { injectHTTPClient, injectStore } from '../../core';\nimport { AIdentityProviderIcon, AIdentityProviders, ARealmPicker } from '../entities';\nimport { APagination, ATitle } from '../utility';\n\nexport default defineComponent({\n\n    components: {\n\n        ARealmPicker,\n        APagination,\n        ATitle,\n        IVuelidate,\n        AIdentityProviders,\n        AIdentityProviderIcon,\n\n    },\n    props: { codeRequest: { type: Object as PropType<OAuth2AuthorizationCodeRequest> } },\n    emits: ['done', 'failed'],\n    setup(props, { emit }) {\n        const apiClient = injectHTTPClient();\n        const store = injectStore();\n\n        const form = reactive({\n            name: '',\n            password: '',\n            realm_id: '',\n\n        });\n\n        const vuelidate = useVuelidate({\n            name: {\n                required,\n                minLength: minLength(3),\n                maxLength: maxLength(255),\n\n            },\n            password: {\n                required,\n                minLength: minLength(3),\n                maxLength: maxLength(255),\n\n            },\n            realm_id: {},\n\n        }, form);\n\n        const busy = ref(false);\n\n        const realmId = computed(() => {\n            if (props.codeRequest && props.codeRequest.realm_id) {\n                return props.codeRequest.realm_id;\n            }\n\n            return form.realm_id;\n        });\n\n        const identityProviderQuery : Ref<BuildInput<IdentityProvider>> = ref({});\n        const resetIdentityProviderQuery = () => {\n            identityProviderQuery.value = {\n                filters: {\n                    realm_id: realmId.value || '',\n                    protocol: `!${IdentityProviderProtocol.LDAP}`,\n                    enabled: true,\n\n                },\n            };\n        };\n\n        resetIdentityProviderQuery();\n\n         \n        const identityProviderRef = ref<null | {\n            load:() => Promise<void>,\n            [key: string]: unknown\n        }>(null);\n        const updateIdentityProviderList = () => {\n            if (identityProviderRef.value) {\n                identityProviderRef.value.load();\n            }\n        };\n\n        const updateRealmId = (realmId: string | string[]) => {\n            form.realm_id = Array.isArray(realmId) ? realmId[0] ?? '' : realmId;\n\n            resetIdentityProviderQuery();\n\n            nextTick(() => {\n                updateIdentityProviderList();\n            });\n        };\n\n        const submit = async () => {\n            try {\n                await store.login({\n                    name: form.name,\n                    password: form.password,\n                    realmId: form.realm_id,\n\n                });\n\n                emit('done');\n            } catch (e: unknown) {\n                emit('failed', e instanceof Error ? e.message : 'The login operation failed');\n            }\n        };\n\n        const buildIdentityProviderURL = (id: string) => {\n            let authorizeURL = apiClient.identityProvider.getAuthorizeUri(\n                id,\n\n            );\n\n            if (props.codeRequest) {\n                const serialized = base64URLEncode(JSON.stringify(props.codeRequest));\n                authorizeURL += `?codeRequest=${serialized}`;\n            }\n\n            return authorizeURL;\n        };\n\n        return {\n\n            updateRealmId,\n\n            vuelidate,\n            form,\n            submit,\n            busy,\n\n            identityProviderQuery,\n            identityProviderRef,\n            buildIdentityProviderURL,\n\n        };\n    },\n});\n</script>\n<template>\n    <div>\n        <div class=\"text-center\">\n            <h1 class=\"fw-bold\">\n                Login\n            </h1>\n        </div>\n        <form @submit.prevent=\"submit\">\n            <IVuelidate :validation=\"vuelidate.name\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            Name\n                        </template>\n                        <template #default>\n                            <VCFormInput\n                                v-model=\"vuelidate.name.$model\"\n                            />\n                        </template>\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n\n            <IVuelidate :validation=\"vuelidate.password\">\n                <template #default=\"props\">\n                    <VCFormGroup\n                        :validation-messages=\"props.data\"\n                        :validation-severity=\"props.severity\"\n                    >\n                        <template #label>\n                            Password\n                        </template>\n                        <template #default>\n                            <VCFormInput\n                                v-model=\"vuelidate.password.$model\"\n                                type=\"password\"\n                            />\n                        </template>\n                    </VCFormGroup>\n                </template>\n            </IVuelidate>\n\n            <VCFormSubmit\n                v-model=\"busy\"\n                :invalid=\"vuelidate.$invalid\"\n                :create-text=\"'Submit'\"\n                :create-button-class=\"{value: 'btn btn-sm btn-dark btn-block', presets: { bootstrap: false }}\"\n                :create-icon-class=\"'fa-solid fa-right-to-bracket'\"\n                :submit=\"submit\"\n            />\n\n            <hr>\n\n            <template v-if=\"!codeRequest || !codeRequest.realm_id\">\n                <ARealmPicker\n                    :value=\"form.realm_id\"\n                    @change=\"updateRealmId\"\n                />\n            </template>\n\n            <AIdentityProviders\n                ref=\"identityProviderRef\"\n                :query=\"identityProviderQuery\"\n                :footer=\"false\"\n            >\n                <template #header>\n                    <ATitle :text=\"'Identity Providers'\" />\n                </template>\n                <template #footer=\"props\">\n                    <APagination\n                        :busy=\"props.busy\"\n                        :meta=\"props.meta\"\n                        :load=\"(data?: any) => props.load?.(data)\"\n                        :total=\"props.total\"\n                    />\n                </template>\n                <template #body=\"props\">\n                    <div class=\"d-flex flex-row\">\n                        <div\n                            v-for=\"(item, key) in props.data\"\n                            :key=\"key\"\n                        >\n                            <a\n                                :href=\"buildIdentityProviderURL(item.id)\"\n                                class=\"btn btn-dark btn-xs p-2 me-1 identity-provider-box bg-dark\"\n                            >\n                                <div class=\"d-flex flex-column\">\n                                    <div class=\"text-center mb-1\">\n                                        <AIdentityProviderIcon\n                                            class=\"fa-2x\"\n                                            :entity=\"item\"\n                                        />\n                                    </div>\n                                    <div>\n                                        {{ item.name }}\n                                    </div>\n                                </div>\n                            </a>\n                        </div>\n                    </div>\n                </template>\n            </AIdentityProviders>\n        </form>\n    </div>\n</template>\n<style scoped>\n.identity-provider-box {\n    min-width: 150px;\n}\n</style>\n","<!--\n  - Copyright (c) 2025.\n  - Author Peter Placzek (tada5hi)\n  - For the full copyright and license information,\n  - view the LICENSE file that was distributed with this source code.\n  -->\n<script lang=\"ts\">\nimport type { Scope } from '@authup/core-kit';\nimport type { PropType } from 'vue';\nimport { computed, defineComponent } from 'vue';\n\nexport default defineComponent({\n    props: {\n        entity: {\n            type: Object as PropType<Scope>,\n            required: true,\n        },\n        requested: {\n            type: Array as PropType<string[]>,\n            default: () => [],\n        },\n    },\n    setup(props) {\n        const isEnabled = computed(() => props.requested.includes(props.entity.name));\n\n        return { isEnabled };\n    },\n});\n</script>\n<template>\n    <div>\n        <div class=\"text-center\">\n            <i\n                class=\"fa-solid\"\n                :class=\"{\n                    'fa-check text-success': isEnabled,\n                    'fa-times text-danger': !isEnabled\n                }\"\n            />\n        </div>\n        <div>\n            <strong>{{ entity.name }}</strong>\n\n            <template v-if=\"entity.description\">\n                <p>{{ entity.description }}</p>\n            </template>\n        </div>\n    </div>\n</template>\n","<!--\n  - Copyright (c) 2025.\n  - Author Peter Placzek (tada5hi)\n  - For the full copyright and license information,\n  - view the LICENSE file that was distributed with this source code.\n  -->\n<script lang=\"ts\">\nimport type { Scope } from '@authup/core-kit';\nimport type { PropType } from 'vue';\nimport { computed, defineComponent } from 'vue';\n\nexport default defineComponent({\n    props: {\n        entity: {\n            type: Object as PropType<Scope>,\n            required: true,\n        },\n        requested: {\n            type: Array as PropType<string[]>,\n            default: () => [],\n        },\n    },\n    setup(props) {\n        const isEnabled = computed(() => props.requested.includes(props.entity.name));\n\n        return { isEnabled };\n    },\n});\n</script>\n<template>\n    <div>\n        <div class=\"text-center\">\n            <i\n                class=\"fa-solid\"\n                :class=\"{\n                    'fa-check text-success': isEnabled,\n                    'fa-times text-danger': !isEnabled\n                }\"\n            />\n        </div>\n        <div>\n            <strong>{{ entity.name }}</strong>\n\n            <template v-if=\"entity.description\">\n                <p>{{ entity.description }}</p>\n            </template>\n        </div>\n    </div>\n</template>\n","<!--\n  - Copyright (c) 2025.\n  - Author Peter Placzek (tada5hi)\n  - For the full copyright and license information,\n  - view the LICENSE file that was distributed with this source code.\n  -->\n<script lang=\"ts\">\nimport type { Client, Scope } from '@authup/core-kit';\nimport { deserializeOAuth2Scope } from '@authup/specs';\nimport type { PropType } from 'vue';\nimport { computed, defineComponent, ref } from 'vue';\nimport { injectHTTPClient } from '../../../core';\nimport AuthorizeScope from './AuthorizeScope.vue';\n\nexport default defineComponent({\n    components: { AuthorizeScope },\n    props: {\n        client: {\n            type: Object as PropType<Client>,\n            required: true,\n        },\n        scopesAvailable: { type: Array as PropType<Scope[]> },\n        scopesRequested: { type: [String, Array] as PropType<string[] | string> },\n    },\n    setup(props) {\n        const httpClient = injectHTTPClient();\n\n        const scopesRequestedNormalized = computed<string[]>(() => {\n            if (!props.scopesRequested) {\n                return [];\n            }\n\n            return Array.isArray(props.scopesRequested) ?\n                props.scopesRequested :\n                deserializeOAuth2Scope(props.scopesRequested);\n        });\n\n        const scopesAvailableNormalized = ref<Scope[]>([]);\n\n        const resolveScopesAvailable = async () => {\n            if (props.scopesAvailable) {\n                scopesAvailableNormalized.value = props.scopesAvailable;\n                return;\n            }\n\n            if (props.client.id) {\n                const { data: clientScopes } = await httpClient.clientScope.getMany({\n                    filters: { client_id: props.client.id },\n                    include: ['scope'],\n                });\n\n                scopesAvailableNormalized.value = clientScopes.map((clientScope) => clientScope.scope);\n            }\n        };\n\n        Promise.resolve()\n            .then(() => resolveScopesAvailable());\n\n        return {\n            scopesRequestedNormalized,\n            scopesAvailableNormalized,\n        };\n    },\n});\n</script>\n<template>\n    <div v-if=\"scopesAvailableNormalized.length > 0\">\n        <div>\n            This will allow the <strong>{{ client.name }}</strong> application to\n        </div>\n        <div class=\"flex-column\">\n            <template\n                v-for=\"item in scopesAvailableNormalized\"\n                :key=\"item.id\"\n            >\n                <AuthorizeScope\n                    :entity=\"item\"\n                    class=\"d-flex flex-row gap-1\"\n                    :requested=\"scopesRequestedNormalized\"\n                />\n            </template>\n        </div>\n    </div>\n</template>\n","<!--\n  - Copyright (c) 2025.\n  - Author Peter Placzek (tada5hi)\n  - For the full copyright and license information,\n  - view the LICENSE file that was distributed with this source code.\n  -->\n<script lang=\"ts\">\nimport type { Client, Scope } from '@authup/core-kit';\nimport { deserializeOAuth2Scope } from '@authup/specs';\nimport type { PropType } from 'vue';\nimport { computed, defineComponent, ref } from 'vue';\nimport { injectHTTPClient } from '../../../core';\nimport AuthorizeScope from './AuthorizeScope.vue';\n\nexport default defineComponent({\n    components: { AuthorizeScope },\n    props: {\n        client: {\n            type: Object as PropType<Client>,\n            required: true,\n        },\n        scopesAvailable: { type: Array as PropType<Scope[]> },\n        scopesRequested: { type: [String, Array] as PropType<string[] | string> },\n    },\n    setup(props) {\n        const httpClient = injectHTTPClient();\n\n        const scopesRequestedNormalized = computed<string[]>(() => {\n            if (!props.scopesRequested) {\n                return [];\n            }\n\n            return Array.isArray(props.scopesRequested) ?\n                props.scopesRequested :\n                deserializeOAuth2Scope(props.scopesRequested);\n        });\n\n        const scopesAvailableNormalized = ref<Scope[]>([]);\n\n        const resolveScopesAvailable = async () => {\n            if (props.scopesAvailable) {\n                scopesAvailableNormalized.value = props.scopesAvailable;\n                return;\n            }\n\n            if (props.client.id) {\n                const { data: clientScopes } = await httpClient.clientScope.getMany({\n                    filters: { client_id: props.client.id },\n                    include: ['scope'],\n                });\n\n                scopesAvailableNormalized.value = clientScopes.map((clientScope) => clientScope.scope);\n            }\n        };\n\n        Promise.resolve()\n            .then(() => resolveScopesAvailable());\n\n        return {\n            scopesRequestedNormalized,\n            scopesAvailableNormalized,\n        };\n    },\n});\n</script>\n<template>\n    <div v-if=\"scopesAvailableNormalized.length > 0\">\n        <div>\n            This will allow the <strong>{{ client.name }}</strong> application to\n        </div>\n        <div class=\"flex-column\">\n            <template\n                v-for=\"item in scopesAvailableNormalized\"\n                :key=\"item.id\"\n            >\n                <AuthorizeScope\n                    :entity=\"item\"\n                    class=\"d-flex flex-row gap-1\"\n                    :requested=\"scopesRequestedNormalized\"\n                />\n            </template>\n        </div>\n    </div>\n</template>\n","<!--\n  - Copyright (c) 2025.\n  - Author Peter Placzek (tada5hi)\n  - For the full copyright and license information,\n  - view the LICENSE file that was distributed with this source code.\n  -->\n<script lang=\"ts\">\n/* global window */\nimport type { Client, OAuth2AuthorizationCodeRequest, Scope } from '@authup/core-kit';\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { injectHTTPClient } from '../../../core';\nimport AuthorizeScopes from './AuthorizeScopes.vue';\n\nexport default defineComponent({\n    components: { AuthorizeScopes },\n    props: {\n        client: {\n            type: Object as PropType<Client>,\n            required: true,\n        },\n        scopes: { type: Array as PropType<Scope[]> },\n        codeRequest: {\n            type: Object as PropType<OAuth2AuthorizationCodeRequest>,\n            required: true,\n        },\n    },\n    setup(props) {\n        const httpClient = injectHTTPClient();\n\n        const abort = () => {\n            const url = new URL(`${props.codeRequest.redirect_uri}`);\n            url.searchParams.set('error', 'access_denied');\n            url.searchParams.set(\n                'error_description',\n                'The resource owner or authorization server denied the request',\n            );\n\n            if (props.codeRequest.state) {\n                url.searchParams.set('state', props.codeRequest.state);\n            }\n\n            if (typeof window !== 'undefined') {\n                window.location.href = url.href;\n            }\n        };\n\n        const authorize = async () => {\n            try {\n                const response = await httpClient\n                    .authorize\n                    .confirm({\n                        response_type: props.codeRequest.response_type,\n                        client_id: props.client.id,\n                        redirect_uri: props.codeRequest.redirect_uri,\n                        ...(props.codeRequest.state ? { state: props.codeRequest.state } : {}),\n                        ...(props.codeRequest.scope ? { scope: props.codeRequest.scope } : {}),\n                    });\n\n                const { url } = response;\n\n                if (typeof window !== 'undefined') {\n                    window.location.href = url;\n                }\n            } catch {\n                // todo: show toast :)\n\n            }\n        };\n\n        return {\n            authorize,\n            abort,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"flex-column d-flex gap-2\">\n        <div class=\"text-center\">\n            <h5 class=\"text-secondary mb-1\">\n                Application\n            </h5>\n            <h1 class=\"fw-bold\">\n                {{ client.name }}\n            </h1>\n        </div>\n\n        <AuthorizeScopes\n            :client=\"client\"\n            :scopes-requested=\"codeRequest.scope\"\n            :scopes-available=\"scopes\"\n        />\n\n        <div class=\"mt-auto\">\n            <div class=\"d-flex flex-row\">\n                <div>\n                    <i class=\"fa-solid fa-link\" />\n                </div>\n                <div class=\"ms-1\">\n                    <small>\n                        Once authorized, you will be redirected to: <strong>{{ codeRequest.redirect_uri }}</strong>\n                    </small>\n                </div>\n            </div>\n            <div class=\"d-flex flex-row\">\n                <div>\n                    <i class=\"fa fa-solid fa-lock\" />\n                </div>\n                <div class=\"ms-1\">\n                    <small>\n                        This application is governed by the\n                        <strong>\n                            {{ client.name }}\n                        </strong>\n                        application's Privacy Policy and Terms of Service.\n                    </small>\n                </div>\n            </div>\n            <div class=\"d-flex flex-row\">\n                <div>\n                    <i class=\"fa fa-solid fa-clock\" />\n                </div>\n                <div class=\"ms-1\">\n                    <small>\n                        Active since {{ client.created_at }}\n                    </small>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"row\">\n            <div class=\"col-6\">\n                <button\n                    type=\"button\"\n                    class=\"btn btn-block btn-secondary\"\n                    @click.prevent=\"abort\"\n                >\n                    Abort\n                </button>\n            </div>\n            <div class=\"col-6\">\n                <button\n                    type=\"button\"\n                    class=\"btn btn-block btn-primary\"\n                    @click.prevent=\"authorize\"\n                >\n                    Authorize\n                </button>\n            </div>\n        </div>\n    </div>\n</template>\n","<!--\n  - Copyright (c) 2025.\n  - Author Peter Placzek (tada5hi)\n  - For the full copyright and license information,\n  - view the LICENSE file that was distributed with this source code.\n  -->\n<script lang=\"ts\">\n/* global window */\nimport type { Client, OAuth2AuthorizationCodeRequest, Scope } from '@authup/core-kit';\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { injectHTTPClient } from '../../../core';\nimport AuthorizeScopes from './AuthorizeScopes.vue';\n\nexport default defineComponent({\n    components: { AuthorizeScopes },\n    props: {\n        client: {\n            type: Object as PropType<Client>,\n            required: true,\n        },\n        scopes: { type: Array as PropType<Scope[]> },\n        codeRequest: {\n            type: Object as PropType<OAuth2AuthorizationCodeRequest>,\n            required: true,\n        },\n    },\n    setup(props) {\n        const httpClient = injectHTTPClient();\n\n        const abort = () => {\n            const url = new URL(`${props.codeRequest.redirect_uri}`);\n            url.searchParams.set('error', 'access_denied');\n            url.searchParams.set(\n                'error_description',\n                'The resource owner or authorization server denied the request',\n            );\n\n            if (props.codeRequest.state) {\n                url.searchParams.set('state', props.codeRequest.state);\n            }\n\n            if (typeof window !== 'undefined') {\n                window.location.href = url.href;\n            }\n        };\n\n        const authorize = async () => {\n            try {\n                const response = await httpClient\n                    .authorize\n                    .confirm({\n                        response_type: props.codeRequest.response_type,\n                        client_id: props.client.id,\n                        redirect_uri: props.codeRequest.redirect_uri,\n                        ...(props.codeRequest.state ? { state: props.codeRequest.state } : {}),\n                        ...(props.codeRequest.scope ? { scope: props.codeRequest.scope } : {}),\n                    });\n\n                const { url } = response;\n\n                if (typeof window !== 'undefined') {\n                    window.location.href = url;\n                }\n            } catch {\n                // todo: show toast :)\n\n            }\n        };\n\n        return {\n            authorize,\n            abort,\n        };\n    },\n});\n</script>\n<template>\n    <div class=\"flex-column d-flex gap-2\">\n        <div class=\"text-center\">\n            <h5 class=\"text-secondary mb-1\">\n                Application\n            </h5>\n            <h1 class=\"fw-bold\">\n                {{ client.name }}\n            </h1>\n        </div>\n\n        <AuthorizeScopes\n            :client=\"client\"\n            :scopes-requested=\"codeRequest.scope\"\n            :scopes-available=\"scopes\"\n        />\n\n        <div class=\"mt-auto\">\n            <div class=\"d-flex flex-row\">\n                <div>\n                    <i class=\"fa-solid fa-link\" />\n                </div>\n                <div class=\"ms-1\">\n                    <small>\n                        Once authorized, you will be redirected to: <strong>{{ codeRequest.redirect_uri }}</strong>\n                    </small>\n                </div>\n            </div>\n            <div class=\"d-flex flex-row\">\n                <div>\n                    <i class=\"fa fa-solid fa-lock\" />\n                </div>\n                <div class=\"ms-1\">\n                    <small>\n                        This application is governed by the\n                        <strong>\n                            {{ client.name }}\n                        </strong>\n                        application's Privacy Policy and Terms of Service.\n                    </small>\n                </div>\n            </div>\n            <div class=\"d-flex flex-row\">\n                <div>\n                    <i class=\"fa fa-solid fa-clock\" />\n                </div>\n                <div class=\"ms-1\">\n                    <small>\n                        Active since {{ client.created_at }}\n                    </small>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"row\">\n            <div class=\"col-6\">\n                <button\n                    type=\"button\"\n                    class=\"btn btn-block btn-secondary\"\n                    @click.prevent=\"abort\"\n                >\n                    Abort\n                </button>\n            </div>\n            <div class=\"col-6\">\n                <button\n                    type=\"button\"\n                    class=\"btn btn-block btn-primary\"\n                    @click.prevent=\"authorize\"\n                >\n                    Authorize\n                </button>\n            </div>\n        </div>\n    </div>\n</template>\n","<!--\n  - Copyright (c) 2025.\n  - Author Peter Placzek (tada5hi)\n  - For the full copyright and license information,\n  - view the LICENSE file that was distributed with this source code.\n  -->\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n    props: {\n        isError: { type: Boolean },\n        message: {\n            type: String,\n            required: true,\n        },\n    },\n});\n</script>\n<template>\n    <div class=\"flex-column\">\n        <div class=\"text-center\">\n            <i\n                class=\"fa-solid fa-10x\"\n                :class=\"{\n                    'fa-exclamation text-danger': isError,\n                    'fa-info text-info': !isError,\n                }\"\n            />\n        </div>\n        <div class=\"text-center fs-6 p-3\">\n            {{ message }}\n        </div>\n    </div>\n</template>\n","<!--\n  - Copyright (c) 2025.\n  - Author Peter Placzek (tada5hi)\n  - For the full copyright and license information,\n  - view the LICENSE file that was distributed with this source code.\n  -->\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n    props: {\n        isError: { type: Boolean },\n        message: {\n            type: String,\n            required: true,\n        },\n    },\n});\n</script>\n<template>\n    <div class=\"flex-column\">\n        <div class=\"text-center\">\n            <i\n                class=\"fa-solid fa-10x\"\n                :class=\"{\n                    'fa-exclamation text-danger': isError,\n                    'fa-info text-info': !isError,\n                }\"\n            />\n        </div>\n        <div class=\"text-center fs-6 p-3\">\n            {{ message }}\n        </div>\n    </div>\n</template>\n","<!--\n  - Copyright (c) 2025.\n  - Author Peter Placzek (tada5hi)\n  - For the full copyright and license information,\n  - view the LICENSE file that was distributed with this source code.\n  -->\n<script lang=\"ts\">\nimport type { Client, OAuth2AuthorizationCodeRequest, Scope } from '@authup/core-kit';\nimport { storeToRefs } from 'pinia';\nimport type { PropType, VNodeChild } from 'vue';\nimport {\n    Suspense, \n    defineComponent, \n    h, \n    ref,\n} from 'vue';\nimport { injectHTTPClient, injectStore } from '../../../core';\nimport Login from '../Login.vue';\nimport AuthorizeForm from './AuthorizeForm.vue';\nimport AuthorizeText from './AuthorizeText.vue';\n\nconst wrapChild = (child: VNodeChild) => h(\n    'div',\n    { class: 'd-flex align-items-center justify-content-center h-100' },\n    [\n        h(\n            'div',\n            { class: 'authorize' },\n            [\n                child,\n            ],\n        ),\n    ],\n);\n\nexport default defineComponent({\n    components: {\n        AuthorizeText,\n        AuthorizeForm,\n        Login,\n    },\n    props: {\n        codeRequest: { type: Object as PropType<OAuth2AuthorizationCodeRequest> },\n        client: { type: Object as PropType<Client> },\n        clientId: { type: String },\n        scopes: { type: Array as PropType<Scope[]> },\n        error: { type: Object as PropType<Error> },\n    },\n    emits: ['redirect'],\n    setup(props) {\n        const httpClient = injectHTTPClient();\n        const store = injectStore();\n        const { loggedIn } = storeToRefs(store);\n\n        const error = ref<Error | null>(null);\n        const client = ref<Client | null>(null);\n\n        const resolve = async () => {\n            if (props.error) {\n                error.value = props.error;\n                return;\n            }\n\n            if (props.client) {\n                client.value = props.client;\n            }\n\n            if (props.clientId) {\n                try {\n                    client.value = await httpClient.client.getOne(props.clientId);\n                } catch (e) {\n                    if (e instanceof Error) {\n                        error.value = e;\n                    }\n                }\n            }\n        };\n\n        Promise.resolve()\n            .then(() => resolve());\n\n        return () => {\n            if (error.value) {\n                return wrapChild(h(AuthorizeText, {\n                    message: error.value.message,\n                    isError: true,\n                }));\n            }\n\n            if (!props.codeRequest) {\n                return [];\n            }\n\n            if (!loggedIn.value) {\n                return wrapChild(h(Suspense, {}, {\n                    default: () => h(Login, { codeRequest: props.codeRequest }),\n                    fallback: () => h(AuthorizeText, { message: 'Loading...' }),\n                }));\n            }\n\n            if (!client.value) {\n                return [];\n            }\n\n            return wrapChild(h(Suspense, {}, {\n                default: () => h(AuthorizeForm, {\n                    codeRequest: props.codeRequest!,\n                    client: client.value!,\n                    scopes: props.scopes,\n                }),\n                fallback: () => h(AuthorizeText, { message: 'Loading...' }),\n            }));\n        };\n    },\n});\n</script>\n<style>\n.authorize {\n    padding: 1rem;\n    background: #E8E8E8;\n    min-width: 480px;\n    max-width: 100%;\n    min-height: 300px;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    position: relative;\n    border-radius: 5px;\n    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.24);\n}\n</style>\n","<!--\n  - Copyright (c) 2025.\n  - Author Peter Placzek (tada5hi)\n  - For the full copyright and license information,\n  - view the LICENSE file that was distributed with this source code.\n  -->\n<script lang=\"ts\">\nimport type { Client, OAuth2AuthorizationCodeRequest, Scope } from '@authup/core-kit';\nimport { storeToRefs } from 'pinia';\nimport type { PropType, VNodeChild } from 'vue';\nimport {\n    Suspense, \n    defineComponent, \n    h, \n    ref,\n} from 'vue';\nimport { injectHTTPClient, injectStore } from '../../../core';\nimport Login from '../Login.vue';\nimport AuthorizeForm from './AuthorizeForm.vue';\nimport AuthorizeText from './AuthorizeText.vue';\n\nconst wrapChild = (child: VNodeChild) => h(\n    'div',\n    { class: 'd-flex align-items-center justify-content-center h-100' },\n    [\n        h(\n            'div',\n            { class: 'authorize' },\n            [\n                child,\n            ],\n        ),\n    ],\n);\n\nexport default defineComponent({\n    components: {\n        AuthorizeText,\n        AuthorizeForm,\n        Login,\n    },\n    props: {\n        codeRequest: { type: Object as PropType<OAuth2AuthorizationCodeRequest> },\n        client: { type: Object as PropType<Client> },\n        clientId: { type: String },\n        scopes: { type: Array as PropType<Scope[]> },\n        error: { type: Object as PropType<Error> },\n    },\n    emits: ['redirect'],\n    setup(props) {\n        const httpClient = injectHTTPClient();\n        const store = injectStore();\n        const { loggedIn } = storeToRefs(store);\n\n        const error = ref<Error | null>(null);\n        const client = ref<Client | null>(null);\n\n        const resolve = async () => {\n            if (props.error) {\n                error.value = props.error;\n                return;\n            }\n\n            if (props.client) {\n                client.value = props.client;\n            }\n\n            if (props.clientId) {\n                try {\n                    client.value = await httpClient.client.getOne(props.clientId);\n                } catch (e) {\n                    if (e instanceof Error) {\n                        error.value = e;\n                    }\n                }\n            }\n        };\n\n        Promise.resolve()\n            .then(() => resolve());\n\n        return () => {\n            if (error.value) {\n                return wrapChild(h(AuthorizeText, {\n                    message: error.value.message,\n                    isError: true,\n                }));\n            }\n\n            if (!props.codeRequest) {\n                return [];\n            }\n\n            if (!loggedIn.value) {\n                return wrapChild(h(Suspense, {}, {\n                    default: () => h(Login, { codeRequest: props.codeRequest }),\n                    fallback: () => h(AuthorizeText, { message: 'Loading...' }),\n                }));\n            }\n\n            if (!client.value) {\n                return [];\n            }\n\n            return wrapChild(h(Suspense, {}, {\n                default: () => h(AuthorizeForm, {\n                    codeRequest: props.codeRequest!,\n                    client: client.value!,\n                    scopes: props.scopes,\n                }),\n                fallback: () => h(AuthorizeText, { message: 'Loading...' }),\n            }));\n        };\n    },\n});\n</script>\n<style>\n.authorize {\n    padding: 1rem;\n    background: #E8E8E8;\n    min-width: 480px;\n    max-width: 100%;\n    min-height: 300px;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    position: relative;\n    border-radius: 5px;\n    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.24);\n}\n</style>\n","import type { Plugin } from 'vue';\nimport { install } from './module';\nimport type { Options } from './types';\n\nexport * from './components';\nexport * from './composables';\nexport * from './core';\nexport * from './types';\n\nexport { install };\n\nexport default { install } satisfies Plugin<Options | undefined>;\n"],"x_google_ignoreList":[7],"mappings":"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"}