{"version":3,"file":"index.js","sources":["../../../../src/packages/core/repository/data-mapper/management-api/constants.ts","../../../../src/packages/core/repository/data-mapper/mapping/data-mapping-resolver.ts","../../../../src/packages/core/repository/data-mapper/data-mapper.ts","../../../../src/packages/core/repository/data-mapper/management-api/management-api-data-mapper.ts","../../../../src/packages/core/repository/repository-base.ts","../../../../src/packages/core/repository/detail/detail-repository-base.ts","../../../../src/packages/core/repository/item/item-repository-base.ts","../../../../src/packages/core/repository/item/item-server-data-source-base.ts","../../../../src/packages/core/repository/repository-items.manager.ts"],"sourcesContent":["export const UMB_MANAGEMENT_API_DATA_SOURCE_ALIAS = 'Umb.ManagementApi';\r\n","import type { UmbDataSourceDataMapping } from './types.js';\r\nimport { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';\r\nimport { createExtensionApi, type ManifestBase } from '@umbraco-cms/backoffice/extension-api';\r\nimport { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';\r\n\r\nexport class UmbDataSourceDataMappingResolver extends UmbControllerBase {\r\n\t#apiCache = new Map();\r\n\r\n\tasync resolve(forDataSource: string, forDataModel: string): Promise {\r\n\t\tif (!forDataSource) {\r\n\t\t\tthrow new Error('data source identifier is required');\r\n\t\t}\r\n\r\n\t\tif (!forDataModel) {\r\n\t\t\tthrow new Error('data identifier is required');\r\n\t\t}\r\n\r\n\t\tconst manifest = this.#getManifestWithBestFit(forDataSource, forDataModel);\r\n\r\n\t\tif (!manifest) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\r\n\t\t// Check the cache before creating a new instance\r\n\t\tif (this.#apiCache.has(manifest.alias)) {\r\n\t\t\treturn this.#apiCache.get(manifest.alias)!;\r\n\t\t}\r\n\r\n\t\tconst dataMapping = await createExtensionApi(this, manifest);\r\n\r\n\t\tif (!dataMapping) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\r\n\t\tif (!dataMapping.map) {\r\n\t\t\tthrow new Error('Data Mapping does not have a map method.');\r\n\t\t}\r\n\r\n\t\t// Cache the api instance for future use\r\n\t\tthis.#apiCache.set(manifest.alias, dataMapping);\r\n\r\n\t\treturn dataMapping;\r\n\t}\r\n\r\n\t#getManifestWithBestFit(forDataSource: string, forDataModel: string) {\r\n\t\tconst supportedManifests = this.#getSupportedManifests(forDataSource, forDataModel);\r\n\r\n\t\tif (!supportedManifests.length) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\r\n\t\t// Pick the manifest with the highest priority\r\n\t\t// TODO: This should have been handled in the extension registry, but until then we do it here: [NL]\r\n\t\treturn supportedManifests.sort((a: ManifestBase, b: ManifestBase): number => (b.weight || 0) - (a.weight || 0))[0];\r\n\t}\r\n\r\n\t#getSupportedManifests(forDataSource: string, forDataModel: string) {\r\n\t\tconst supportedManifests = umbExtensionsRegistry.getByTypeAndFilter('dataSourceDataMapping', (manifest) => {\r\n\t\t\treturn manifest.forDataSource === forDataSource && manifest.forDataModel === forDataModel;\r\n\t\t});\r\n\r\n\t\treturn supportedManifests;\r\n\t}\r\n}\r\n","import { UmbDataSourceDataMappingResolver } from './mapping/data-mapping-resolver.js';\r\nimport { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';\r\n\r\nexport interface UmbDataSourceDataMapperMapArgs {\r\n\tforDataModel: string;\r\n\tforDataSource: string;\r\n\tdata: fromModelType;\r\n\tfallback?: (data: fromModelType) => Promise;\r\n}\r\n\r\nexport class UmbDataSourceDataMapper extends UmbControllerBase {\r\n\t#dataMappingResolver = new UmbDataSourceDataMappingResolver(this);\r\n\r\n\tasync map(args: UmbDataSourceDataMapperMapArgs) {\r\n\t\tif (!args.forDataSource) {\r\n\t\t\tthrow new Error('data source identifier is required');\r\n\t\t}\r\n\r\n\t\tif (!args.forDataModel) {\r\n\t\t\tthrow new Error('data identifier is required');\r\n\t\t}\r\n\r\n\t\tif (!args.data) {\r\n\t\t\tthrow new Error('data is required');\r\n\t\t}\r\n\r\n\t\tconst dataMapping = await this.#dataMappingResolver.resolve(args.forDataSource, args.forDataModel);\r\n\r\n\t\tif (!dataMapping && !args.fallback) {\r\n\t\t\tthrow new Error('Data mapping not found and no fallback provided.');\r\n\t\t}\r\n\r\n\t\tif (!dataMapping && args.fallback) {\r\n\t\t\treturn args.fallback(args.data);\r\n\t\t}\r\n\r\n\t\tif (!dataMapping?.map) {\r\n\t\t\tthrow new Error('Data mapping does not have a map method.');\r\n\t\t}\r\n\r\n\t\treturn dataMapping.map(args.data);\r\n\t}\r\n}\r\n","import { UmbDataSourceDataMapper, type UmbDataSourceDataMapperMapArgs } from '../data-mapper.js';\r\nimport { UMB_MANAGEMENT_API_DATA_SOURCE_ALIAS } from './constants.js';\r\nimport { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\n\r\nexport class UmbManagementApiDataMapper extends UmbControllerBase {\r\n\t#dataMapper = new UmbDataSourceDataMapper(this);\r\n\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tsuper(host);\r\n\t}\r\n\r\n\tmap(args: Omit) {\r\n\t\treturn this.#dataMapper.map({\r\n\t\t\t...args,\r\n\t\t\tforDataSource: UMB_MANAGEMENT_API_DATA_SOURCE_ALIAS,\r\n\t\t});\r\n\t}\r\n}\r\n","import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';\r\n\r\nexport abstract class UmbRepositoryBase extends UmbControllerBase {}\r\n","import { UmbRepositoryBase } from '../repository-base.js';\r\nimport type { UmbRepositoryResponse, UmbRepositoryResponseWithAsObservable } from '../types.js';\r\nimport type { UmbDetailDataSource, UmbDetailDataSourceConstructor } from './detail-data-source.interface.js';\r\nimport type { UmbDetailRepository } from './detail-repository.interface.js';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport type { UmbNotificationContext, UmbNotificationHandler } from '@umbraco-cms/backoffice/notification';\r\nimport { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification';\r\nimport type { UmbContextToken } from '@umbraco-cms/backoffice/context-api';\r\nimport type { UmbDetailStore } from '@umbraco-cms/backoffice/store';\r\nimport type { UmbApi } from '@umbraco-cms/backoffice/extension-api';\r\nimport type { UmbEntityModel } from '@umbraco-cms/backoffice/entity';\r\n\r\nexport abstract class UmbDetailRepositoryBase<\r\n\t\tDetailModelType extends UmbEntityModel,\r\n\t\tUmbDetailDataSourceType extends UmbDetailDataSource = UmbDetailDataSource,\r\n\t>\r\n\textends UmbRepositoryBase\r\n\timplements UmbDetailRepository, UmbApi\r\n{\r\n\t#init: Promise;\r\n\r\n\t#detailStore?: UmbDetailStore;\r\n\tprotected detailDataSource: UmbDetailDataSourceType;\r\n\t#notificationContext?: UmbNotificationContext;\r\n\t#createSuccessNotification?: UmbNotificationHandler;\r\n\t#updateSuccessNotification?: UmbNotificationHandler;\r\n\t#deleteSuccessNotification?: UmbNotificationHandler;\r\n\r\n\tconstructor(\r\n\t\thost: UmbControllerHost,\r\n\t\tdetailSource: UmbDetailDataSourceConstructor,\r\n\t\tdetailStoreContextAlias: string | UmbContextToken,\r\n\t) {\r\n\t\tsuper(host);\r\n\r\n\t\tif (!detailSource) throw new Error('Detail source is missing');\r\n\t\tif (!detailStoreContextAlias) throw new Error('Detail store context alias is missing');\r\n\r\n\t\tthis.detailDataSource = new detailSource(host) as UmbDetailDataSourceType;\r\n\r\n\t\tthis.#init = Promise.all([\r\n\t\t\tthis.consumeContext(detailStoreContextAlias, (instance) => {\r\n\t\t\t\tthis.#detailStore = instance;\r\n\t\t\t}).asPromise(),\r\n\r\n\t\t\tthis.consumeContext(UMB_NOTIFICATION_CONTEXT, (instance) => {\r\n\t\t\t\tthis.#notificationContext = instance;\r\n\t\t\t}).asPromise(),\r\n\t\t]);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a scaffold\r\n\t * @param {Partial} [preset]\r\n\t * @returns {*}\r\n\t * @memberof UmbDetailRepositoryBase\r\n\t */\r\n\tasync createScaffold(preset?: Partial): Promise> {\r\n\t\treturn this.detailDataSource.createScaffold(preset);\r\n\t}\r\n\r\n\t/**\r\n\t * Requests the detail for the given unique\r\n\t * @param {string} unique\r\n\t * @returns {*}\r\n\t * @memberof UmbDetailRepositoryBase\r\n\t */\r\n\tasync requestByUnique(unique: string): Promise> {\r\n\t\tif (!unique) throw new Error('Unique is missing');\r\n\t\tawait this.#init;\r\n\r\n\t\tconst { data, error } = await this.detailDataSource.read(unique);\r\n\r\n\t\tif (data) {\r\n\t\t\tthis.#detailStore!.append(data);\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tdata,\r\n\t\t\terror,\r\n\t\t\tasObservable: () => this.#detailStore!.byUnique(unique),\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a promise with an observable of the detail for the given unique\r\n\t * @param {DetailModelType} model\r\n\t * @param {string | null} [parentUnique]\r\n\t * @returns {*}\r\n\t * @memberof UmbDetailRepositoryBase\r\n\t */\r\n\tasync create(model: DetailModelType, parentUnique: string | null): Promise> {\r\n\t\tif (!model) throw new Error('Data is missing');\r\n\t\tawait this.#init;\r\n\r\n\t\tconst { data: createdData, error } = await this.detailDataSource.create(model, parentUnique);\r\n\r\n\t\tif (createdData) {\r\n\t\t\tthis.#detailStore?.append(createdData);\r\n\t\t\tthis.#createSuccessNotification?.close();\r\n\t\t\t// TODO: how do we handle generic notifications? Is this the correct place to do it?\r\n\t\t\tconst notification = { data: { message: `Created` } };\r\n\t\t\tthis.#createSuccessNotification = this.#notificationContext!.peek('positive', notification);\r\n\t\t}\r\n\r\n\t\treturn { data: createdData, error };\r\n\t}\r\n\r\n\t/**\r\n\t * Saves the given data\r\n\t * @param {DetailModelType} model\r\n\t * @returns {*}\r\n\t * @memberof UmbDetailRepositoryBase\r\n\t */\r\n\tasync save(model: DetailModelType) {\r\n\t\tif (!model) throw new Error('Data is missing');\r\n\t\tif (!model.unique) throw new Error('Unique is missing');\r\n\t\tawait this.#init;\r\n\r\n\t\tconst { data: updatedData, error } = await this.detailDataSource.update(model);\r\n\r\n\t\tif (updatedData) {\r\n\t\t\tthis.#detailStore!.updateItem(model.unique, updatedData);\r\n\r\n\t\t\t// TODO: how do we handle generic notifications? Is this the correct place to do it?\r\n\t\t\tthis.#updateSuccessNotification?.close();\r\n\t\t\tconst notification = { data: { message: `Saved` } };\r\n\t\t\tthis.#updateSuccessNotification = this.#notificationContext!.peek('positive', notification);\r\n\t\t}\r\n\r\n\t\treturn { data: updatedData, error };\r\n\t}\r\n\r\n\t/**\r\n\t * Deletes the detail for the given unique\r\n\t * @param {string} unique\r\n\t * @returns {*}\r\n\t * @memberof UmbDetailRepositoryBase\r\n\t */\r\n\tasync delete(unique: string) {\r\n\t\tif (!unique) throw new Error('Unique is missing');\r\n\t\tawait this.#init;\r\n\r\n\t\tconst { error } = await this.detailDataSource.delete(unique);\r\n\r\n\t\tif (!error) {\r\n\t\t\tthis.#detailStore!.removeItem(unique);\r\n\r\n\t\t\tthis.#deleteSuccessNotification?.close();\r\n\t\t\t// TODO: how do we handle generic notifications? Is this the correct place to do it?\r\n\t\t\tconst notification = { data: { message: `Deleted` } };\r\n\t\t\tthis.#deleteSuccessNotification = this.#notificationContext!.peek('positive', notification);\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a promise with an observable of the detail for the given unique\r\n\t * @param {string} unique\r\n\t * @returns {*}\r\n\t * @memberof UmbDetailRepositoryBase\r\n\t */\r\n\tasync byUnique(unique: string) {\r\n\t\tif (!unique) throw new Error('Unique is missing');\r\n\t\tawait this.#init;\r\n\t\treturn this.#detailStore!.byUnique(unique);\r\n\t}\r\n\r\n\toverride destroy(): void {\r\n\t\tthis.#detailStore = undefined;\r\n\t\t(this.detailDataSource as unknown) = undefined;\r\n\t\tsuper.destroy();\r\n\t}\r\n}\r\n","import { UmbRepositoryBase } from '../repository-base.js';\r\nimport type { UmbItemDataSource, UmbItemDataSourceConstructor } from './item-data-source.interface.js';\r\nimport type { UmbItemRepository } from './item-repository.interface.js';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport type { UmbItemStore } from '@umbraco-cms/backoffice/store';\r\nimport type { UmbContextToken } from '@umbraco-cms/backoffice/context-api';\r\n\r\nexport class UmbItemRepositoryBase\r\n\textends UmbRepositoryBase\r\n\timplements UmbItemRepository\r\n{\r\n\tprotected _init: Promise;\r\n\tprotected _itemStore?: UmbItemStore;\r\n\t#itemSource: UmbItemDataSource;\r\n\r\n\tconstructor(\r\n\t\thost: UmbControllerHost,\r\n\t\titemSource: UmbItemDataSourceConstructor,\r\n\t\titemStoreContextAlias: string | UmbContextToken,\r\n\t) {\r\n\t\tsuper(host);\r\n\t\tthis.#itemSource = new itemSource(host);\r\n\r\n\t\tthis._init = this.consumeContext(itemStoreContextAlias, (instance) => {\r\n\t\t\tthis._itemStore = instance as UmbItemStore;\r\n\t\t}).asPromise();\r\n\t}\r\n\r\n\t/**\r\n\t * Requests the items for the given uniques\r\n\t * @param {Array} uniques\r\n\t * @returns {*}\r\n\t * @memberof UmbItemRepositoryBase\r\n\t */\r\n\tasync requestItems(uniques: Array) {\r\n\t\tif (!uniques) throw new Error('Uniques are missing');\r\n\t\tawait this._init;\r\n\r\n\t\tconst { data, error: _error } = await this.#itemSource.getItems(uniques);\r\n\r\n\t\tconst error: any = _error;\r\n\t\tif (data) {\r\n\t\t\tthis._itemStore!.appendItems(data);\r\n\t\t}\r\n\r\n\t\treturn { data, error, asObservable: () => this._itemStore!.items(uniques) };\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a promise with an observable of the items for the given uniques\r\n\t * @param {Array} uniques\r\n\t * @returns {*}\r\n\t * @memberof UmbItemRepositoryBase\r\n\t */\r\n\tasync items(uniques: Array) {\r\n\t\tawait this._init;\r\n\t\treturn this._itemStore!.items(uniques);\r\n\t}\r\n}\r\n","import type { UmbItemDataSource } from '@umbraco-cms/backoffice/repository';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';\r\n\r\nexport interface UmbItemServerDataSourceBaseArgs {\r\n\tgetItems: (uniques: Array) => Promise>;\r\n\tmapper: (item: ServerItemType) => ClientItemType;\r\n}\r\n\r\n/**\r\n * A data source base for items that fetches items from the server\r\n * @class UmbItemServerDataSourceBase\r\n * @implements {DocumentTreeDataSource}\r\n */\r\nexport abstract class UmbItemServerDataSourceBase\r\n\timplements UmbItemDataSource\r\n{\r\n\t#host: UmbControllerHost;\r\n\t#getItems: (uniques: Array) => Promise>;\r\n\t#mapper: (item: ServerItemType) => ClientItemType;\r\n\r\n\t/**\r\n\t * Creates an instance of UmbItemServerDataSourceBase.\r\n\t * @param {UmbControllerHost} host - The controller host for this controller to be appended to\r\n\t * @param args\r\n\t * @memberof UmbItemServerDataSourceBase\r\n\t */\r\n\tconstructor(host: UmbControllerHost, args: UmbItemServerDataSourceBaseArgs) {\r\n\t\tthis.#host = host;\r\n\t\tthis.#getItems = args.getItems;\r\n\t\tthis.#mapper = args.mapper;\r\n\t}\r\n\r\n\t/**\r\n\t * Fetches the items for the given uniques from the server\r\n\t * @param {Array} uniques\r\n\t * @returns {*}\r\n\t * @memberof UmbItemServerDataSourceBase\r\n\t */\r\n\tasync getItems(uniques: Array) {\r\n\t\tif (!uniques) throw new Error('Uniques are missing');\r\n\t\tconst { data, error } = await tryExecuteAndNotify(this.#host, this.#getItems(uniques));\r\n\r\n\t\tif (data) {\r\n\t\t\tconst items = data.map((item) => this.#mapper(item));\r\n\t\t\treturn { data: items };\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n}\r\n","import { UmbDeprecation } from '@umbraco-cms/backoffice/utils';\r\nimport type { UmbItemRepository } from '@umbraco-cms/backoffice/repository';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { UmbArrayState } from '@umbraco-cms/backoffice/observable-api';\r\nimport { type ManifestRepository, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';\r\nimport { UmbExtensionApiInitializer } from '@umbraco-cms/backoffice/extension-api';\r\nimport { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';\r\nimport { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action';\r\nimport { UmbEntityUpdatedEvent } from '@umbraco-cms/backoffice/entity-action';\r\n\r\nconst ObserveRepositoryAlias = Symbol();\r\n\r\ninterface UmbRepositoryItemsStatus {\r\n\tstate: {\r\n\t\ttype: 'success' | 'error' | 'loading';\r\n\t\terror?: string;\r\n\t};\r\n\tunique: string;\r\n}\r\n\r\nexport class UmbRepositoryItemsManager extends UmbControllerBase {\r\n\t//\r\n\trepository?: UmbItemRepository;\r\n\t#getUnique: (entry: ItemType) => string | undefined;\r\n\r\n\t#init: Promise;\r\n\t#currentRequest?: Promise;\r\n\t#eventContext?: typeof UMB_ACTION_EVENT_CONTEXT.TYPE;\r\n\r\n\t// the init promise is used externally for recognizing when the manager is ready.\r\n\tpublic get init() {\r\n\t\treturn this.#init;\r\n\t}\r\n\r\n\t#uniques = new UmbArrayState([], (x) => x);\r\n\tuniques = this.#uniques.asObservable();\r\n\r\n\t#items = new UmbArrayState([], (x) => this.#getUnique(x));\r\n\titems = this.#items.asObservable();\r\n\r\n\t#statuses = new UmbArrayState([], (x) => x.unique);\r\n\tstatuses = this.#statuses.asObservable();\r\n\r\n\t/**\r\n\t * Creates an instance of UmbRepositoryItemsManager.\r\n\t * @param {UmbControllerHost} host - The host for the controller.\r\n\t * @param {string} repositoryAlias - The alias of the repository to use.\r\n\t * @param {((entry: ItemType) => string | undefined)} [getUniqueMethod] - DEPRECATED since 15.3. Will be removed in v. 17: A method to get the unique key from the item.\r\n\t * @memberof UmbRepositoryItemsManager\r\n\t */\r\n\tconstructor(\r\n\t\thost: UmbControllerHost,\r\n\t\trepositoryAlias: string,\r\n\t\tgetUniqueMethod?: (entry: ItemType) => string | undefined,\r\n\t) {\r\n\t\tsuper(host);\r\n\r\n\t\tthis.#getUnique = getUniqueMethod\r\n\t\t\t? (entry: ItemType) => {\r\n\t\t\t\t\tnew UmbDeprecation({\r\n\t\t\t\t\t\tdeprecated: 'The getUniqueMethod parameter.',\r\n\t\t\t\t\t\tremoveInVersion: '17.0.0',\r\n\t\t\t\t\t\tsolution: 'The required unique property on the item will be used instead.',\r\n\t\t\t\t\t}).warn();\r\n\t\t\t\t\treturn getUniqueMethod(entry);\r\n\t\t\t\t}\r\n\t\t\t: (entry) => entry.unique;\r\n\r\n\t\tthis.#init = new UmbExtensionApiInitializer>>(\r\n\t\t\tthis,\r\n\t\t\tumbExtensionsRegistry,\r\n\t\t\trepositoryAlias,\r\n\t\t\t[this],\r\n\t\t\t(permitted, repository) => {\r\n\t\t\t\tthis.repository = permitted ? repository.api : undefined;\r\n\t\t\t},\r\n\t\t).asPromise();\r\n\r\n\t\tthis.observe(\r\n\t\t\tthis.uniques,\r\n\t\t\t(uniques) => {\r\n\t\t\t\tif (uniques.length === 0) {\r\n\t\t\t\t\tthis.#items.setValue([]);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// TODO: This could be optimized so we only load the appended items, but this requires that the response checks that an item is still present in uniques. [NL]\r\n\t\t\t\t// Check if we already have the items, and then just sort them:\r\n\t\t\t\tconst items = this.#items.getValue();\r\n\t\t\t\tif (\r\n\t\t\t\t\tuniques.length === items.length &&\r\n\t\t\t\t\tuniques.every((unique) => items.find((item) => this.#getUnique(item) === unique))\r\n\t\t\t\t) {\r\n\t\t\t\t\tthis.#items.setValue(this.#sortByUniques(items));\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// We need to load new items, so ...\r\n\t\t\t\t\tthis.#requestItems();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tnull,\r\n\t\t);\r\n\r\n\t\tthis.consumeContext(UMB_ACTION_EVENT_CONTEXT, (context) => {\r\n\t\t\tthis.#eventContext?.removeEventListener(\r\n\t\t\t\tUmbEntityUpdatedEvent.TYPE,\r\n\t\t\t\tthis.#onEntityUpdatedEvent as unknown as EventListener,\r\n\t\t\t);\r\n\r\n\t\t\tthis.#eventContext = context;\r\n\t\t\tthis.#eventContext.addEventListener(\r\n\t\t\t\tUmbEntityUpdatedEvent.TYPE,\r\n\t\t\t\tthis.#onEntityUpdatedEvent as unknown as EventListener,\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\r\n\tgetUniques(): Array {\r\n\t\treturn this.#uniques.getValue();\r\n\t}\r\n\r\n\tsetUniques(uniques: string[] | undefined): void {\r\n\t\tthis.#uniques.setValue(uniques ?? []);\r\n\t}\r\n\r\n\tgetItems(): Array {\r\n\t\treturn this.#items.getValue();\r\n\t}\r\n\r\n\titemByUnique(unique: string) {\r\n\t\treturn this.#items.asObservablePart((items) => items.find((item) => this.#getUnique(item) === unique));\r\n\t}\r\n\r\n\tasync getItemByUnique(unique: string) {\r\n\t\t// TODO: Make an observeOnce feature, to avoid this amount of code: [NL]\r\n\t\tconst ctrl = this.observe(this.itemByUnique(unique), () => {}, null);\r\n\t\tconst result = await ctrl.asPromise();\r\n\t\tctrl.destroy();\r\n\t\treturn result;\r\n\t}\r\n\r\n\tasync #requestItems(): Promise {\r\n\t\tawait this.#init;\r\n\t\tif (!this.repository) throw new Error('Repository is not initialized');\r\n\r\n\t\tconst requestedUniques = this.getUniques();\r\n\r\n\t\tthis.#statuses.setValue(\r\n\t\t\trequestedUniques.map((unique) => ({\r\n\t\t\t\tstate: {\r\n\t\t\t\t\ttype: 'loading',\r\n\t\t\t\t},\r\n\t\t\t\tunique,\r\n\t\t\t})),\r\n\t\t);\r\n\r\n\t\t// TODO: Test if its just some items that is gone now, if so then just filter them out. (maybe use code from #removeItem)\r\n\t\t// This is where this.#getUnique comes in play. Unless that can come from the repository, but that collides with the idea of having a multi-type repository. If that happens.\r\n\t\tconst request = this.repository.requestItems(requestedUniques);\r\n\t\tthis.#currentRequest = request;\r\n\t\tconst { asObservable, data, error } = await request;\r\n\r\n\t\tif (this.#currentRequest !== request) {\r\n\t\t\t// You are not the newest request, so please back out.\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (error) {\r\n\t\t\tthis.#statuses.append(\r\n\t\t\t\trequestedUniques.map((unique) => ({\r\n\t\t\t\t\tstate: {\r\n\t\t\t\t\t\ttype: 'error',\r\n\t\t\t\t\t\terror: '#general_error',\r\n\t\t\t\t\t},\r\n\t\t\t\t\tunique,\r\n\t\t\t\t})),\r\n\t\t\t);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// find uniques not resolved:\r\n\t\tif (data) {\r\n\t\t\t// find rejected uniques:\r\n\t\t\tconst rejectedUniques = requestedUniques.filter(\r\n\t\t\t\t(unique) => !data.find((item) => this.#getUnique(item) === unique),\r\n\t\t\t);\r\n\t\t\tconst resolvedUniques = requestedUniques.filter((unique) => !rejectedUniques.includes(unique));\r\n\t\t\tthis.#items.remove(rejectedUniques);\r\n\r\n\t\t\tthis.#statuses.append([\r\n\t\t\t\t...rejectedUniques.map(\r\n\t\t\t\t\t(unique) =>\r\n\t\t\t\t\t\t({\r\n\t\t\t\t\t\t\tstate: {\r\n\t\t\t\t\t\t\t\ttype: 'error',\r\n\t\t\t\t\t\t\t\terror: '#general_notFound',\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tunique,\r\n\t\t\t\t\t\t}) as UmbRepositoryItemsStatus,\r\n\t\t\t\t),\r\n\t\t\t\t...resolvedUniques.map(\r\n\t\t\t\t\t(unique) =>\r\n\t\t\t\t\t\t({\r\n\t\t\t\t\t\t\tstate: {\r\n\t\t\t\t\t\t\t\ttype: 'success',\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tunique,\r\n\t\t\t\t\t\t}) as UmbRepositoryItemsStatus,\r\n\t\t\t\t),\r\n\t\t\t]);\r\n\t\t}\r\n\r\n\t\tif (asObservable) {\r\n\t\t\tthis.observe(\r\n\t\t\t\tasObservable(),\r\n\t\t\t\t(data) => {\r\n\t\t\t\t\tthis.#items.setValue(this.#sortByUniques(data));\r\n\t\t\t\t},\r\n\t\t\t\tObserveRepositoryAlias,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tasync #reloadItem(unique: string): Promise {\r\n\t\tawait this.#init;\r\n\t\tif (!this.repository) throw new Error('Repository is not initialized');\r\n\r\n\t\tconst { data, error } = await this.repository.requestItems([unique]);\r\n\r\n\t\tif (error) {\r\n\t\t\tthis.#statuses.appendOne({\r\n\t\t\t\tstate: {\r\n\t\t\t\t\ttype: 'error',\r\n\t\t\t\t\terror: '#general_notFound',\r\n\t\t\t\t},\r\n\t\t\t\tunique,\r\n\t\t\t} as UmbRepositoryItemsStatus);\r\n\t\t}\r\n\r\n\t\tif (data) {\r\n\t\t\tconst items = this.getItems();\r\n\t\t\tconst item = items.find((item) => this.#getUnique(item) === unique);\r\n\r\n\t\t\tif (item) {\r\n\t\t\t\tconst index = items.indexOf(item);\r\n\t\t\t\tconst newItems = [...items];\r\n\t\t\t\tnewItems[index] = data[0];\r\n\t\t\t\tthis.#items.setValue(this.#sortByUniques(newItems));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t#sortByUniques(data: Array): Array {\r\n\t\tconst uniques = this.getUniques();\r\n\t\treturn [...data].sort((a, b) => {\r\n\t\t\tconst aIndex = uniques.indexOf(this.#getUnique(a) ?? '');\r\n\t\t\tconst bIndex = uniques.indexOf(this.#getUnique(b) ?? '');\r\n\t\t\treturn aIndex - bIndex;\r\n\t\t});\r\n\t}\r\n\r\n\t#onEntityUpdatedEvent = (event: UmbEntityUpdatedEvent) => {\r\n\t\tconst eventUnique = event.getUnique();\r\n\r\n\t\tconst items = this.getItems();\r\n\t\tif (items.length === 0) return;\r\n\r\n\t\t// Ignore events if the entity is not in the list of items.\r\n\t\tconst item = items.find((item) => this.#getUnique(item) === eventUnique);\r\n\t\tif (!item) return;\r\n\r\n\t\tthis.#reloadItem(item.unique);\r\n\t};\r\n\r\n\toverride destroy(): void {\r\n\t\tthis.#eventContext?.removeEventListener(\r\n\t\t\tUmbEntityUpdatedEvent.TYPE,\r\n\t\t\tthis.#onEntityUpdatedEvent as unknown as EventListener,\r\n\t\t);\r\n\t\tsuper.destroy();\r\n\t}\r\n}\r\n"],"names":["UMB_MANAGEMENT_API_DATA_SOURCE_ALIAS","UmbDataSourceDataMappingResolver","UmbControllerBase","#apiCache","forDataSource","forDataModel","manifest","#getManifestWithBestFit","dataMapping","createExtensionApi","supportedManifests","#getSupportedManifests","a","b","umbExtensionsRegistry","UmbDataSourceDataMapper","#dataMappingResolver","args","UmbManagementApiDataMapper","#dataMapper","host","UmbRepositoryBase","UmbDetailRepositoryBase","#init","#detailStore","#notificationContext","#createSuccessNotification","#updateSuccessNotification","#deleteSuccessNotification","detailSource","detailStoreContextAlias","instance","UMB_NOTIFICATION_CONTEXT","preset","unique","data","error","model","parentUnique","createdData","notification","updatedData","UmbItemRepositoryBase","#itemSource","itemSource","itemStoreContextAlias","uniques","_error","UmbItemServerDataSourceBase","#host","#getItems","#mapper","tryExecuteAndNotify","item","ObserveRepositoryAlias","UmbRepositoryItemsManager","repositoryAlias","getUniqueMethod","#uniques","UmbArrayState","x","#items","#getUnique","#statuses","#onEntityUpdatedEvent","event","eventUnique","items","#reloadItem","entry","UmbDeprecation","UmbExtensionApiInitializer","permitted","repository","#sortByUniques","#requestItems","UMB_ACTION_EVENT_CONTEXT","context","#eventContext","UmbEntityUpdatedEvent","#currentRequest","ctrl","result","requestedUniques","request","asObservable","rejectedUniques","resolvedUniques","index","newItems","aIndex","bIndex"],"mappings":";;;;;;;;;AAAO,MAAMA,IAAuC;ACK7C,MAAMC,UAAyCC,EAAkB;AAAA,EACvEC,yBAAgB,IAAsC;AAAA,EAEtD,MAAM,QAAQC,GAAuBC,GAAqE;AACzG,QAAI,CAACD;AACE,YAAA,IAAI,MAAM,oCAAoC;AAGrD,QAAI,CAACC;AACE,YAAA,IAAI,MAAM,6BAA6B;AAG9C,UAAMC,IAAW,KAAKC,GAAwBH,GAAeC,CAAY;AAEzE,QAAI,CAACC;AACG;AAIR,QAAI,KAAKH,GAAU,IAAIG,EAAS,KAAK;AACpC,aAAO,KAAKH,GAAU,IAAIG,EAAS,KAAK;AAGzC,UAAME,IAAc,MAAMC,EAA6C,MAAMH,CAAQ;AAErF,QAAKE,GAID;AAAA,UAAA,CAACA,EAAY;AACV,cAAA,IAAI,MAAM,0CAA0C;AAI3D,kBAAKL,GAAU,IAAIG,EAAS,OAAOE,CAAW,GAEvCA;AAAA;AAAA,EAAA;AAAA,EAGRD,GAAwBH,GAAuBC,GAAsB;AACpE,UAAMK,IAAqB,KAAKC,GAAuBP,GAAeC,CAAY;AAE9E,QAACK,EAAmB;AAMxB,aAAOA,EAAmB,KAAK,CAACE,GAAiBC,OAA6BA,EAAE,UAAU,MAAMD,EAAE,UAAU,EAAE,EAAE,CAAC;AAAA,EAAA;AAAA,EAGlHD,GAAuBP,GAAuBC,GAAsB;AAK5D,WAJoBS,EAAsB,mBAAmB,yBAAyB,CAACR,MACtFA,EAAS,kBAAkBF,KAAiBE,EAAS,iBAAiBD,CAC7E;AAAA,EAEM;AAET;ACrDO,MAAMU,UAAgFb,EAAkB;AAAA,EAC9Gc,KAAuB,IAAIf,EAAiC,IAAI;AAAA,EAEhE,MAAM,IAAIgB,GAAkE;AACvE,QAAA,CAACA,EAAK;AACH,YAAA,IAAI,MAAM,oCAAoC;AAGjD,QAAA,CAACA,EAAK;AACH,YAAA,IAAI,MAAM,6BAA6B;AAG1C,QAAA,CAACA,EAAK;AACH,YAAA,IAAI,MAAM,kBAAkB;AAG7B,UAAAT,IAAc,MAAM,KAAKQ,GAAqB,QAAQC,EAAK,eAAeA,EAAK,YAAY;AAEjG,QAAI,CAACT,KAAe,CAACS,EAAK;AACnB,YAAA,IAAI,MAAM,kDAAkD;AAG/D,QAAA,CAACT,KAAeS,EAAK;AACjB,aAAAA,EAAK,SAASA,EAAK,IAAI;AAG3B,QAAA,CAACT,GAAa;AACX,YAAA,IAAI,MAAM,0CAA0C;AAGpD,WAAAA,EAAY,IAAIS,EAAK,IAAI;AAAA,EAAA;AAElC;ACrCO,MAAMC,UAAmChB,EAAkB;AAAA,EACjEiB,KAAc,IAAIJ,EAAwB,IAAI;AAAA,EAE9C,YAAYK,GAAyB;AACpC,UAAMA,CAAI;AAAA,EAAA;AAAA,EAGX,IAAIH,GAA6D;AACzD,WAAA,KAAKE,GAAY,IAAI;AAAA,MAC3B,GAAGF;AAAA,MACH,eAAejB;AAAA,IAAA,CACf;AAAA,EAAA;AAEH;AChBO,MAAeqB,UAA0BnB,EAAkB;AAAC;ACU5D,MAAeoB,UAIbD,EAET;AAAA,EACCE;AAAA,EAEAC;AAAA,EAEAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EAEA,YACCR,GACAS,GACAC,GACC;AAGD,QAFA,MAAMV,CAAI,GAEN,CAACS,EAAoB,OAAA,IAAI,MAAM,0BAA0B;AAC7D,QAAI,CAACC,EAA+B,OAAA,IAAI,MAAM,uCAAuC;AAEhF,SAAA,mBAAmB,IAAID,EAAaT,CAAI,GAExC,KAAAG,KAAQ,QAAQ,IAAI;AAAA,MACxB,KAAK,eAAeO,GAAyB,CAACC,MAAa;AAC1D,aAAKP,KAAeO;AAAA,MACpB,CAAA,EAAE,UAAU;AAAA,MAEb,KAAK,eAAeC,GAA0B,CAACD,MAAa;AAC3D,aAAKN,KAAuBM;AAAA,MAC5B,CAAA,EAAE,UAAU;AAAA,IAAA,CACb;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASF,MAAM,eAAeE,GAAoF;AACjG,WAAA,KAAK,iBAAiB,eAAeA,CAAM;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASnD,MAAM,gBAAgBC,GAAiF;AACtG,QAAI,CAACA,EAAc,OAAA,IAAI,MAAM,mBAAmB;AAChD,UAAM,KAAKX;AAEL,UAAA,EAAE,MAAAY,GAAM,OAAAC,EAAM,IAAI,MAAM,KAAK,iBAAiB,KAAKF,CAAM;AAE/D,WAAIC,KACE,KAAAX,GAAc,OAAOW,CAAI,GAGxB;AAAA,MACN,MAAAA;AAAA,MACA,OAAAC;AAAA,MACA,cAAc,MAAM,KAAKZ,GAAc,SAASU,CAAM;AAAA,IACvD;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,MAAM,OAAOG,GAAwBC,GAA8E;AAClH,QAAI,CAACD,EAAa,OAAA,IAAI,MAAM,iBAAiB;AAC7C,UAAM,KAAKd;AAEL,UAAA,EAAE,MAAMgB,GAAa,OAAAH,EAAM,IAAI,MAAM,KAAK,iBAAiB,OAAOC,GAAOC,CAAY;AAE3F,QAAIC,GAAa;AACX,WAAAf,IAAc,OAAOe,CAAW,GACrC,KAAKb,IAA4B,MAAM;AAEvC,YAAMc,IAAe,EAAE,MAAM,EAAE,SAAS,YAAY;AACpD,WAAKd,KAA6B,KAAKD,GAAsB,KAAK,YAAYe,CAAY;AAAA,IAAA;AAGpF,WAAA,EAAE,MAAMD,GAAa,OAAAH,EAAM;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASnC,MAAM,KAAKC,GAAwB;AAClC,QAAI,CAACA,EAAa,OAAA,IAAI,MAAM,iBAAiB;AAC7C,QAAI,CAACA,EAAM,OAAc,OAAA,IAAI,MAAM,mBAAmB;AACtD,UAAM,KAAKd;AAEL,UAAA,EAAE,MAAMkB,GAAa,OAAAL,EAAA,IAAU,MAAM,KAAK,iBAAiB,OAAOC,CAAK;AAE7E,QAAII,GAAa;AAChB,WAAKjB,GAAc,WAAWa,EAAM,QAAQI,CAAW,GAGvD,KAAKd,IAA4B,MAAM;AACvC,YAAMa,IAAe,EAAE,MAAM,EAAE,SAAS,UAAU;AAClD,WAAKb,KAA6B,KAAKF,GAAsB,KAAK,YAAYe,CAAY;AAAA,IAAA;AAGpF,WAAA,EAAE,MAAMC,GAAa,OAAAL,EAAM;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASnC,MAAM,OAAOF,GAAgB;AAC5B,QAAI,CAACA,EAAc,OAAA,IAAI,MAAM,mBAAmB;AAChD,UAAM,KAAKX;AAEX,UAAM,EAAE,OAAAa,EAAM,IAAI,MAAM,KAAK,iBAAiB,OAAOF,CAAM;AAE3D,QAAI,CAACE,GAAO;AACN,WAAAZ,GAAc,WAAWU,CAAM,GAEpC,KAAKN,IAA4B,MAAM;AAEvC,YAAMY,IAAe,EAAE,MAAM,EAAE,SAAS,YAAY;AACpD,WAAKZ,KAA6B,KAAKH,GAAsB,KAAK,YAAYe,CAAY;AAAA,IAAA;AAG3F,WAAO,EAAE,OAAAJ,EAAM;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAShB,MAAM,SAASF,GAAgB;AAC9B,QAAI,CAACA,EAAc,OAAA,IAAI,MAAM,mBAAmB;AAChD,iBAAM,KAAKX,IACJ,KAAKC,GAAc,SAASU,CAAM;AAAA,EAAA;AAAA,EAGjC,UAAgB;AACxB,SAAKV,KAAe,QACnB,KAAK,mBAA+B,QACrC,MAAM,QAAQ;AAAA,EAAA;AAEhB;ACvKO,MAAMkB,UACJrB,EAET;AAAA,EAGCsB;AAAA,EAEA,YACCvB,GACAwB,GACAC,GACC;AACD,UAAMzB,CAAI,GACL,KAAAuB,KAAc,IAAIC,EAAWxB,CAAI,GAEtC,KAAK,QAAQ,KAAK,eAAeyB,GAAuB,CAACd,MAAa;AACrE,WAAK,aAAaA;AAAA,IAClB,CAAA,EAAE,UAAU;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASd,MAAM,aAAae,GAAwB;AAC1C,QAAI,CAACA,EAAe,OAAA,IAAI,MAAM,qBAAqB;AACnD,UAAM,KAAK;AAEL,UAAA,EAAE,MAAAX,GAAM,OAAOY,EAAA,IAAW,MAAM,KAAKJ,GAAY,SAASG,CAAO,GAEjEV,IAAaW;AACnB,WAAIZ,KACE,KAAA,WAAY,YAAYA,CAAI,GAG3B,EAAE,MAAAA,GAAM,OAAAC,GAAO,cAAc,MAAM,KAAK,WAAY,MAAMU,CAAO,EAAE;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS3E,MAAM,MAAMA,GAAwB;AACnC,iBAAM,KAAK,OACJ,KAAK,WAAY,MAAMA,CAAO;AAAA,EAAA;AAEvC;AC5CO,MAAeE,EAEtB;AAAA,EACCC;AAAA,EACAC;AAAA,EACAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY/B,GAAyBH,GAAuE;AAC3G,SAAKgC,KAAQ7B,GACb,KAAK8B,KAAYjC,EAAK,UACtB,KAAKkC,KAAUlC,EAAK;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrB,MAAM,SAAS6B,GAAwB;AACtC,QAAI,CAACA,EAAe,OAAA,IAAI,MAAM,qBAAqB;AAC7C,UAAA,EAAE,MAAAX,GAAM,OAAAC,EAAU,IAAA,MAAMgB,EAAoB,KAAKH,IAAO,KAAKC,GAAUJ,CAAO,CAAC;AAErF,WAAIX,IAEI,EAAE,MADKA,EAAK,IAAI,CAACkB,MAAS,KAAKF,GAAQE,CAAI,CAAC,EAC9B,IAGf,EAAE,OAAAjB,EAAM;AAAA,EAAA;AAEjB;ACxCA,MAAMkB,IAAyB,OAAO;AAU/B,MAAMC,UAAuErD,EAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BrG,YACCkB,GACAoC,GACAC,GACC;AACD,UAAMrC,CAAI,GArBX,KAAAsC,KAAW,IAAIC,EAAsB,CAAA,GAAI,CAACC,MAAMA,CAAC,GACvC,KAAA,UAAA,KAAKF,GAAS,aAAa,GAE5B,KAAAG,KAAA,IAAIF,EAAwB,CAAC,GAAG,CAACC,MAAM,KAAKE,GAAWF,CAAC,CAAC,GAC1D,KAAA,QAAA,KAAKC,GAAO,aAAa,GAEjC,KAAAE,KAAY,IAAIJ,EAAwC,IAAI,CAACC,MAAMA,EAAE,MAAM,GAChE,KAAA,WAAA,KAAKG,GAAU,aAAa,GA2NvC,KAAAC,KAAwB,CAACC,MAAiC;AACnD,YAAAC,IAAcD,EAAM,UAAU,GAE9BE,IAAQ,KAAK,SAAS;AACxB,UAAAA,EAAM,WAAW,EAAG;AAGlB,YAAAd,IAAOc,EAAM,KAAK,CAACd,MAAS,KAAKS,GAAWT,CAAI,MAAMa,CAAW;AACvE,MAAKb,KAEA,KAAAe,GAAYf,EAAK,MAAM;AAAA,IAC7B,GAtNM,KAAAS,KAAaL,IACf,CAACY,OACD,IAAIC,EAAe;AAAA,MAClB,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,UAAU;AAAA,IACV,CAAA,EAAE,KAAK,GACDb,EAAgBY,CAAK,KAE5B,CAACA,MAAUA,EAAM,QAEpB,KAAK9C,KAAQ,IAAIgD;AAAA,MAChB;AAAA,MACAzD;AAAA,MACA0C;AAAA,MACA,CAAC,IAAI;AAAA,MACL,CAACgB,GAAWC,MAAe;AACrB,aAAA,aAAaD,IAAYC,EAAW,MAAM;AAAA,MAAA;AAAA,MAE/C,UAAU,GAEP,KAAA;AAAA,MACJ,KAAK;AAAA,MACL,CAAC3B,MAAY;AACR,YAAAA,EAAQ,WAAW,GAAG;AACpB,eAAAe,GAAO,SAAS,EAAE;AACvB;AAAA,QAAA;AAKK,cAAAM,IAAQ,KAAKN,GAAO,SAAS;AACnC,QACCf,EAAQ,WAAWqB,EAAM,UACzBrB,EAAQ,MAAM,CAACZ,MAAWiC,EAAM,KAAK,CAACd,MAAS,KAAKS,GAAWT,CAAI,MAAMnB,CAAM,CAAC,IAEhF,KAAK2B,GAAO,SAAS,KAAKa,GAAeP,CAAK,CAAC,IAG/C,KAAKQ,GAAc;AAAA,MAErB;AAAA,MACA;AAAA,IACD,GAEK,KAAA,eAAeC,GAA0B,CAACC,MAAY;AAC1D,WAAKC,IAAe;AAAA,QACnBC,EAAsB;AAAA,QACtB,KAAKf;AAAA,MACN,GAEA,KAAKc,KAAgBD,GACrB,KAAKC,GAAc;AAAA,QAClBC,EAAsB;AAAA,QACtB,KAAKf;AAAA,MACN;AAAA,IAAA,CACA;AAAA,EAAA;AAAA,EA1FFF;AAAA,EAEAvC;AAAA,EACAyD;AAAA,EACAF;AAAA;AAAA,EAGA,IAAW,OAAO;AACjB,WAAO,KAAKvD;AAAA,EAAA;AAAA,EAGbmC;AAAA,EAGAG;AAAA,EAGAE;AAAA,EA4EA,aAA4B;AACpB,WAAA,KAAKL,GAAS,SAAS;AAAA,EAAA;AAAA,EAG/B,WAAWZ,GAAqC;AAC/C,SAAKY,GAAS,SAASZ,KAAW,CAAA,CAAE;AAAA,EAAA;AAAA,EAGrC,WAA4B;AACpB,WAAA,KAAKe,GAAO,SAAS;AAAA,EAAA;AAAA,EAG7B,aAAa3B,GAAgB;AAC5B,WAAO,KAAK2B,GAAO,iBAAiB,CAACM,MAAUA,EAAM,KAAK,CAACd,MAAS,KAAKS,GAAWT,CAAI,MAAMnB,CAAM,CAAC;AAAA,EAAA;AAAA,EAGtG,MAAM,gBAAgBA,GAAgB;AAErC,UAAM+C,IAAO,KAAK,QAAQ,KAAK,aAAa/C,CAAM,GAAG,MAAM;AAAA,OAAI,IAAI,GAC7DgD,IAAS,MAAMD,EAAK,UAAU;AACpC,WAAAA,EAAK,QAAQ,GACNC;AAAA,EAAA;AAAA,EAGR,MAAMP,KAA+B;AAEpC,QADA,MAAM,KAAKpD,IACP,CAAC,KAAK,WAAkB,OAAA,IAAI,MAAM,+BAA+B;AAE/D,UAAA4D,IAAmB,KAAK,WAAW;AAEzC,SAAKpB,GAAU;AAAA,MACdoB,EAAiB,IAAI,CAACjD,OAAY;AAAA,QACjC,OAAO;AAAA,UACN,MAAM;AAAA,QACP;AAAA,QACA,QAAAA;AAAA,MAAA,EACC;AAAA,IACH;AAIA,UAAMkD,IAAU,KAAK,WAAW,aAAaD,CAAgB;AAC7D,SAAKH,KAAkBI;AACvB,UAAM,EAAE,cAAAC,GAAc,MAAAlD,GAAM,OAAAC,EAAA,IAAU,MAAMgD;AAExC,QAAA,KAAKJ,OAAoBI,GAK7B;AAAA,UAAIhD,GAAO;AACV,aAAK2B,GAAU;AAAA,UACdoB,EAAiB,IAAI,CAACjD,OAAY;AAAA,YACjC,OAAO;AAAA,cACN,MAAM;AAAA,cACN,OAAO;AAAA,YACR;AAAA,YACA,QAAAA;AAAA,UAAA,EACC;AAAA,QACH;AACA;AAAA,MAAA;AAID,UAAIC,GAAM;AAET,cAAMmD,IAAkBH,EAAiB;AAAA,UACxC,CAACjD,MAAW,CAACC,EAAK,KAAK,CAACkB,MAAS,KAAKS,GAAWT,CAAI,MAAMnB,CAAM;AAAA,QAClE,GACMqD,IAAkBJ,EAAiB,OAAO,CAACjD,MAAW,CAACoD,EAAgB,SAASpD,CAAM,CAAC;AACxF,aAAA2B,GAAO,OAAOyB,CAAe,GAElC,KAAKvB,GAAU,OAAO;AAAA,UACrB,GAAGuB,EAAgB;AAAA,YAClB,CAACpD,OACC;AAAA,cACA,OAAO;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO;AAAA,cACR;AAAA,cACA,QAAAA;AAAA,YACD;AAAA,UACF;AAAA,UACA,GAAGqD,EAAgB;AAAA,YAClB,CAACrD,OACC;AAAA,cACA,OAAO;AAAA,gBACN,MAAM;AAAA,cACP;AAAA,cACA,QAAAA;AAAA,YACD;AAAA,UAAA;AAAA,QACF,CACA;AAAA,MAAA;AAGF,MAAImD,KACE,KAAA;AAAA,QACJA,EAAa;AAAA,QACb,CAAClD,MAAS;AACT,eAAK0B,GAAO,SAAS,KAAKa,GAAevC,CAAI,CAAC;AAAA,QAC/C;AAAA,QACAmB;AAAA,MACD;AAAA;AAAA,EACD;AAAA,EAGD,MAAMc,GAAYlC,GAA+B;AAEhD,QADA,MAAM,KAAKX,IACP,CAAC,KAAK,WAAkB,OAAA,IAAI,MAAM,+BAA+B;AAE/D,UAAA,EAAE,MAAAY,GAAM,OAAAC,MAAU,MAAM,KAAK,WAAW,aAAa,CAACF,CAAM,CAAC;AAYnE,QAVIE,KACH,KAAK2B,GAAU,UAAU;AAAA,MACxB,OAAO;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,MACA,QAAA7B;AAAA,IAAA,CAC4B,GAG1BC,GAAM;AACH,YAAAgC,IAAQ,KAAK,SAAS,GACtBd,IAAOc,EAAM,KAAK,CAACd,MAAS,KAAKS,GAAWT,CAAI,MAAMnB,CAAM;AAElE,UAAImB,GAAM;AACH,cAAAmC,IAAQrB,EAAM,QAAQd,CAAI,GAC1BoC,IAAW,CAAC,GAAGtB,CAAK;AACjB,QAAAsB,EAAAD,CAAK,IAAIrD,EAAK,CAAC,GACxB,KAAK0B,GAAO,SAAS,KAAKa,GAAee,CAAQ,CAAC;AAAA,MAAA;AAAA,IACnD;AAAA,EACD;AAAA,EAGDf,GAAevC,GAAwC;AAChD,UAAAW,IAAU,KAAK,WAAW;AAChC,WAAO,CAAC,GAAGX,CAAI,EAAE,KAAK,CAACvB,GAAGC,MAAM;AAC/B,YAAM6E,IAAS5C,EAAQ,QAAQ,KAAKgB,GAAWlD,CAAC,KAAK,EAAE,GACjD+E,IAAS7C,EAAQ,QAAQ,KAAKgB,GAAWjD,CAAC,KAAK,EAAE;AACvD,aAAO6E,IAASC;AAAA,IAAA,CAChB;AAAA,EAAA;AAAA,EAGF3B;AAAA,EAaS,UAAgB;AACxB,SAAKc,IAAe;AAAA,MACnBC,EAAsB;AAAA,MACtB,KAAKf;AAAA,IACN,GACA,MAAM,QAAQ;AAAA,EAAA;AAEhB;"}